linux的启动流程及启动失败时的修复

    linux开机一般是这个样子,首先开机执行POST加电自检,加电自检其实是调用主板COMS中的BIOS中的程序,来检测计算机主要硬件的可用性,如果加电自检成功,BIOS会根据设定的默认启动项取寻找MBR,比如你的第一启动项是U盘,第二启动项是关盘,他会依次在U盘、光盘、磁盘中寻找,找到MBR后会运行MBR中的前446个字节的小程序--bootloader,bootloader会找到被标识为活动分区的那个分区,并使用grub从该分区引导操作系统,如果能加载到,他会把加载内核(kenerl)并把内核读入内存并展开,并试图运行起来,运行起来以后内核开始初始化,此时内核获取系统的控制权。

    内核获取控制权后会加载额外的外围设备驱动,然后把各种外围的设备做一些初始化,内核把能够识别的硬件识别出来,比如磁盘,但是内核中能够加载的驱动程序是很有限。等磁盘系统加载完成后,系统运行第一个进程init,init是所有进程的父进程,当内核加载完成初始化并加载跟文件系统以后,init启动,init要完成整个系统的初始化,init靠/etc/inittad来实现初始化,所以说inittab这个文件非常重要,inittab丢失或损坏,系统将无法运行。init首先读取默认的运行级别,然后执行/etc/rc.d/rc.sysinit文件完成系统初始化,而/etc/rc.d/rc.sysinit这个脚本大致完成以下几项工作1:激活udev和selinux;2:根据/etc/sysctl.conf文件来设置内核参数;3:设置系统4:装载键盘映射;5:激活swap设备;6:设置主机名称,/etc/sysconfig/netmork;7:跟文件系统检测,完成后以读写方式重新挂载;8:激活Raid;和LVM设备启用磁盘配额;10:检查并挂载其他文件系统,根据/etc/fstab;11:清除启动过程中的临时文件。rc.sysinit执行完成后,inittab继续启动指定级别下的服务,定义ctrl+alt+del的组合功能,定义ups电源,打开6个虚拟终端,初始化GUI的环境等。
    grub是怎样引导系统的呢?现在讲以下grub的执行流程
    grub找到被标识为活动分区的那个分区,并在该分区中找到kernel,例如vmlinuz-2.6.18-164.el5然后已只读(ro)方式运行,并指定系统跟所在的位置,如root=/dev/vol0/root。使用initrd释放initrd-2.6.18-164.el5.img这样一个小linux系统用来加载内核中没有的但是系统启动所必须的驱动,如磁盘的驱动。然后启动系统。
    但是如果MBR丢失了怎么办呢?我们可以使用U盘来引导,将bootloadr写入U盘
    如果/boot/grub/grub.conf对视或损坏了怎么办?我们可以手动引导,如下:
    grub>find (hd0,0) 找第一块磁盘上的第一个分区中的,产看有没有内核等文件
    grub>root (hd0,0) 设定root为对应的那个设备,即第一块磁盘上的第一个分区
    grub>kernel /vmlinuz-2.6.18-164.e15 ro root=/dev/col0/root quiet
    grub>initrd /initrd-2.6.18-164.e15.img
    grub>boot   引导
    但是grub坏掉了怎么办?
    如果你的机器只有一块磁盘 借助额外工具如光盘、U盘、或者将硬盘摘先来放在其他主机上,使用其他宿主机编辑grub如下
grub>root (hd1,0)      设定要再哪块硬盘安装grub,我们现在认为在第2块盘上
grub>setup (hd1)       安装
grub>quit
但是此次安装安装的只是grub的第一段
我们也可以或者使用grub-install命令安装,但是使用grub-install命令时必须挂载磁盘分区,例如我们将第二块盘第一分区挂载在系统下的/mnt/boot
接下来我们使用
grub-install --root-driectory=/mnt/boot 回车即可
OK!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章