Quantcast
Viewing all articles
Browse latest Browse all 11063

CentOS 6启动过程总结与GRUB问题修复

一、CentOS 6 的启动流程

第一步:加电自检(POST)

主要检查硬件设备是否存在并能正常运行,如:CPU、内存、硬盘、风扇、输入输出设备等。自检功能主要是通过BIOS来实现的,BIOS程序是装载在一个硬件芯片CMOS上的,加电过程就是给CMOS通电,然后启动BIOS程序,BIOS程序会根据CMOS上面的一些配置信息区读取其他的硬件设备信息并检测其是否存在并能正常运行,之后进行硬件设备的初始化。

第二步:选择启动顺序,加载MBR

按照BIOS中设置的Boot Sequence查找Boot Loader程序所在的设备。Boot Loader是一个程序,它依赖于一个硬件之上,这个硬件就是硬盘,准确的说为第一个可以启动的硬盘的第一个扇区内,即MBR(Master Boot Record,主引导记录)。

Boot Loader的主要功能就是去识别、加载操作系统中的核心文件,并提交到内存中运行,进而来启动对应的操作系统。另一个主要功能是提供菜单信息(可以提供不同的启动项来加载不同的操作系统),并将启动管理功能转交给其他的加载程序。

第三步:加载系统内核(Kernel)文件,执行系统初始化信息

Boot Loader程序读取操作系统的内核文件后,会将其解压后装载到内存当中,然后接管BIOS的工作开始测试并加载各个设备(CPU、硬盘、网卡等)。

因为内核文件(Kernel)通常是存放在系统上的/boot目录中,并且是以vmlinuz开头的文件,此时内存程序还没有加载到硬盘,因此无法读取系统上的内核文件,而如果先去加载硬盘则必须有硬盘的驱动程序,因此这将会产生一个先后顺序的问题,为了解决这个问题,linux采用GRUB启动管理程序来识别硬盘信息,RTUB程序的执行过程需要三个阶段,具体的执行过程将在下面的第二章节介绍。

第四步:启动第一个执行程序/sbin/init

在内核、硬件及驱动信息加载完毕后,内核会呼叫用户控件的第一个执行程序/sbin/init,init程序主要功能是准备软件运行环境,包括系统的主机名称、网络配置、文件系统格式等其他服务的启动管理。而这些所有的操作都是通过init的配置文件来定义的。

在 CentOS 5 中 init 的配置文件为: /etc/inittab

