如何强制 ext3 分区进入“错误”状态?

如何强制 ext3 分区进入“错误”状态?

我有一个脚本,其中仅在文件系统处于“错误”状态时调用 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 挂载到某处,然后您就可以重新开始工作了。

相关内容