GNU/Linux >> Linux の 問題 >  >> Linux

起動時にルートファイルシステムのチェック (およびオプションで修正) を強制するにはどうすればよいですか?

ext4 起動時のファイルシステムチェック

OS でテスト済み:仮想マシンの Linux Mint 18.x

基本情報

/etc/fstab fsck を持っています たとえば、最後 (6 番目) の列として注文します。

<file system>    <mount point>    <type>    <options>    <dump>    <fsck>
UUID=2fbcf5e7-1234-abcd-88e8-a72d15580c99 / ext4 errors=remount-ro 0 1

FSCKFIX=yes /etc/default/rcS の変数

これにより fsck が自動修正に変更されますが、変更されません fsck チェックを強制します。

man rcS から :

FSCKFIX
    When  the  root  and all other file systems are checked, fsck is
    invoked with the -a option which means "autorepair".   If  there
    are  major  inconsistencies then the fsck process will bail out.
    The system will print a  message  asking  the  administrator  to
    repair  the  file  system manually and will present a root shell
    prompt (actually a sulogin prompt) on the console.  Setting this
    option  to  yes  causes  the fsck commands to be run with the -y
    option instead of the -a option.  This will tell fsck always  to
    repair the file systems without asking for permission.

man tune2fs から

If you are using journaling on your filesystem, your filesystem
will never be marked dirty, so it will not normally be checked.

から始める

以下の設定

FSCKFIX=yes

ファイル内

/etc/default/rcS

fs が最後にチェックされた時間を確認してメモします:

sudo tune2fs -l /dev/sda1 | grep "Last checked"

これら 2 つのオプションは機能しませんでした

<オール>
  • -F を渡す (強制 fsck 再起動時) shutdown への引数 :

    shutdown -rF now
    

    いいえ;参照:man shutdown .

  • /forcefsck を追加する 空のファイル:

    touch /forcefsck
    

    これらのスクリプトはこれを使用しているようです:

    /etc/init.d/checkfs.sh
    /etc/init.d/checkroot.sh
    

    しなかった 再起動時に動作しますが、ファイルは削除されました。

    検証者:

    sudo tune2fs -l /dev/sda1 | grep "Last checked"
    sudo less /var/log/fsck/checkfs
    sudo less /var/log/fsck/checkroot
    

    これらは init のログのようです

  • 繰り返しますが、これら 2 つのオプションは機能しませんでした!

    これらの方法はどちらも DID が機能します

    <オール>
  • systemd-fsck カーネル ブート スイッチ

    メインの grub の編集 構成ファイル:

    sudoedit /etc/default/grub
    
    GRUB_CMDLINE_LINUX="fsck.mode=force"
    
    sudo update-grub
    sudo reboot
    

    これは以下で検証されたようにファイルシステムチェックを行いました:

    sudo tune2fs -l /dev/sda1 | grep "Last checked"
    

    注:この DID チェックしますが、強制的に修正するには、fsck.repair="preen" を指定する必要があります 、または fsck.repair="yes" .

  • tune2fs の使用 fsck を実行する前にファイル システムのマウント数を設定する 、 man tune2fs

    tune2fs' info is kept in the file system superblock
    

    -c スイッチは、fs をチェックする前に fs をマウントする回数を設定します。

    sudo tune2fs -c 1 /dev/sda1
    

    確認:

    sudo tune2fs -l /dev/sda1
    

    このDID 検証済みの動作:

    sudo tune2fs -l /dev/sda1 | grep "Last checked"
    
  • まとめ

    fsck を強制するには Linux Mint 18.x で起動するたびに、 tune2fs のいずれかを使用します 、または fsck.mode=force 、オプションの fsck.repair=preen 付き / fsck.repair=yes 、カーネルコマンドラインスイッチ。


    既存の回答に対するさらなる調査と更新

    上記がUbuntu 20.04 LTSベースのシステムで引き続き機能するかどうかを確認したかっただけです (Linux Mint 20 Cinnamon および Ubuntu MATE 20.04 で直接テスト)、ファイル システムのチェック間隔から始めましょう (すべてのコマンドをルートとして実行しました (お気づきかもしれませんが、~#) コマンドの前):

    ファイル システムのチェック間隔

    ~# LC_ALL=C tune2fs -l /dev/nvme0n1p2 | grep 'Check interval'
    
    Check interval:           0 (<none>)
    

    うーん、これは予想外でした。私たちはそれを世話したと思っていましたが、幸運にも非常に簡単に修正できます.引数として受け取る数値はデフォルトで日数ですので、1 日 (86400 秒) を意味する 1 ではなく、必ず 1 (1 秒) を使用してください:

    ~# LC_ALL=C tune2fs -i 1s /dev/nvme0n1p2
    
    tune2fs 1.45.5 (07-Jan-2020)
    Setting interval between checks to 1 seconds
    

    ここで、上記のチェックを繰り返すと、次のようになります。

    Check interval:           1 (0:00:01)
    

    もちろん、これはファイルシステムが 1 秒ごとにチェックされるという意味ではありません。むしろ、事実上、すべてのファイル システム マウントでファイル システム チェックを強制します。 (システムを 1 秒間に 2 回起動する方法はありません。)

    チェック前のファイル システムの最大マウント数

    デフォルト設定:

    ~# LC_ALL=C tune2fs -l /dev/nvme0n1p2 | grep 'Maximum mount count'
    
    Maximum mount count:      -1
    

    この設定は、ファイル システムがチェックされるまでに必要なマウントの回数を調整します。元の回答に書かれていることは問題ありません:

    ~# LC_ALL=C tune2fs -c 1 /dev/nvme0n1p2
    
    tune2fs 1.45.5 (07-Jan-2020)
    Setting maximal mount count to 1
    

    無視されるため、0 または -1 を使用しないように注意してください。

    後でさらに情報を追加する予定です...だから、チェックし続けてください(しゃれが意図されています)。

    情報源:

    • tune2fs マニュアルページ

    Linux
    1. Linux –起動時にルートファイルシステムのチェック(およびオプションで修正)を強制するにはどうすればよいですか?

    2. ファイルパーミッションの「s」属性はどういう意味ですか?

    3. Linuxのfsckコマンドでファイルシステムエラーをチェックして修復する

    1. ELFファイル形式のセクションとセグメントの違いは何ですか

    2. 「chattr +i FILE」と「chmod -w FILE」の違いは何ですか?

    3. fsync と syncfs の違いは何ですか?

    1. fsck と e2fsck の違いは何ですか?

    2. sudoers と root グループへのユーザーの追加の違いは何ですか?

    3. Linuxでファイルをコピー、読み取り、削除するコマンドは何ですか