我们在使用linux操作系统的时候,我们只要按下开机键之后,剩下的就是等待,然后输入用户名和密码就可以使用 Linux系统了,然而在从按下开机键到输入用户名和密码之前。操作系统都做了什么?下面就来讲述一下centos在启动的时候都做了哪些动作
以cnetos6为例。详解centos启动流程
POST --> Boot Sequence(BIOS) --> BootLoader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot -->/sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定运行级别 -->系统初始化脚本 --> 关闭或启动对应级别下的服务 --> 启动终端
一、POST开机自检
实现POST的代码是在主板上ROM芯片上,在开机的时候,POST会对硬件设备进行检查。完成后会寻找具有与引导记录的设备,并由引导设备来完成系统的顺利启动。
二、MBR引导
MBR(MasterBoot Record) MBR记录一般是在磁盘 0 磁道 1 扇区,共512个字节。前446个字节是BootLoder,后 4*16 的 64 个字节是存放分区信息的,最后 2 个字节是校验信息,一般是 55AA。
三、GRUB(GRand UnifiedBootloader)、加载内核
就是MBR中的前446个字节,是Bootloader的一种,它的作用是选择要启动的内核,系统将linux下/boot/grub/grub.conf的配置文件读入到内存中,根据配置文件中的信息找到内核文就按和伪根文件,并将伪根文件加载到内存中,模拟出一个根系统,在进行加载内核。
四、启动init程序
Init程序是centos第一进程。其他进程都是由此进程fork出来的,也就是说,init进程是其他进程的“祖先”。
在init启动启动之后做的事情
1、读取/etc/inittab文件来读取默认级别
2、执行初始化脚本/etc/rc.d/rc.sysinit来初始化脚本
脚本的作用如下:
设置主机名
设置欢迎信息
**udev和selinux
挂载/etc/fstab文件中定义的文件系统
检测根文件系统,并以读写方式重新挂载根文件系统
设置系统时钟
**swap设备
根据/etc/sysctl.conf文件设置内核参数
**lvm及software raid设备
加载额外设备的驱动程序
清理操作
3、执行/etc/rc.d/rcX.d脚本
根据读取的/etc/inittab文件中的登录模式,会运行相对应的脚本,假设是5模式,会读去/etc/rc.d/rc5.d下的所有脚本,来控制系统启动时启动或者关闭那些服务
这里的脚本大致分为两类,以S开头的和以K开头的脚本
S代表开机启动的,K代表开机时不启动
每个文件的命名格式,例如S06iptables S表示开机启动,06 表示启动次序 iptables表示启动的脚本名
这些脚本是否开机启动,可以由chkconfig命令来管理
chkconfig –addSRV-SCRIPT 可以将自己将自己写的一些脚本放/etc/rc.d/rc.init.d中,让此命令统一管理
chkconfig --del SRV-SCRIPT 将服务删除,意思就是服务不由chkconfig这种机制来管理
chkconfig SRV_SCRIPT {on|off} 设置服务开机是否自启动,默认管理的级别是2345.
--level 2345 等,指定默认级别,可以与其他选项一起使用
4、执行/etc/rc.d/rc.local脚本,此脚本是启动过程中最后启动的一个脚本。
最后会执行/bin/login登录用户。至此系统提东过程完成。
在对系统启动流程有了大致了解之后,为了更深入的理解,下面就做一些来加深理解
实验1 删除/boot/下initramfs-2.6.32-696.el6.x86_64.img文件
删除文件是用伪根系统,是用来挂载根来找内核文件来启动程序的,如果删除以后将导致系统无法启动,所以在系统重启会出现以下界面:
修复方法:
1.、进入救援模式
2、生成伪根系统
实验二、在LVM情况下,删除/etc/fstab文件和/boot下的文件
修复过程
1、进入救援模式
由于删除了/etc/fstab文件,在进入救援模式的时候将导致系统的根无法挂载到/mnt/sysp_w_picpaths上
3、**逻辑卷
4、重新挂载跟并编辑 /etc/fstab文件
5、重新进入救援模式,切根
6挂载光盘,重新安装kernel
7、安装grub
8、在/boot/grub下编辑grub.conf文件
未完待续~
转载于:https://blog.51cto.com/13136984/1968251