Linux

我應該怎麼做才能在引導時強制根文件系統檢查(以及可選的修復)?

  • December 6, 2020

昨天,我們的一台電腦掉到了grub外殼上,老實說,我不確定我們打開機器時它是什麼外殼。

它表明由於不一致,它無法掛載根文件系統或某種意義上的東西。

我跑了,我相信:

fsck -fy /dev/sda2

重新啟動,問題就消失了。

問題部分來了:

我已經在她的 root 的 crontab 中:

@reboot /home/ruzena/Development/bash/fs-check.sh

而腳本包含:

#!/bin/bash
touch /forcefsck

想一想,我不知道,為什麼我要為這麼短的命令創建腳本文件,但無論如何……

此外,在文件中:

/etc/default/rcS

我已經定義:

FSCKFIX=yes

所以我不明白。怎麼會出現這種情況?


我應該怎麼做才能在引導時強制根文件系統檢查(以及可選的修復)?

或者這兩件事是我能做的最大的事情嗎?

作業系統: Linux Mint 18.x Cinnamon 64 位。

fstab:

cat /etc/fstab | grep ext4

顯示:

UUID=a121371e-eb12-43a0-a5ae-11af58ad09f4    /    ext4    errors=remount-ro    0    1

grub:

fsck.mode=force

已添加到grub配置中。

ext4引導期間的文件系統檢查

在作業系統上測試:虛擬機中的 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"

這兩個選項不起作用

  1. 將(重啟-F時強制)參數傳遞給:fsck``shutdown
shutdown -rF now

沒有; 見:man shutdown。 2. 添加/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腳本的日誌。

我再說一遍,這兩個選項都不起作用!


這兩種方法都有效

  1. 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"

注意:這確實是一個檢查,但要強制修復,您需要指定fsck.repair="preen", 或fsck.repair="yes". 2. 用於在執行atune2fs之前設置文件系統掛載的數量fsckman tune2fs

tune2fs' info is kept in the file system superblock

-cswitch 設置在檢查 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 上每次啟動時強制執行 a,請使用tune2fsfsck.mode=force,以及可選的fsck.repair=preen/ fsck.repair=yes,核心命令行開關。

引用自:https://unix.stackexchange.com/questions/400851