Fsck 命令用於檢查 Linux 和類 Unix 操作系統中的文件系統一致性。 在系統上,fsck 自動或手動運行。 運行 fsck 時不應掛載文件系統。 對於 root 和非 root 文件系統,我們可以強制 fsck 在重新啟動時運行。
在本教程中,我們將學習如何 重新啟動時強制 fsck 檢查文件系統錯誤。
在 systemd 上的系統啟動時強制 fsck
許多現代的Linux發行版,現在採用 系統 系統。 使用 tune2fs 的傳統方式僅適用於 sysvinit 或 upstart 系統。
對於基於systemd的Linux發行,加 fsck.mode=force
到您的 grub 配置文件作為內核參數。 需要注意的是 systemd-fsck 對文件系統一無所知,因此它只運行特定於每個文件系統類型 (/sbin/fsck.*) 的文件系統檢查器。 如果你有一個 ext4 文件系統,對於 example, systemd-fsck 將運行 /sbin/fsck.ext4。
你需要添加 fsck.mode=force
到 GRUB_CMDLINE_LINUX_DEFAULT,在最後一個引號 (“) 的末尾。
為了 example:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash fsck.mode=force"
您可以使用 nano 命令編輯 grub 配置。
$ sudo nano /etc/default/grub
輸出:
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD …)
# GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal (grub-pc only)
# GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
# GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
# GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
# GRUB_DISABLE_RECOVERY="true"
# Uncomment to get a beep at grub start
# GRUB_INIT_TUNE="480 440 1"
如果要自動修復容易修復的問題,可以添加選項 fsck.repair=yes
到 grub 配置文件。 是的 fsck.repair
表明該系統接受“是”的回答為所有fsck的問題; 如果你希望系統接受“不”作為答案不使用。
您需要像以前一樣編輯grub配置文件並添加 fsck.repair=yes
或者 fsck.repair=no
到 GRUB_CMDLINE_LINUX_DEFAULT。
對於 fsck.repair=yes
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash fsck.mode=force fsck.repair=yes"
對於 fsck.repair=no
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash fsck.mode=force fsck.repair=no"
確保您沒有進行任何額外的更改並且您所做的更改是正確的,否則您的系統將無法啟動。 完成更改後,您可以保存 nano 文件並退出。
完成編輯並保存文件後,運行以下命令來更新 Linux 發行版的 Grub2 配置。
$ sudo update-grub
您現在必須重新啟動系統,fsck 將在啟動時執行文件系統一致性檢查。
如果不希望 fsck 在每次引導時執行文件系統一致性檢查,則必須刪除已添加到 grub 配置文件的任何其他步驟。
對於 systemd 在引導期間執行單次強制 fsck:
- 啟動到 Grub 菜單
- 當條目突出顯示時,按“e”編輯命令
- 按“結束”鍵將光標移到最後
- 添加一個空格,然後添加內核參數
fsck.mode=force
- 按Ctrl + X到 close 並啟動系統
在 sysvinit 或 Upstart 系統上的系統啟動時強制 fsck
在舊的 Linux 發行版中有兩種執行強制 fsck 的方法:使用 tune2fs 和 forcefsck.
如果文件系統被定義為損壞或經過特定次數的引導或時間後,fsck 將在引導時執行。 只有 EXT4、EXT3 和 EXT2 文件系統可以在每次重新啟動時強制執行 fsck。
tune2fs 允許在 Linux 上調整各種可調文件系統參數。 我們將使用這個命令來達到我們的目的。
以下命令 tune2fs 命令設置文件系統 (/dev/sda1) 以在每次系統重新啟動時執行 fsck:
$ sudo tune2fs -c 1 /dev/sda1
還要確保在 /etc/fstab 文件中,通過最後的第 6 列([PASS]
)大於零。
0
– 不要檢查。1
– 要首先檢查的文件系統。 通常root分區設置這個值2
– 最後檢查並可能並行檢查的文件系統。
如果要強制 fsck 在 10 次引導後運行文件系統檢查,請將 -c 的值設置為 10。
$ sudo tune2fs -c 10 /dev/sda1
要停止 fsck 在每次引導時運行,您可以將 -c 的值替換為 -1 並運行該命令。
$ sudo tune2fs -c -1 /dev/sda1
tune2fs 工具可用於檢查當前掛載計數、最大掛載計數、上次檢查時間和間隔。
$ sudo tune2fs -l /dev/sda1 | grep -i 'last checked|mount count|check interval'
輸出:
$ sudo tune2fs -l /dev/sda1 | grep -i 'last checked|mount count|check interval'
Mount count: 31
Maximum mount count: -1
Last checked: Fri May 8 08:08:15 2020
Check interval: 0 ()
“最大掛載次數”是審查文件系統之前的最大掛載次數。 如果最大值為 0 或 -1,fsck 將永遠不會運行。 “檢查間隔”是指兩次文件系統檢查之間經過的時間量。
這是可能的一定數量的坐騎後,運行fsck,為 example,如果你想在每10次掛載後運行fsck,可以使用以下命令。
$ sudo tune2fs -c 10 /dev/sda1
輸出:
$ sudo tune2fs -c 10 /dev/sda1
tune2fs 1.45.6 (20-Mar-2020)
Setting maximal mount count to 10
$ sudo tune2fs -l /dev/sda1 | grep -i 'last checked|mount count|check interval'
Mount count: 31
Maximum mount count: 10
Last checked: Fri May 8 08:08:15 2020
Check interval: 0 ()
使用forcefsck
在較舊的 Linux 發行版中,只需在根目錄 (/) 分區下創建一個名為 forcefsck 的文件即可在根分區上執行 force fsck。
$ sudo touch /forcefsck
檢查是否創建該文件。
$ sudo ls /forcefsck
輸出:
$ sudo touch /forcefsck
$ sudo ls /forcefsck
/forcefsck
$
現在您可以重新啟動或在下次重新啟動時,系統將在根文件系統上執行 fsck。
通常 /forcefsck 文件會在 fsck 之後自動刪除,如果沒有刪除,您可以手動刪除該文件。
結論
在本教程中,我們學習瞭如何在 Linux 中的 root 和非 root 文件系統上強制執行 fsck。 感謝閱讀,歡迎在評論區提出您的建議。