當前位置: 首頁>>技術教程>>正文


如何使 fsck 在啟動時以非交互方式運行?

, ,

問題描述

我在 1500 英裏外的數據中心有一個無頭 Ubuntu 12.04 服務器。現在兩次重新啟動係統決定它必須 fsck。不幸的是,Ubuntu 在交互模式下運行 fsck,所以我不得不請我數據中心的某個人過去,插入控製台,然後按 Y 鍵。如何設置它,以便 fsck 在引導時使用 -y-p (又名 -a )標誌以非交互模式運行?

如果我正確理解了 Ubuntu 的啟動過程,init 會調用 mountall,而 mountall 又會調用 fsck。但是我看不到任何配置如何調用 fsck 的方法。這可能嗎?

(阻止一個建議;我知道我可以使用 tune2fs -i 0 -c 0 來防止周期性 fscks。這可能會有所幫助,但我需要係統嘗試恢複,即使它有真正的理由進行 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

最佳辦法

我正在尋找的設置在 /etc/default/rcSFSCKFIX=yes 。這意味著“在引導期間自動修複存在不一致的文件係統”並導致 fsck 使用 -y 標誌運行。在我的兩個 Ubuntu 係統中,它都設置為 no

即使設置為 no ,啟動時間 fsck 仍然有些非交互式。 mountall 使用 -a 運行 fsck,它是 -p 的同義詞,這意味著“自動修複任何可以在無需人工幹預的情況下安全修複的文件係統問題”。如果要進行不安全的修複,顯然 -p 會進入交互模式。要完全自動運行,您需要 -yFSCKFIX=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"));
}

次佳辦法

對於 Ubuntu 15、16、17+,FSCKFIX 值設置位於 lib/init/vars.sh

可以使用命令 grep -r FSCKFIX * 2>/dev/null 來查找。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/13009.html,未經允許,請勿轉載。