不光对于linux对于其他的操作系统一样,我们要想对系统启动故障进行排除,就必须了解系统的构造,以及启动过程所牵涉到文件及程序。
1.Linux操作系统的构成(大致分为三个层次):
内核能够完成的任务:管理内存、调度任务、驱动硬件、网络功能、安全、文件系统
linux系统的启动过程:
加电-->cmos-->post(上电自测试)-->grub
2. 系统启动引导的过程(如下图):如果系统采用硬盘引导的话,那么每块硬盘的前端的第一个扇区就是MBR(512Byte),MBR分为三个部分:前446Byte为bootloader(引导加载器),中间64Byte分区表,后2Byte magic
MBR中的bootloader引导了系统启动的第一阶段,grub菜单引导了系统启动的第二阶段(grub的配置)。
grub 菜单的配置:
当第二阶段引导完成会grub菜单会提示我们选择操作系统,
选择完操作系统后,系统就会加载内核,
内核加载完成后就开始运行系统中第一个进程―INIT,在linux操作系统中init是一切进程的前提。
运行init进程会调用/etc/inittab配置文件,指明系统进入的默认级别,无论进入任何的级别,系统都会调用/etc/rc.d/rc.sysinit脚本对系统进行初始化,当系统进入某一级别时,执行/etc/rc.d/rc系统会进入相应级别的目录{etc/rc0.d/ etc/rc1.d/ etc/rc2.d/ etc/rc3.d/ etc/rc4.d/ etc/rc5.d/ etc/rc6.d/},执行到最后时,系统会执行/etc/rc.d/rc.local(又称为开机脚本),最后根据提供的终端进行登录。
至此,系统引导到开机的整个过程就完成了。
故障排除:在linux系统中故障一般发生在系统引导的第一阶段或者第二阶段。第一阶段发生故障的原因是MBR中446Byte的bootloader出现问题,如果出现问题就看不到后面的grub菜单;第二阶段是grub菜单的配置文件和说明文件出现问题,就没有办法选择操作系统。
下面我们模拟第一阶段的故障:
首先,使用dd if=/dev/zero of=/dev/sda bs=446 count=1命令重写硬盘的前446字节,把MBR中的446字节的bootloader盖掉。
重启之后,发现系统引导失败
此时,我们可以通过引导光盘进行引导系统,进入急救模式(rescue)
进入急救模式后,出现下面的画面,选择相应的操作:
点击ok,出现如下界面:
此时,我们需要重建第一阶段,首先执行grub进入下图模式
然后,用root(hd0,0)来指明某一盘的引导分区,接着使用setup(hd0)重建硬盘的第一阶段。
接着,使用crtl+c组合键退出grub模式,连续执行两次exit,系统会自动引导,若引导成功会出现如下的登陆界面。
第二阶段的故障模拟:
第二阶段主要在/boot/grub/生成很多的配置和说明文件,如果/boot/grub/下的grub.conf文件丢失了,会出现什么情况呢?现在我们把该目录下的grub.conf文件删除,然后重启系统。
结果出现了以下界面
进入了grub模式,说明我们第一阶段的引导正常,问题出现在了第二阶段。
然后,使用boot来启动引导,接着出现下面的登陆界面:
我们进入系统,使用grub-install --root-directory=/ /dev/sda 来重建二阶段。
由于第二阶段相关的文件都在/boot/grub/目录下,我们进入该目录下,查看是否文件缺失
结果发现链接所指的文件不存在,那么我们就需要创建该文件(grub.conf)内容如下:
然后重新启动,若正常出现如下的界面,说明引导正常:
现在来模拟更严重的第二阶段的引导,如果我的/boot/grub/下的文件全部丢失了,现在会出现什么情况呢?我们该怎么办?
首先,我把/boot/grub/目录下的文件全部删除掉,然后重新启动系统出现如下界面:
此时,我们需要进入cmos模式,把引导项修改为光盘引导:
按F10保存修改,会进入如下界面:
然后,进入rescue急救模式,出现如下操作:
点击ok,出现如下界面:
然后,使用chroot改变根目录为/mnt/sysimage,使用ls 来查看/boot/grub/目录下的内容发现内容为空,然后使用grub-install 重建第二阶段:
再次,查看/boot/grub/目录:
此时,由于我们在cmos中设置了光盘引导,所以要使用硬盘引导的话,就必须去掉光盘,这里我们取出光盘,连续执行两次exit,系统会自动引导,接着出现如下界面:
进入了grub模式,说明我们第一阶段的引导正常,问题出现在了第二阶段。
然后,使用boot来启动引导,接着出现下面的登陆界面:
我们进入系统,使用grub-install --root-directory=/ /dev/sda 来重建二阶段。
由于第二阶段相关的文件都在/boot/grub/目录下,我们进入该目录下,查看是否文件缺失
结果发现链接所指的文件不存在,那么我们就需要创建该文件(grub.conf)内容如下:
然后重新启动,若正常出现如下的界面,说明引导正常: