文章目录

  • 一、init 配置文件错误
  • 二、BIOS磁盘对应的问题 (device.map)



一、init 配置文件错误

上一篇文章讲的 root 密码挽救的方法其实可以用在很多的地方,但有一种情况无法挽救,那就是 /etc/inittab 这个档案设定错误导致的无法开机!根据开机流程,我们知道 runlevel 0~6 都会读取 /etc/inittab 配置文件, 因此你使用 single mode (runlevel 1) ,当然也是要读取 /etc/inittab 来进行开机的。那既然无法进入单机维护模式, 就表示这题无解嘛?不是,既然预设的 init 无法执行,那我们就告诉核心不要执行 init ,改呼叫 bash ,在开机进入 grub 后,同样在 grub edit 的情况下这样做:

grub edit> kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet 
init=/bin/bash

因为我们指定了核心呼叫的第一支程序 (init) 变成 /bin/bash,因此 /sbin/init 就不会被执行。,根据

开机流程,我们知道此时虽然可以利用 root 取得 bash 来工作,但此时 除了根目录外,其他

的目录都没有被挂载,而且根目录被挂载成为只读状态。因此我们还需要进行一些动作才可以!如下所示:

Linux开机卡在system initializing linux开机卡在79_配置文件


mount -o remount,rw / 的用途是将根目录重新挂载成为可查写,至于 mount -a 是参考 /etc/fstab 的内容重新挂载文件系统,此时可以开机进行救援的工作了,但是救援完毕后,需要重启系统才可以。

二、BIOS磁盘对应的问题 (device.map)

将 Windows 安装在 /dev/hda 而 Linux 安装在 /dev/hdb ,然后调整 BIOS 的开机装置顺序,如此则两套系统各有各的 loader 安装在不同的硬盘的 MBR 当中,这样此一来两者就不会互相干扰,因为每颗磁盘的 MBR 有不同操作系统的 loader 。但问题是,grub 对磁盘的装置代号使用的是侦测到的顺序,也就是说,你调整了 BIOS 磁盘开机顺序后,你的 menu.lst 内的装置代号就可能会对应到错误的磁盘上。

其实这个情况也很好解决,可以通过 /boot/grub/device.map 这个档案来写死每个装置对 grub 磁盘代号的对应,如下:

Linux开机卡在system initializing linux开机卡在79_配置文件_02


这样的话就可以解决这个问题了。