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

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

这很烦人,因为用户不能使用他的工作站,我们需要发送一个人来运行fsck。

用户不会在工作站上存储任何有价值的数据,那么有没有办法将这个fsckconfiguration成在没有任何密码的情况下自动运行错误?

什么可能最接近“正式”的方式来做到这一点,通常不build议(有充分的理由!)的事情:

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

所有版本的/etc/rc.d/rc.sysinit我已经检查在运行fsck之前将/fsckoptions的内容添加到$fsckoptionsvariables中。 chattr +i确保没有自动改变它。

所有这些飞行前检查都由操作系统创build的初始ramdisk映像(grub.conf中的initrd选项)控制,操作系统对文件系统上的错误进行快速testing,如果检测到错误,则会下降到单用户模式。 你改变这种行为来运行没有密码的fsck -y的过程,首先是解压你的内核RPM中包含的initrd镜像。 不幸的是,在每次系统更新之后,你可能必须这样做(因为redhat会为每个内核提供一个新的initrd(或者更具体地说,使用基于你的硬件的mkinitcpio生成一个新的initrd))。

在我们的环境中,我们有同样的问题,感谢你的这个想法。 如果我有时间来看看或解决这个问题,我一定会更新这个post。

我想我find了 在/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。

当然,诀窍在于testing这个愚蠢的东西。 我不知道如何强制一个文件系统错误,这将导致正常的自动fsck请求root密码,所以我可以知道它是否实际工作或没有。

用户不会在工作站上存储任何有价值的数据,那么有没有办法将这个fsckconfiguration成在没有任何密码的情况下自动运行错误?

这全部由/etc/rc.d/rc.sysinit控制,它只是一个shell脚本。 你可以修改这个以适应你的需求(虽然你需要小心,在包更新的情况下你的改变不会丢失)。 寻找脚本调用sulogin

查看这个脚本,看起来好像是要删除下面一行:

 touch /.autofsck &> /dev/null 

系统将不会在以下引导中运行fsck。 如果你使用的是ext3 (或ext4 ),你通常不需要运行fsck。

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

另一个解决问题的方法是:在GRUB / LILO中,将init=/bin/bash到命令行的末尾。 这将允许您绕过您获取fsck的sulogin提示符。