最近,我们在 RHEL VM 服务器上收到大量内核消息,如下所示:
[Mon Oct 4 11:33:32 2021] EXT4-fs error (device sdb): htree_dirblock_to_tree:914: inode #397095: block 1585151: comm du: bad entry in directory: rec_len is smaller than minimal - offset=0(4096), inode=0, rec_len=0, name_len=0
所以我们嘲笑也fsck
使用选项自动运行-a
(umount
当然之后)
$ fsck -a /dev/sdb
fsck from util-linux 2.23.2
/dev/sdb contains a file system with errors, check forced.
/dev/sdb: Directory inode 397095, block #1, offset 0: directory corrupted
/dev/sdb: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
(i.e., without -a or -p options)
尽管我们声明使用该-a
选项,fsck
但坚持不使用它
所以最后一个选择是手动执行
# fsck /dev/sdb
fsck from util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
/dev/sdb contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Inode 2134692 ref count is 2, should be 1. Fix<y>? yes
Unattached inode 2134798
Connect to /lost+found<y>? yes
Inode 2134798 ref count is 2, should be 1. Fix<y>? yes
Unattached inode 2135050
Connect to /lost+found<y>? yes
Inode 2135050 ref count is 2, should be 1. Fix<y>? yes
Unattached inode 2135058
Connect to /lost+found<y>? yes
Inode 2135058 ref count is 2, should be 1. Fix<y>? yes
正如我们在上面看到的,这需要时间
知道如何强制fsck
使用标志或在没有手动步骤的情况-a
下运行吗?fsck
答案1
-a
(或)选项-p
用于告诉fsck
尝试在没有用户交互的情况下修复文件系统,如果这是不可能的(存在丢失数据或通过选择错误选项进一步损坏文件系统的风险)fsck -a
将失败并告诉您运行在手动模式下进行操作并自行决定如何修复每个错误。
自动修复(“整理”)文件系统。此选项将导致 e2fsck 自动修复任何无需人工干预即可安全修复的文件系统问题。如果 e2fsck 发现可能需要系统管理员采取额外纠正措施的问题,e2fsck 将打印问题的描述,然后以逻辑或值 4 写入退出代码退出。 (请参阅“退出代码”部分。)此选项通常由系统的引导脚本使用。
如果您想fsck
完全以非交互方式运行,您可以使用该-y
选项来回答yes
所有问题,但我建议不要这样做。