以下内容仅限于以systemd为服务管理程序的系统,其它系统未做实验
主要涉及到以systemd-fsck开头的几个服务,它们会在开机时运行,但是,需要在 /etc/fstab文件中将需要检测的分区的最后一个字段配成 1或者2 (根分区配成1,其它分区配成2)。
然后重要的就是添加两个内核参数:fsck.mode=force fsck.repair=yes
添加完以后,重启,就会发现系统启动时的打印中包含了检查以及修复过程。
注意:
使用dd命令模拟硬盘损坏的方法,一般会破坏掉硬盘的超级块,这时候采用 sudo blkid命令就看不到被破坏的分区的UUID,此时开机是修复不了的。这种情况下,可以将 /etc/fstab文件中对应的分区的第一项不要使用UUID=的格式,而改成/dev/sdaX这种设备名的格式,这样开机也是能修复的。
还可以尝试另外一种方法,修改initrd的方式(修改方法参考我的另一篇博客https://blog.csdn.net/Wileste/article/details/112908059),修改内容如下:
解包以后,找到 script/functions文件,里面有个函数叫 _checkfs_once,按需求修改即可。修改完成以后,重新生成initrd,将替换掉原来的(注意将原来的initrd备份好,这样即使修改的initrd起不来,也可以通过grub命令手动引导系统)。这种方法目前来看只能修复启动硬盘上的分区的错误,而且该错误还不能影响根分区的挂载。如果修复其他分区的错误,会提示没有设备(暂时不清楚原因,还需要看脚本整个流程了解为什么)。