在 CentOS 6 中 init 的配置文件为: /etc/inittab,/etc/init/*.conf

在init的配置文件中有个一非常重要的配置项目,那就是默认的系统启动级别。启动级别是为系统维护的目的而设定的,其实现方式是关闭或启动对应级别下的服务。以下为init的7个运行级别:

0 :halt,关机

1 :Single user,单用户模式,此级别允许以root用户身份登录,而无需认证,相当于windows的安全模式

2 :Multiuser,多用户模式,需要用户认证,会启动网络功能,但不会启动NFS

3 :Full multiuser,完全多用户模式,文本界面

4 :unused,预留级别,目前无特别的使用目的

5 :X11,正常级别,也是完全多用户模式,图形界面

6 :reboot,重启

通常使用较多的默认级别为 3 或 5 ,服务器上一般默认使用 3 级别,不同级别之间是可以进行切换的,切换方式为: init [0-6] ,可以使用 who -r 或 run_leave 命令 查看运行级别。
Image may be NSFW.
Clik here to view.
CentOS 6启动过程总结与GRUB问题修复

第五步:运行系统初始化脚本

根据 init 的配置文件,先获取默认的 runlevel,然后再执行 /etc/rc.d/rc.sysinit 脚本完成系统初始化。

系统初始化脚本所做的事情主要有:

1、设定主机名(读取/etc/sysconfig/network文件)

2、激活 SELinux 和 udev

3、打印文本欢迎信息

4、挂载所有定义在/etc/fstab文件中的文件系统

5、激活 swap 设备

6、检测跟文件系统,并实现以读写方式重新挂载

7、设置系统时钟

8、根据 /etc/sysctl.conf 文件设定内核参数的值

9、激活LVM和RAID设备

10、加载额外的设备驱动程序

11、清理操作

第六步:启动系统服务

按照默认级别的参数 N ,执行 /etc/rcN.d/ 目录下设定的关闭和启动相应的服务。

第七步:打印登录提示符

二、GRUB程序的三个阶段

stage1:运行Boot Loader主程序,这个程序必须要被安装在启动区(MBR)。因为MBR空间有限,因此在MBR当中仅安装Boot Loader的最小主程序,并没有安装Boot Loader的相关配置文件。

stage1_5:存放在MBR随后的扇区中,主要用于与stage2所在分区的文件系统进行交互。

stage2:通过Boot Loader加载所有配置文件及相关的环境参数信息,这些配置文件及相关的环境参数都存放于磁盘分区上的/boot目录下。

grup的配置文件路径为: /boot/grub/grub.conf ,内容如下:


Image may be NSFW.
Clik here to view.
CentOS 6启动过程总结与GRUB问题修复

default:设定默认启动的内核和操作系统,如果同时安装了多个操作系统或内核,0表示定义的第一个title系统,1表示定义的第二个title系统,依次类推;

timeout:设定系统启动时选择操作系统菜单的等待时间,单位是秒(s);

splashimage:设定系统启动时grub菜单的背景图片。图片格式为xpm,14bits颜色,大小为640*480,需要gzip压缩;

hiddenmenu:隐藏选择菜单,默认情况下是不显示菜单信息,如果想要显示菜单,将该配置注释即可;

title:定义一个操作系统或系统内核,且包括下面内容:

root:指明引导当前操作系统或内核文件所在的分区;

kernel:指定文件路径、根文件系统所在设备,以及传递给内核的参数。由于启动过程中需要挂载跟目录,因此需要指定根目录所在的分区。内核参数 rhgb表示色彩显示,quiet表示静默模式加载内核;

initrd:指定用于辅助内核完成系统启动的ramdisk文件路径;

三、关于GRUB的调试

1、破解root用户密码

第一步:系统启动时按任意键进入GRUB菜单,动作一定要快,默认是5s的倒计时


Image may be NSFW.
Clik here to view.
CentOS 6启动过程总结与GRUB问题修复

如上图所示,可以使用上下键选择要启动的操作系统(这里只用一个);

按 “ e ” 可以对选择的项进行编辑;

按“ a ”可以对选择的项进行内核参数修改;

按“ c ”可以进入命令行模式;

第二步:根据提示,选择相应的菜单,然后按“ a ”,在原有内核参数的最后加上“ 1 或 s 或 S 或 single ”的任意一个参数,表示进入单用户模式,然后按回车键启动系统


Image may be NSFW.
Clik here to view.
CentOS 6启动过程总结与GRUB问题修复

第三步:以单用户模式进入系统后,使用passwd命令修改root用户密码,修改完之后重启系统即可使用新的root用户密码登录系统。

2、为GRUB菜单设置保护密码

默认情况下进入GRUB菜单后不需要任何密码就可以进行编辑,相对来说是比较危险的,因此可以修改 grub.conf 配置文件为GRUB菜单设置密码保护,在 grub.conf 文件中的 title 字段上面新增一行 pwssword PASSWD ,password支持命令口令和加密口令,具体设置如下图所示:


Image may be NSFW.
Clik here to view.
CentOS 6启动过程总结与GRUB问题修复

md5加密口令的生成命令为: grub-md5-crypt


Image may be NSFW.
Clik here to view.
CentOS 6启动过程总结与GRUB问题修复

在 grub.conf 文件中新增 password 后,再次进入GRUB菜单时如果想要编辑则必须按“ p ”键,然后通过密码验证后才能编辑,如下图所示:


Image may be NSFW.
Clik here to view.
CentOS 6启动过程总结与GRUB问题修复

同理,在 grub.conf 配置文件中的 title 内添加 password ,可以保护内核,即进入系统时需要输入密码验证后才能启动。

3、取消图形界面的启动,使用文本界面启动

系统默认的启动方式是图形界面启动,因此看不到系统的启动过程,可以通过修改 grub.conf 配置文件设置成文本界面启动,生产环境下也建议使用文本界面启动,因为这种启动方式可以看到整个过程,如果哪个服务在启动过程中出错可以及时发现。修改方法是把kernel参数中的 rhgb 和 quiet 删除。


Image may be NSFW.
Clik here to view.
CentOS 6启动过程总结与GRUB问题修复

4、如果/boot下的文件损坏或丢失的恢复方法

第一步:使用安装光盘进入救援模式,进入时需要根据提示手动选择语言、键盘等


Image may be NSFW.
Clik here to view.
CentOS 6启动过程总结与GRUB问题修复

加载救援模式的过程中会提示硬盘上的系统已经被找到并挂载到 /mnt/sysimage 下,因此进入救援模式后可以使用 chroot /mnt/sysimage 命令切换到硬盘上操作系统的根目录下,因为救援模式下提供的命令比较有限,好多命令都不支持。


Image may be NSFW.
Clik here to view.
CentOS 6启动过程总结与GRUB问题修复

如果进入到救援模式后,没有发现硬盘上的根文件系统,则需要使用相关命令查找并分析根文件系统所在硬盘分区位置,如果硬盘使用的是普通分区,则可以通过 blkid 命令和 fdisk -l 命令分析出根文件系统的分区位置,而如果硬盘使用的是LVM分区,则可以使用 lvscan 命令查看分区,并且需要使用 vgchange -ay 命令激活VG卷组。

分析出根文件系统所在分区后挂载根文件系统,然后检查并修改fstab文件,如果该文件丢失,则手动创建一份,按照相应格式在其中添加挂载根文件系统的条目,然后重启系统,直到能够自动检测出硬盘上的系统并挂载到/mnt/sysimage下为止。

第二步:进入到硬盘的根文件系统后,使用 mount 命令挂载光盘,比如将光盘挂载到/mnt/cdrom上:


Image may be NSFW.
Clik here to view.
CentOS 6启动过程总结与GRUB问题修复

第三步:使用rpm命令安装 kernel 包,安装时会提示kernel已安装,需要使用 force 或 replacepkgs 选项强制安装。安装完之后会在/boot目录下自动生成initramfs文件和vmlinuz文件


Image may be NSFW.
Clik here to view.
CentOS 6启动过程总结与GRUB问题修复

vmlinuz-2.6.32-642.el6.x86_64 和 initramfs-2.6.32-642.el6.x86_64.img 是系统启动时必要的两个文件,缺一不可。

vmlinuz-2.6.32-642.el6.x86_64:内核文件,如果只是该文件丢失,可以从光盘或者相同版本的操作系统上拷贝。

initramfs-2.6.32-642.el6.x86_64.img:虚拟文件系统,通过Boot Loader程序能够将其加载到内存中,然后这个文件会被解压缩并且在内存中模拟一个跟文件系统,这个跟文件系统能够提供一个可以运行的程序,通过该程序可以加载在启动过程中所需要的核心模块(RAID、LVM、SCSI等文件系统与磁盘的驱动程序),加载完成之后,会协助内核重新呼叫 /sbin/init 来执行后续的正常启动。如果只是该文件丢失,可以使用 mkinitrd /boot/initramfs-`uname -r`.img `uname -r` 重新生成 。


Image may be NSFW.
Clik here to view.
CentOS 6启动过程总结与GRUB问题修复


Viewing all articles
Browse latest Browse all 11063

Trending Articles