![强制 fsck 在启动时失败](https://linux22.com/image/804700/%E5%BC%BA%E5%88%B6%20fsck%20%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E5%A4%B1%E8%B4%A5.png)
我正在研究嵌入式 Debian Linux 设备。由于随时可能被拉断电源,导致突然断电,我们已在 /etc/default/rcS 文件中将 FSCKFIX 从“否”设置为“是”。如果没有这个,我遇到了错误,系统会进入终端,等待用户(在串行术语上)手动运行 fsck 来修复磁盘(由于设备在正常运行时没有终端,这实际上会损坏设备)。此外,该卡已设为 RO,并根据需要重新安装为 RW 以进行更新,但我认为这与我的问题无关。
我一直在尝试对此进行单元测试,这会损坏 SD 卡,然后我们应该能够将卡放回嵌入式设备中,它应该可以正常修复并自行启动。
最初,我只对可靠地生成有时在 FSCKFIX=no 下看到的故障感兴趣,即转到终端通过 fsck 手动修复卡。我尝试了建议这里和这里,但这些方法要么使卡完全无法启动,要么似乎被忽略/修复,系统正常启动,而不会将我踢到终端运行 fsck。所以看来我需要以一种非常特殊的方式损坏磁盘,以强制 fsck 需要手动干预,FSCKFIX=no。有人能告诉我怎么做吗???
干杯。
答案1
好的,从技术上讲,我从 Iain 发布的链接中得到了答案(欢呼!),我只需要进行大量计数并确保我使用 -f 和 -F 选项以及 -p 调用 e2fsck 以让 fsck 发现问题。
sudo dd if=/dev/zero of=/dev/mmcblk0p4 bs=1 count=4096 seek=10000; sync sudo e2fsck -f -F -p /dev/mmcblk0p4; echo $? /dev/mmcblk0p4: 调整 inode 大小无效。
/dev/mmcblk0p4:意外不一致;手动运行 fsck。(即不使用 -a 或 -p 选项)4
虽然这让我得到了我想要的结果(一张损坏的 SD 卡),但我真的很想知道当 fsck 不使用数据校验和时,它是如何检测 ext3 分区是否损坏的,如果它使用日志,那么它如何对 ext2 或 ext3 wo 日志记录起作用?
再次欢呼