fsck:每次用 -c 检查后文件系统都被修改了,为什么?

fsck:每次用 -c 检查后文件系统都被修改了,为什么?

我使用脚本自动对 CF 卡(与 USB 卡写入器连接)进行分区和格式化。主要过程结束后,我再次使用 fsck 检查卡。为了检查坏块,我还尝试了“-c”开关,但我总是得到返回值 != 0 和消息“文件系统已修改”(见下文)。多次检查同一个驱动器时,我得到的结果相同...

有谁知道为什么 a)文件系统完全被修改了,以及 b)为什么每次我检查时都会发生这种情况,而不仅仅是在出现错误(例如坏块)的情况下?

输出如下:

linux-box# fsck.ext3 -c /dev/sdx1
e2fsck 1.40.2 (12-Jul-2007)
Checking for bad blocks (read-only test): done
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

Volume (/dev/sdx1): ***** FILE SYSTEM WAS MODIFIED *****
Volume (/dev/sdx1): 5132/245760 files (1.2% non-contiguous), 178910/1959896 blocks

答案1

手册页上写道:

-C
此选项使 e2fsck 运行 badblocks(8) 程序来查找文件系统上的任何坏块,然后通过将它们添加到坏块 inode 来将它们标记为坏块。如果两次指定此选项,则将使用非破坏性读写测试进行坏块扫描。

因此,该-c选项写入文件系统,fsck解释为“纠正错误”,因此返回代码为1(“文件系统错误已纠正”)

...那么,你会问,为什么1当你指定时它会返回-n,它应该以只读方式打开文件系统并且不做任何更改?
好吧,进一步阅读手册页也会找到答案:

-n 以只读方式打开文件系统,并假设所有问题的答案都是“否”。允许以非交互方式使用 e2fsck。(注意:如果-C-l, 或者-L除了指定选项之外,还指定了-n选项,则文件系统将以读写方式打开,以允许更新坏块列表。但是,不会对文件系统进行任何其他更改。)

(换句话说:这-n是谎言!)


此答案完全由的手册页fsck.ext3

答案2

您是否尝试过使用 -v 开关对 fsck 进行操作以获取更多信息?您也可以尝试单独运行 badblocks 并检查其输出。

答案3

最有可能的是,文件系统“标签”区域被写入了。那么上次 fsck 的日期/时间以及自上次挂载以来文件系统标签中的计数字段的次数呢?

如果您查看 tune2fs 参数,这种写入类型将支持 -c 和 -i 参数,以实现对 ext3 文件系统的自动完整 fsck 支持。

相关内容