我正在尝试处理一种非常罕见的极端情况,即我的系统的 ext4 文件系统出现轻微损坏。这会触发 systemd emergency.service
,我正在尝试改变它的行为以自动修复文件系统。
无论如何,有没有办法稍微改变分区/文件系统以在数据丢失的可能性最小的情况下引发这种状态?我只需要fsck
返回某些错误。
答案1
如果 emergency.service 运行,则表示已尝试 initrd 切换根或 fsck 并失败。可以使用内核命令行参数 fsck.repair=yes 指示 systemd-fsck-root.service 始终修复(fsck -y)
对于 /etc/fstab(第 6 个字段)中 passno 值为 0 的任何文件系统,都将跳过 fsck。对于有损坏历史的系统,这可能是一个坏主意,但如果文件系统挂载允许继续操作。
可以使用 fstab 中的 nofail 选项使文件系统不再需要 local-fs.target。但是,这不适用于 root fs。请考虑在您怀疑包含问题文件的挂载点创建一个新文件系统,例如 /var/lib/whatever。使用 nofail 选项,即使挂载失败,也不会进入紧急 shell。
备份是避免丢失重要数据的最后一道防线。不要依赖修复来解决问题,即使是在成熟的文件系统上。
e2fsprogs 测试套件中存在一些损坏的文件系统。实际使用起来很棘手,尤其是作为根文件系统。使用它来镜像您的块设备,将其扩展,然后从备份中恢复您的数据。