我有一个脚本,其中 fsck 被调用,以防文件系统仅处于“错误”状态。我想测试一下。不幸的是,我不知道如何在 ext3 分区上强制“错误”状态。
我唯一的想法是先在挂载的分区上运行 fsck。一旦出现文件系统可能损坏的警告,我希望它会有所帮助。需要尝试。同时,可能有人已经知道答案了吗?
use*_*834 10
好吧,这里是: debugfs -w -R "ssv state 2" /dev/sda1
debugfs 是 e2fsprogs 包的一部分,用于对 ext2/3 文件系统进行低级访问。
-w - work in r/w;
-R - run one command and exit;
ssv - set superblock value, self-describing;
state - just a name of the field containing state of filesystem.
Run Code Online (Sandbox Code Playgroud)
代码是:
0 - not clean
1 - clean
2 - not clean with errors
Run Code Online (Sandbox Code Playgroud)
我在虚拟机中简单地摆弄了这个。我最初的想法是用核武器攻击分区的主超级块。这样做不会导致 dumpe2fs 报告“错误”的“文件系统状态”,但它(显然)确实会破坏您的分区(“超级块中的错误幻数”)......所以也许这就是您测试所需的全部内容。在此状态下针对分区运行 fsck 并检查 的值$?将报告状态 8(操作错误)。
无论如何,这很危险,我不建议在任何拥有您关心的数据的系统上这样做。像我一样在虚拟机中尝试一下。
您可以获得有关文件系统的一些信息,如下所示:
dumpe2fs /dev/sda1 | egrep "state|superblock|Block size"
Run Code Online (Sandbox Code Playgroud)
您将看到文件系统有一个主超级块和一些备份超级块。如果您准备破坏某些东西,请注意该输出中的一些内容:
现在销毁你的主要超级块:
dd if=/dev/zero of=/dev/sda1 bs=X count=1 seek=Y
Run Code Online (Sandbox Code Playgroud)
恭喜!您的文件系统现在已损坏。
如果已安装则卸载它:
umount /dev/sda1
Run Code Online (Sandbox Code Playgroud)
然后运行 fsck 并指定前面提到的备份超级块之一的位置:
fsck -b Z /dev/sda1
Run Code Online (Sandbox Code Playgroud)
现在将 /dev/sda1 安装到某处,您应该可以恢复正常工作了。