CentOS启动流程
CentOS启动流程
Step 1: POST 加电自检
此过程的就是为了检测一下外界的硬件设备是否能够正常运行,如CPU,内存设备,硬盘等等这些硬件设备是否可以正常工作。 完成这一任务的是在主板上的BIOS程序
Step 2: Boot Sequence
主要实现的功能是选择要启动的硬件设备,选择了之后就可以读取这个设备上位于MBR里头的bootloader了。根据BIOS中对启动顺序的设定,BIOS自己会依次扫描各个引导设备,然后第一个被扫描到具有引导程序(bootloader)的设备就被作为要启动的引导设备。
Step3: Bootloader
MBR分为三个部分
MBR(Master Boot Record) MBR记录一般是在磁盘 0 磁道 1 扇区,共512个字节。前446个字节是BootLoder,后 4*16 的 64 个字节是存放分区信息的,最后 2 个字节是校验信息,一般是 55AA
MBR中的bootloader,bootloader提供一个菜单给用户,让用户去选择要启动的系统或不同的内核版本,然后把用户选择的内核版本加载至RAM中的特定空间,接着在RAM中解压、展开,而后把系统控制权移交给内核。
CentOS使用GRUB(grand uniform bootloader)引导, CentOS 7 使用 GRUB2,此前版本使用GRUB.
GRUB的作用是加载内核
配置文件在 /boot/grub2/grub.cfg
Menu-configuration setting is located at /etc/default/grub.
step 4: 加载内核
Linux会将内核解压缩到内存中,并利用内核的功能开始检查各个硬件设备,也就是说内核会自己再检测一次硬件,而不会使用BIOS检测到硬件信息,此时内核就开始接管BIOS后的工作。此过程包括
1. 探测可识别到的所有硬件设备
2. 加载硬件驱动程序(有可能会借助于ramdisk)
3. 以只读方式挂载根文件系统
4. 运行用户空间的第一个应用程序: /sbin/init
- Initially, the kernel is loaded in read-only mode. 初始状态内核以只读模式加载
- Kernel initializes the first process that is init(Till RHEL6)/Systemd( from RHEL 7).
- Kernel is compiled with different drivers but they are not able to load actual file system because some additional drivers are required for it. For this purpose, intird/ iniramfs is loaded in RAM, so that it can install other drivers which are required to load actual file system. 需要使用虚拟文件系统
- Initramfs/initrd gets decompressed and then it first loads temporary file system.
Linux内核文件在/boot目录中,并且以 vmlinuz-VERSION 命名,但是boot目录是挂载在根(/)目录下的而此时系统还没有启动,根目录是不存在的,也就是说没有办法直接将/boot目录的内核文件加载到内存中。怎么办?
此时就要借用虚拟文件系统(InitialRAM DISK)了,简写为ramdisk,此文件系统也同样存放在/boot目录中,它作用是启动正在的根目录。ramdisk在系统安装时会根据用户主机的硬件设备自动生成。ramdisk在不同系统的称呼不同,centos 5 中 /boot/initrd-VERSION-release.img,centos 6,7 中 /boot/initramfs-VERSION-release.img。
vmlinuz-3.10.0-957.el7.x86_64 为内核版本
initramfs-3.10.0-957.el7.x86_64.img 为虚拟文件系统
Once the real file system is mounted, then kernel runs the first process init( till RHEL 6) / Systemd from (RHEL 7).
Difference between Initramfs and initrd:
- Successor of initrd (initial ram disk) is Initramfs ( initital ram disk file system) . Feature made up from a cpio (copy input and output) archive of files that enables an initial root filesystem and init program to reside in kernel memory cache, rather than on a ramdisk, as with initrd filesystems.
- Initramfs is used by 2.6 kernels whereas initrd was used by older 2.4 (and earlier) kernels.
step 5 启动/sbin/init
init程序根据不同的CentOS版本类型不同
CentOS 5 及之前版本 : sys Vinit
配置文件:/etc/inittab
CentOS 6: Upstart
配置文件: /etc/inittab 为了兼容centos5, /etc/init/*.conf 多数在此
CentOS 7: Systemd
配置文件: /usr/lib/system/system, /etc/system/system
init程序会引导系统进入不同的 runlevel, 一共有7个level,0-6
- Runlevel 0 – shut down the system
- Runlevel 1 – single mode , root 用户,无需认证, 维护模式
- Runlevel 2 – multiuser mode without NFS
- Runlevel 3 – multiuser with text login screen
- Runlevel 4- customized runlevel (not in use)
- Runlevel 5 – runlevel 3 with graphical login
- Runlevel 6 – Reboots the system
一般运行在level3或者5
init的配置文件:/stc/inittab
根据不同的run level, 系统会执行如下目录中的程序.
- Run level 0 – /etc/rc.d/rc0.d/
- Run level 1 – /etc/rc.d/rc1.d/
- Run level 2 – /etc/rc.d/rc2.d/
- Run level 3 – /etc/rc.d/rc3.d/
- Run level 4 – /etc/rc.d/rc4.d/
- Run level 5 – /etc/rc.d/rc5.d/
- Run level 6 – /etc/rc.d/rc6.d/
但是在CentOS 7 init 和runlevels 分别被取代为 systemd 和targets respectively.
Systemd
- Same as init it is the first service started by the kernel, with process id 1.
- “ d” in system d stands for a daemon.
- Daemons are the programs that run in the background performing various tasks.
- Services usually refer to one or more daemons.
- Configuration file : /etc/systemd.