CentOS6启动流程
1.加载BIOS的硬件信息,获取第一个启动设备 2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息 3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备 4.核心执行init程序,并获取默认的运行信息 5.init程序执行/etc/rc.d/rc.sysinit文件 6.启动核心的外挂模块 7.init执行运行的各个批处理文件(scripts) 8.init执行/etc/rc.d/rc.local 9.等待用户登录
下面将详细介绍启动流程的过程
1、BIOS会进行开机加电自检,检查一些硬件的设备的完整性 2、在加电自检完成后,就会通过放在MBR中前446个字节的引导装载程序(grub)来加载内核,其中grub能够提供菜单,用户可以选择不同的启动选项,以及加载内核文件grub就放在/boot下,在grub目录下存在一个/boot/grub/grub.conf的grub的配置文件里面包含了kernel和虚拟文件系统(initramfs)的路径以及根目录的位置,稍后在做详细解释 3、当我们通过grub加载内核后,Linux会将内核解压缩到我们的内存中,此时内核会重新的检测硬件那么内核在什么地方呢?其实在我们之前的学习中讲过,启动程序放在/boot下,并且通常单独作为一个分区,内核就放在这里,并且取名为/boot/vmlinuz,
看一下/boot下的文件:
[root@Centos6 /boot]#ll -rw-r--r--. 1 root root 108164 Mar 22 03:34 config-2.6.32-696.el6.x86_64 drwxr-xr-x. 3 root root 4096 Jul 14 11:19 efi drwxr-xr-x. 2 root root 4096 Aug 31 10:48 grub -rw-------. 1 root root 26669528 Jul 14 11:25 initramfs-2.6.32-696.el6.x86_64.img 虚拟文件系统 drwx------. 2 root root 16384 Jul 14 10:33 lost+found -rw-r--r--. 1 root root 215634 Mar 22 03:35 symvers-2.6.32-696.el6.x86_64.gz -rw-r--r--. 1 root root 2622364 Mar 22 03:34 System.map-2.6.32-696.el6.x86_64 -rwxr-xr-x. 1 root root 4274992 Mar 22 03:34 vmlinuz-2.6.32-696.el6.x86_64 内核文件
我们可以看到vmlinuz就是内核文件了,非常重要。其中还有一个叫initramfs的文件,它是虚拟文件系统用来在提供一个可执行的程序,通过它来加载启动过程中所需要的内核模块其实就是驱动程序。
4、在内核加载完成后就到系统启动的第一个进程,centos6里面为init进程
下面来了解一下init进程的配置文件/etc/inittab,先来看看
[root@Centos6 /boot/grub]#cat /etc/inittab # inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) 直接关机 # 1 - Single user mode 单用户模式 # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) 多用户,但无NFS # 3 - Full multiuser mode 正常模式 # 4 - unused 预留级别 # 5 - X11 图形界面 # 6 - reboot (Do NOT set initdefault to this) 重启模式 # id:5:initdefault:
其中我们可以看到有0-6 共7个运行等级,我们可以看到本系统为id:5:initdefault:运行在5模式,其他的选项都已在特定的文件下直接定义 我们看一下
[root@Centos6 /boot/grub]#cat /etc/init/rc.conf # rc - System V runlevel compatibility # # This task runs the old sysv-rc runlevel scripts. It # is usually started by the telinit compatibility wrapper. # # Do not edit this file directly. If you want to change the behaviour, # please create a file rc.override and put your changes there. start on runlevel [0123456] stop on runlevel [!$RUNLEVEL] task export RUNLEVEL console output exec /etc/rc.d/rc $RUNLEVEL
不同的运行等级脚本存放路径为/etc/rc.d/rc#.d,稍后再做详解
5、在开启第一个进程后init开始处理系统的初始化脚本,/etc/rc.d/rc.sysinit这里包含了网络环境与主机类型、SELinux是否启动等等,一般不作更改,这里不做赘述。 6、启动核心的模块(驱动程序) 7、init执行运行的各个批处理文件(scripts),例如我们在/etc/inittab里面知道本系统启动过程中运行在5模式,那么init会找到运行等级为5的脚本在/etc/rc5.d
-
[x] 在脚本中包含了两类文件名分别是:以K 和S 开始的文件名,而已K或S开头的文件实际为系统的服务程序,排序在前越先执行。 当系统在运行脚本时会找到/etc/rc5.d/K的文件,并将其停止 当系统在运行脚本时会找到/etc/rc5.d/S的文件,并将其开启
我们来看一下/etc/rc5.d目录下的内容
[root@Centos6 /etc/rc.d/rc5.d]#ll total 0 省略部分显示 lrwxrwxrwx. 1 root root 14 Jul 14 11:17 K99rngd -> ../init.d/rngd lrwxrwxrwx. 1 root root 18 Jul 14 11:17 S13cpuspeed -> ../init.d/cpuspeed lrwxrwxrwx. 1 root root 20 Jul 14 11:08 S13irqbalance -> ../init.d/irqbalance lrwxrwxrwx. 1 root root 20 Jul 14 11:03 S99certmonger -> ../init.d/certmonger lrwxrwxrwx. 1 root root 11 Jul 14 10:52 S99local -> ../rc.local
8、用户自定义开机启动程序/etc/rc.d/rc.local 从上个步骤中,我们知道/etc/rc.d/rc.local 是最后被执行的,我们可以添加一些选项在其中,可以在系统启动的时候就可以启动,很是方便。
Bootloader : grub
bootloader 的两个阶段stage bootloader具有菜单功能、直接加载内核文件以及控制权移交的功能,系统必须要有loader才能够加 载操作系统内核,但是MBR是第一扇区的一个block 大小为446字节,不能够将loader全部放进去,所以Linux将其bootloader的程序代码执行与设置值分成两个阶段来执行:
stage1 :执行bootloader的主程序,目的最终加载stage2阶段
stage1.5 :最为中间媒介,传递作用,stage2太大需要stage1.5作为中间步骤
stage2 :bootloader的核心映像
9、接下来就是用户登录开启shell 接下来着重介绍一下/boot下的grub以及其配置文件grub.conf
/boot/grub下的列表文件
[root@Centos6 ~]#ll /boot/grub total 280 -rw-r--r--. 1 root root 63 Jul 14 11:27 device.map grub的设备对应文件 -rw-r--r--. 1 root root 13428 Jul 14 11:27 e2fs_stage1_5 ext2/ext3文件系统的文件 -rw-r--r--. 1 root root 12636 Jul 14 11:27 fat_stage1_5 FAT文件系统的定义文件 -rw-r--r--. 1 root root 11780 Jul 14 11:27 ffs_stage1_5 FFS文件系统文件 -rw-------. 1 root root 872 Aug 31 10:48 grub.conf grub在Red Hat中的配置文件 -rw-r--r--. 1 root root 11772 Jul 14 11:27 iso9660_stage1_5 光驱文件系统文件 -rw-r--r--. 1 root root 13284 Jul 14 11:27 jfs_stage1_5 ifs文件系统定义文件 lrwxrwxrwx. 1 root root 11 Jul 14 11:27 menu.lst -> ./grub.conf grub配置文件 -rw-r--r--. 1 root root 11972 Jul 14 11:27 minix_stage1_5 minix文件系统文件 -rw-r--r--. 1 root root 14428 Jul 14 11:27 reiserfs_stage1_5 reiserfs文件系统文件 -rw-r--r--. 1 root root 1341 Nov 15 2010 splash.xpm.gz 启动时在grub下面的后台图标 -rw-r--r--. 1 root root 512 Jul 14 11:27 stage1 1阶段说明文件 -rw-r--r--. 1 root root 126148 Jul 14 11:27 stage2 2阶段说明文件 -rw-r--r--. 1 root root 12040 Jul 14 11:27 ufs2_stage1_5 UFS文件系统文件 -rw-r--r--. 1 root root 11380 Jul 14 11:27 vstafs_stage1_5 vstafs文件系统文件 -rw-r--r--. 1 root root 13980 Jul 14 11:27 xfs_stage1_5 xfs文件系统文件
grub引导装载程序可以支持许多文件系统,来查看一下grub的配置文件
[root@Centos6 ~]#cat /boot/grub/grub.conf # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda2 # initrd /initrd-[generic-]version.img #boot=/dev/sda #default kernel list! default=0 #delay time and make the default kernel after timeout! timeout=5 #setting boot picture splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS 6 (2.6.32-696.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=ef20e35d-b3b0-4bb0-a7f0-b6da5f9478ea rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-696.el6.x86_64.img
介绍grub.conf文件中每个选项的作用
1、default=0
默认内核列表,与下面的title相关联,有几个title在启动的时候就会出现几个菜单可以选择
2、timeout=5
启动后进行读秒,在5秒内没有任何按键,则会启动默认的title选项,timeout=0表示不读秒直接进行启动,timeout=-1,表示直接进入菜单。
3、splashimage=(hd0,0)/grub/splash.xpm.gz
启动时grub后台的图片,可以自己定制,但文件后缀格式一定要与给定的相同
此外,(hd0,0)表示内核的位置,hd0表示第一块硬盘,0表示第一个分区,相当于/dev/sda1就是/boot所在的分区
4、hiddenmenu
隐藏菜单
5、title CentOS 6 (2.6.32-696.el6.x86_64)
菜单名称 root (hd0,0) 说明内核所在的那个分区 kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID<此处省略部分> rhgb quiet 指定内核,以及操作系统的根目录在什么地方,这里root=UUID也可直接写上/root所在的分区,例如;root=/dev/sda2,后面的参数是启动时候的一些选项,这里不做赘述。 initrd /initramfs-2.6.32-696.el6.x86_64.img 指定虚拟的文件系统
其中这几项一定要有,缺少的话会导致系统找不到文件不能正常启动。
本文只是根据实际情况进行了介绍,可能不全面,在此指出。
附上启动流程流程框图:
原创文章,作者:M25_ymd,如若转载,请注明出处:http://www.178linux.com/85786