我有一个脚本,其中仅在文件系统处于“错误”状态时调用 fsck。我想测试一下它。不幸的是,我不知道如何在 ext3 分区上强制“错误”状态。
我唯一的想法是先在已安装的分区上运行 fsck。一旦出现文件系统可能损坏的警告,我希望它能有所帮助。需要尝试。同时,可能有人已经知道答案了?
答案1
嗯,这里是: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.
代码为:
0 - not clean
1 - clean
2 - not clean with errors
答案2
我在虚拟机中简单调试了一下。我最初的想法是删除分区的主超级块。这样做不会导致 dumpe2fs 报告“文件系统状态”为“错误”,但它确实(显然)破坏了您的分区(“超级块中的魔法数字错误”)......所以也许这就是您测试所需要的全部。对处于此状态的分区运行 fsck 并检查值$?
将报告状态 8(操作错误)。
无论如何,这很危险,我不建议在任何有您关心的数据的系统上执行此操作。像我一样在虚拟机中尝试一下。
您可以像这样获取有关文件系统的一些信息:
dumpe2fs /dev/sda1 | egrep "state|superblock|Block size"
您将看到文件系统有一个主超级块和一些备份超级块。如果您准备破坏某些东西,请注意该输出中的几点:
- “块大小:X”:记下 X
- “Y 处的主要超级块”:注意 Y
- “备份 Z 处的超级块”:记下至少一个 Z
现在销毁你的主要超级块:
dd if=/dev/zero of=/dev/sda1 bs=X count=1 seek=Y
恭喜!您的文件系统现已损坏。
如果已安装则卸载:
umount /dev/sda1
然后运行 fsck,指定前面提到的备份超级块之一的位置:
fsck -b Z /dev/sda1
现在将 /dev/sda1 挂载到某处,然后您就可以重新开始工作了。