本篇主要以Centos为例,讲述整个Linux系统启动过程,包括了grub引导,initramfs流程,/sbin/init执行rc.sysinit及rc的大体流程。
另外,本篇有一个实例来说明,将整个操作系统运行在内存的实例(系统默认是使用一块物理磁盘存储操作系统)。
1 概述
Linux系统从软件角度,启动大致过程如下:
1) 硬件及BIOS加载,通过启动项找到MBR,读取MBR中的boot loader,即我们常用的grub工具。
2) boot loader,通过(如grub.conf)指定的root设备,加载kernel(vmlinux)、initramfs,并运行initramfs中的init。
3) 切换到真正的root fs,执行/sbin/init,执行rc.sysinit。
4) 执行/etc/rc3.d下服务脚本。
关于rootfs是什么,参考文档[1]描述得比较易懂。
[1]: 什么是根文件系统(rootfs)http://www.crifan.com/what_is_root_filesystem/
2 grub
grub的启动参数,如title,timeout等,google一搜一大把,就不在此说明。
关于grub还有一个作用,就是启动内核时,向内核传递参数,如我们常见的root=…,就是向内核传递真正的root fs所在的设备,即root device。
其它可向内核传递的参数,具体在参考内核源码目录中有文档说明其作用:Documentation/kernel-parameters.txt(以内核src.rpm来说,安装源码包后,其内核源码在/root/rpmbuild/BUILD/kernel-2.6.32-71.el6/linux-2.6.32-71.el6.x86_64/)。
其作用相当于修改/proc/sys/kernel/下的对应参数值,以/proc/sys/kernel/panic为例。
[[email protected] ~]# cat /proc/sys/kernel/panic
0
[[email protected] ~]# vim /boot/grub/grub.conf
……
root (hd0,0)
kernel /boot/vmlinuz-2.6.32-71.el6.5.vsds.x86_64 ro root=UUID=212c95a4-56d0-44fc-93ce-73b5f3e8cf2a rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us panic=2
initrd /boot/initramfs-2.6.32-71.el6.5.vsds.x86_64.img
……
[[email protected] ~]#reboot
[[email protected] ~]# cat /proc/sys/kernel/panic
2
更多说明,参见资料[2]。
[2]: linux 内核可接受的参数| 通过grub给内核传递参数
下节将跟小伙伴们来说说initramfs那些事,和本人通过简单修改initramfs将系统从运行在磁盘,修改为运行到ramdisk中。