在没有 root 密码的情况下,如何在崩溃后在启动时运行 fsck?

在没有 root 密码的情况下,如何在崩溃后在启动时运行 fsck?

当用户的 Red Hat 5.x 工作站崩溃并导致其文件系统出现错误时,在下次启动时,它会要求输入 root 密码以进入单一模式并手动运行 fsck。

这很烦人,因为用户无法使用他的工作站,而我们需要派人来运行 fsck。

用户不会在他们的工作站上存储任何有价值的数据,那么有没有办法配置这个 fsck 以在出现错误时自动运行而无需任何密码?

答案1

最接近“官方”的方式来做这件通常不推荐的事情(有充分理由!):

echo ' -y ' > /fsckoptions
chattr +i /fsckoptions

我检查过的所有版本在运行之前/etc/rc.d/rc.sysinit都会将的内容添加/fsckoptions到变量中。确保没有任何东西会自动更改它。$fsckoptionsfsckchattr +i

答案2

所有这些预检都由操作系统创建的初始 ramdisk 映像(grub.conf 中的 initrd 选项)控制,它会快速测试文件系统上的错误,如果检测到错误,则进入单用户模式。要将此行为更改为fsck -y无需密码即可运行,首先要解压内核 RPM 中包含的 initrd 映像。不幸的是,您可能需要在每次系统更新后执行此操作(因为 redhat 为每个内核附带一个新的 initrd(或者更具体地说,根据您的硬件使用 mkinitcpio 生成一个新的 initrd))。

我们的环境中也存在同样的问题,感谢您的这个想法。如果我有时间研究或解决这个问题,我一定会更新这篇文章。

答案3

...我想我找到了。在 /etc/rc.d/rc.sysinit 中,有几行内容如下:

如果 ![[ " $fsckoptions" =~ " -y" ]]; 那么
        fsckoptions="-a $fsckoptions"
  • 如果我没看错的话,如果之前的 $fsckoptions 中没有 -y(该文件可能不存在),则将 -a 添加到 fsck 选项中。我对其进行了一点更新:
如果 ![[ " $fsckoptions" =~ " -y" ]]; 那么
        如果 ![[ " $fsckoptions" =~ " -a" ]]; 那么
                如果 ![[ " $fsckoptions" =~ " -p" ]]; 那么
                        fsckoptions="-y $fsckoptions"
  • 基于 e2fsck 命令行:如果它不包含 -y、-a 或 -p,则会添加 -y。

当然,诀窍在于测试这个愚蠢的东西;我不知道如何强制文件系统错误,导致正常的自动 fsck 请求 root 密码,这样我才能知道它是否真的有效。

答案4

我不知道如何绕过密码。如果您不担心文件系统的完整性,您可以通过fastboot在 grub.conf 中附加到内核行来完全绕过 fsck。

相关内容