最近升级日期:2009/09/14
4. 启动过程的问题解决
4.1 忘记 root 口令的解决之道 4.2 init 配置档错误 4.3 BIOS 磁碟对应的问题 (device.map) 4.4 因文件系统错误而无法启动 4.5 利用 chroot 切换到另一颗硬盘工作 ![]() 很多时候,我们可能因为做了某些配置,或者是因为不正常关机 (例如未经通知的停电等等) 而导致系统的
filesystem 错乱,此时,Linux 可能无法顺利启动成功,那怎么办呢?难道要重灌?当然不需要啦!
进入 run level 1 (单人维护模式) 去处理处理,应该就 OK 的啦!底下我们就来谈一谈如何处理几个常见的问题! ![]() 大家都知道鸟哥的记忆力不佳,容易忘东忘西的,那如果连 root 的口令都忘记了,怎么办? 其实在 Linux 环境中 root 口令忘记时还是可以救回来的!只要能够进入并且挂载 / , 然后重新配置一下 root 的口令,就救回来啦!这是因为启动流程中,若强制核心进入 runlevel 1 时, 默认是不需要口令即可取得一个 root 的 shell 来救援的。整个动作有点像这样:
![]() 前一个 root 口令挽救的方法其实可以用在很多地方,唯一一个无法挽救的情况,那就是 /etc/inittab 这个文件配置错误导致的无法启动!根据启动流程,我们知道 runlevel 0~6 都会读取 /etc/inittab 配置档, 因此你使用 single mode (runlevel 1) 当然也是要读取 /etc/inittab 来进行启动的。那既然无法进入单人维护模式, 就表示这题无解罗?非也非也,既然默认的 init 无法运行,那我们就告诉核心不要运行 init ,改呼叫 bash 啊! 可以略过 init 吗?可以的,同样在启动进入 grub 后,同样在 grub edit 的情况下这样做:
因为我们指定了核心呼叫的第一支程序 (init) 变成 /bin/bash,因此 /sbin/init 就不会被运行。 又根据启动流程的说明,我们知道此时虽然可以利用 root 取得 bash 来工作,但此时 (1)除了根目录外,其他的目录都没有被挂载; (2)根目录被挂载成为唯读状态。因此我们还需要进行一些动作才行!如下所示: ![]() 图 4.2.1、 略过 init 的程序,直接进入 bash shell 鸟哥仅下达两个命令,『 mount -o remount,rw / 』用途是将根目录重新挂载成为可读写,至於『 mount -a 』则是参考 /etc/fstab 的内容重新挂载文件系统! 此时你又可以启动进行救援的工作了!只是救援完毕后,你得要使用『 reboot 』重新启动一次才行! ![]() 由於目前硬盘很便宜啊,所以很多朋友就想说:『那我能不能将 Windows 安装在 /dev/hda 而 Linux 安装在 /dev/hdb , 然后调整 BIOS 的启动装置顺序,如此则两套系统各有各的 loader 安装在个别硬盘的 MBR 当中了!』。 这个想法非常好,如此一来两者就不会互相干扰,因为每颗磁碟的 MBR 个别有不同操作系统的 loader 嘛! 问题是,grub 对磁碟的装置代号使用的是侦测到的顺序啊! 也就是说,你调整了 BIOS 磁碟启动顺序后,你的 menu.lst 内的装置代号就可能会对应到错误的磁碟上了!啊!真想哭! 没关系的,我们可以透过 /boot/grub/device.map 这个文件来写死每个装置对 grub 磁碟代号的对应喔! 举例来说,鸟哥的这个文件内容如下:
如果你不清楚如何处理的话,也可以利用 grub-install 的功能喔!例如:
这样 device.map 就会主动的被升级了!这样了解乎? ![]() 如果因为配置错误导致无法启动时,要怎么办啊?这就更简单了!最容易出错的配置而导致无法顺利启动的步骤,通常就是 /etc/fstab 这个文件了,尤其是使用者在实作 Quota 时,最容易写错参数, 又没有经过 mount -a 来测试挂载,就立刻直接重新启动,真要命!无法启动成功怎么办? 这种情况的问题大多如下面的画面所示: ![]() 图 4.4.1、 文件系统错误的示意图 看到最后两行,他说可以输入 root 的口令继续加以救援喔!那请输入 root 的口令来取得 bash 并以 mount -o remount,rw / 将根目录挂载成可读写后,继续处理吧!其实会造成上述画面可能的原因除了 /etc/fstab 编辑错误之外,如果你曾经不正常关机后,也可能导致文件系统不一致 (Inconsistent) 的情况, 也有可能会出现相同的问题啊!如果是磁区错乱的情况,请看到上图中的第二行处, fsck 告知其实是 /dev/md0 出错, 此时你就应该要利用 fsck 去检测 /dev/md0 才是!等到系统发现错误,并且出现『clear [Y/N]』时,输入『 y 』吧! 这个 fsck 的过程可能会很长,而且如果你的 partition 上面的 filesystem 有过多的数据损毁时, 即使 fsck 完成后,可能因为伤到系统槽,导致某些关键系统文件数据的损毁,那么依旧是无法进入 Linux 的。此时,就好就是将系统当中的重要数据复制出来,然后重新安装,并且检验一下, 是否实体硬盘有损伤的现象才好!不过一般来说,不太可能会这样啦~ 通常都是 fsck 处理完毕后,就能够顺利再次进入 Linux 了。 ![]() 仔细检查一下,你的 Linux 里面应该会有一个名为 chroot 的命令才对!这是啥? 这是『 change root directory 』的意思啦!意思就是说,可以暂时将根目录移动到某个目录下, 然后去处理某个问题,最后再离开该 root 而回到原本的系统当中。 举例来说,补习班中心最容易有两三个 Linux 系统在同一个主机上面,假设我的第一个 Linux 无法进入了,那么我可以使用第二个 Linux 启动,然后在第二个 Linux 系统下将第一个 Linux 挂载起来, 最后用 chroot 变换到第一个 Linux ,就能够进入到第一个 Linux 的环境当中去处理工作了。 你同样也可以将你的 Linux 硬盘拔到另一个 Linux 主机上面去,然后用这个 chroot 来切换, 以处理你的硬盘问题啊!那怎么做啊?粉简单啦!
|
||||||
本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室