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。

image

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

  1. Runlevel 0 – shut down the system
  2. Runlevel 1 – single mode , root 用户,无需认证, 维护模式
  3. Runlevel 2 – multiuser mode without NFS
  4. Runlevel 3 – multiuser with text login screen
  5. Runlevel 4- customized runlevel (not in use)
  6. Runlevel 5 – runlevel 3 with graphical login
  7. 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.

posted on 2019-08-30 09:26  冬天晒太阳  阅读(210)  评论(0编辑  收藏  举报

导航