web-dev-qa-db-ja.com

ブート時にfsckを非対話的に実行するにはどうすればよいですか?

1500マイル離れたデータセンターにヘッドレスUbuntu 12.04サーバーがあります。再起動時に2回、システムはfsckが必要であると判断しました。残念ながら、Ubuntuはインタラクティブモードでfsckを実行したため、データセンターの誰かにアクセスして、コンソールを接続し、Yキーを押すように頼む必要がありました。 -yまたは-p(別名-a)フラグを使用して、ブート時にfsckが非対話モードで実行されるように設定するにはどうすればよいですか?

Ubuntuのブートプロセスを正しく理解している場合、initは mountall を呼び出し、これによりfsckが呼び出されます。ただし、fsckの起動方法を設定する方法はありません。これは可能ですか?

(1つの提案を回避するために、定期的なfscksを防ぐためにtune2fs -i 0 -c 0を使用できることを承知しています。これは少し役立つかもしれませんが、fsckの本当の理由があったとしても、システムが立ち直ろうとする必要があります。停電後に言います。)

フォローアップの質問への回答として、ここに私の/ etc/fstabの関連する詳細があります。 Ubuntuがそこから編集したものから、これをまったく編集したとは思わない。

UUID=3515461e-d425-4525-a07d-da986d2d7e04 /               ext4    errors=remount-ro 0       1
UUID=90908358-b147-42e2-8235-38c8119f15a6 /boot           ext4    defaults        0       2
UUID=01f67147-9117-4229-9b98-e97fa526bfc0 none            swap    sw              0       0
19
Nelson

私が探している設定は / etc/default/rcSFSCKFIX=yesにあります。これは、「ブート中に不整合のあるファイルシステムを自動的に修復する」ことを意味し、-yフラグを指定してfsckを実行します。私の両方のUbuntuシステムでnoに設定されました。

noに設定されている場合でも、ブート時間fsckはまだいくらか非対話的です。 mountallは、-aの同義語である-pを使用してfsckを実行します。これは、「人間の介入なしで安全に修正できるファイルシステムの問題を自動的に修正する」ことを意味します。安全でない修正が行われると、-pはインタラクティブモードになります。完全に自動的に実行するには、-yまたはFSCKFIX=yesが必要です。

以下は、mountall.cからの関連するコードです。

if (fsck_fix || mnt->fsck_fix) {
  NIH_MUST (nih_str_array_add (&args, NULL, &args_len, "-y"));
} else {
  NIH_MUST (nih_str_array_add (&args, NULL, &args_len, "-a"));
}
28
Nelson

Ubuntu 15,16,17+の場合、FSCKFIX値の設定はlib/init/vars.shにあります

コマンドgrep -r FSCKFIX * 2>/dev/nullを使用して終了できます。

2
setec

Fstabでこれを引き起こす可能性のあるフラグがないことを確認し、initスクリプトを確認してください。 ( 'fsck'のinit scripsをgrepして、それが使用されている場所を見つけてください)私のシステムはfsckを非対話的に実行します。したがって、fstabのコピーと/ etc/init/mountallスクリプトの一部を比較できます

$ cat /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
UUID=acbe3514-33a3-4170-b1be-df7b8460a49a /               ext4    errors=remount-ro 0       1
UUID=d361f696-7abc-11e1-9043-5711de71ade6 /home           ext4    defaults        0       2
UUID=213e032c-fce9-4e1b-9d64-0779f0db4208 none            swap    sw              0       0

/ etc/init/mountallのスニペット

script
    . /etc/default/rcS
    [ -f /forcefsck ] && force_fsck="--force-fsck"
    [ "$FSCKFIX" = "yes" ] && fsck_fix="--fsck-fix"

    # set $LANG so that messages appearing in plymouth are translated
    if [ -r /etc/default/locale ]; then
        . /etc/default/locale
        export LANG LANGUAGE LC_MESSAGES LC_ALL
    fi

    exec mountall --daemon $force_fsck $fsck_fix
end script
1
Sepero