我正在测试一些根据某些请求从 Linux 主机上的外部存储安装磁盘的软件。
作为其中的一部分,有一个功能是,如果由于文件系统错误导致挂载失败,它将运行 fsck。
为了测试此功能,我需要在 ext4 文件系统中标记某些内容,这些内容将导致挂载失败但可以通过 fsck 修复。
我已尝试通过 debugfs 标记脏位 - 但它不会导致挂载失败。
我曾尝试将魔法数字更改为某个随机值 - 但这不是一个选项,因为我们需要魔法数字(工具的限制)。
我尝试将一些组描述符位图或块设置为 0 - 但也没有用。
是否有一致的方法可以实现这一目标?
查看源代码,我认为您想要强制
EFSCORRUPTED
错误。在我看来,最有希望的一句话是:
这检查根目录是否符合预期。最安全的更改参数是大小,我认为可以从 inode 列表中重建。您可以使用以下命令将根目录的大小设置为 0:
如果你愿意,你可以
fsck
通过设置脏位来强制执行(你知道这个,但为了完成):然后,如果我尝试安装它,我会收到此错误:
之后,
fsck
看起来根目录的大小已正确恢复。不过不能保证,请先备份您的数据,以防万一。