Linux(CentOS)系统启动过程大致按照如下顺序:
POST –> BootSequence(BIOS) –>Bootloader(MBR) –>Kernel(ramdisk)–>rootfs(readonly)–>switchroot–>/sbin/init(设置默认运行级别–>运行系统初始化脚本,完成系统初始化–>关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务–>设置登陆终端[启动图形界面])
1)加电自检(POST),BIOS启动引导阶段;
在该过程中实现硬件的初始化以及查找启动介质;
从MBR中装载启动引导管理器(GRUB)并运行该启动引导管理;
MBR才512bytes,所以现在很多都用UEFI,GPT方式咯
2)GRUB(Grand Uniform Bootloader)启动引导阶段;
功能:提供一个菜单,允许用户要选择启动的不同系统或内核版本,把其内核加载到RAM中的特定空间,解压、展开,让后控制权移交给kernel
装载stage1
装载stage1.5
装载stage2(因为MBR很小,所以这里没有限制哦)
读取/boot/grub.conf文件并显示启动菜单;
装载所选的kernel和initrd文件到内存中
PS:LILO:支持柱面1024,现在基本都用在android手机,不用再PC机了
3)内核阶段:
探测可识别到所有硬件设备
加载各种硬件驱动程序;(有可能会借助于randisk加载驱动)
以只读方式挂载根文件系统
运行用户空间的第一个应用程序:/sbin/init
ps: ramdisk:Linux 内核特性之一:使用缓冲和缓存来加速对磁盘上的文件访问:
ramdisk –> ramfs
initramfs — dracut,mkinitrd (CenetOS6,7
4)init用户空间初始化阶段:
启动/sbin/init程序;
运行rc.sysinit脚本,设置系统环境,启动swap分区,检查和挂载文件系统;
读取/etc/inittab文件,运行在/et/rc.d/rc<#>.d中定义的不同运行级别的服务初始化脚本;
打开字符终端1-6号控制台/打开图形显示管理,设置登录
init程序:
CentOS 5 : /ect/inittab
CentOS 6 :Upstart
/etc/inittab:这个文件已废
/etc/init/*.conf,
CentOS 7 : systemd
配置文件:/usr/lib/systemd/system/, /etc/systemd/system/
http://1992tao.blog.51cto.com/11606804/1852322
原创文章,作者:不忘初衷,如若转载,请注明出处:http://www.178linux.com/67262