RHCSA&RHCE(RHCE7)学习知识点--CentOS7启动过程

 

系统启动总结成以下的过程:

  1. 加载 BIOS 的硬件信息与进行自我测试,并依据配置取得第一个可启动的设备;
  2. 读取并运行第一个启动设备内 MBR的boot Loader(亦即是 grub2, lilo等程序);
  3. 依据 boot loader的配置加载Kernel,Kernel会开始检测硬件与加载驱动程序;
  4. 在硬件驱动成功后,Kernel 会主动调用systemd程序,并以default.target流程启动;
    1. systemd执行sysinit.target 初始化系统及 basic.target准备运行环境;
    2. systemd启动multi-user.target下的服务;
    3. systemd执行multi-user.target下的 /etc/rc.d/rc.local脚本;
    4. systemd执行multi-user.target 下的 getty.target 及登陆服务;
    5. systemd执行graphical 需要的服务

BIOS, 启动自我测试与 MBR/GPT

通过BIOS程序加载 CMOS 的信息,并且通过 CMOS 内的配置值取得主机的各项硬件配置,启动自我测试 (Power-on Self Test, POST) ,然后开始运行硬件检测的初始化

BIOS会指定启动的设备,通过硬件的INT 13中断功能读取在启动设备的第一个扇区(sector)内的MBR(Master Boot Record, 主要启动记录区)中的boot loader

Boot Loader 的功能

认识操作系统的文件格式并据以加载核心到主内存中去运行

每种操作系统都有自己的boot loader

加载核心检测硬件与initramfs的功能

将核心解压缩到内存当中,并且利用核心的功能,开始测试与驱动各个周边设备

# ls --format=single-column -F /boot

config-3.10.0-229.el7.x86_64                <==此版本核心被编译时选择的功能与模块配置文件

grub/                                       <==旧版grub1,不需要理会

grub2/                                      <==就是启动加载器grub2 相关资料目录

initramfs-0-rescue-309eb890d3d95ec7a.img    <==下面几个就是虚拟文件系统文件,这一个是用来救援的!

initramfs-3.10.0-229.el7.x86_64.img         <==正常开机会用到的虚拟文件系统

initramfs-3.10.0-229.el7.x86_64kdump.img    <==核心出问题时会用到的虚拟文件系统

System.map-3.10.0-229.el7.x86_64            <==核心功能放置到内存地址对应表

vmlinuz-0-rescue-309eb890d09543d95ec7a*     <==救援用的核心文件

vmlinuz-3.10.0-229.el7.x86_64*              <==就是核心文件啦!最重要者!

 

虚拟文件系统 (Initial RAM Disk或Initial RAM Filesystem)的文件名为/boot/initrd或/boot/initramfs

通过boot loader来加载到内存中模拟成一个根目录,提供一个可运行的程序,通过该程序来加载启动过程中所最需要的核心模块USB, RAID, LVM, SCSI 等文件系统与磁盘接口的驱动程序,帮助核心重新调用systemd来开始后续的正常启动流程。

第一个程序 systemd 及使用 default.target 进入启动

systemd的PID号码是1

systemd的功能就是准备软件运行的环境,包括系统的主机名称、网络配置、语言环境、文件系统格式及其他服务的启动等。

systemd不再使用system V的runlevel

所有的动作都会通过 systemd的/etc/system/system/default.target来完成

default.target的主要项目有:

multi-user.target 以及 graphical.target这两个。还有rescue.target,emergency.target,shutdown.target等等,以及initrd.target。

 

SystemV

systemd

init 0

systemctl poweroff

init 1

systemctl rescue

init [234]

systemctl isolate multi-user.target

init 5

systemctl isolate graphical.target

init 6

systemctl reboot

 

systemd 的处理过程

systemctl list-dependencies graphical.target所输出的依赖性服务, CentOS 7.x 的 systemd 启动过程:

  1. local-fs.target + swap.target:这两个target主要在挂载本机 /etc/fstab 里面所定义的文件系统与相关的内存交换空间。
  2. sysinit.target:这个target 主要在检测硬件,加载所需要的核心模块等动作。
  3. basic.target:加载主要的周边硬件驱动程序与防火墙相关任务
  4. multi-user.target下的其它一般系统或网络服务的加载
  5. 图形界面相关服务如 gdm.service 等其他服务的加载

systemd 执行sysinit.target 初始化系统、basic.target 准备系统

sysinit.target的阶段主要启动的服务:

  • 特殊文件系统设备的挂载:包括dev-hugepages.mount,dev-mqueue.mount等挂载服务,主要在挂载跟大容量内存分页使用与信息队列的功能。挂载成功后,会在/dev下面建立/dev/hugepages/,/dev/mqueue等目录;
  • 特殊文件系统的启用:包括磁盘陈列、网络磁盘(iscsi)、LVM文件系统、文件系统多路径服务(multipath)等等。
  • 启动过程的信息传送与动画执行:使用plymouthd服务搭配plymouth命令来传送动画与信息
  • 日志管理服务的使用:就是systemd-journald这个服务的启用
  • 加载额外的核心模块:通过/etc/modules-load.d/*.conf文件的配置,让核心额外加载管理员所需要的核心模块
  • 加载额外的核心参数配置:包括/etc/sysctl.conf以及/etc/sysctl.d/*.conf内的配置
  • 启动系统的随机数生成器:随机数生成器可以帮助系统进行一些密码加密的功能
  • 配置终端机(console)字符
  • 启动动态设备管理:就是udevd这个家伙,用在动态对应实际设备存取与设备文件名的一个服务。

basic.target的阶段主要启动的服务:

  • 加载alsa音效驱动程序:这个alsa是个音效相关的驱动程序,会让你的系统有音效产生;
  • 加载firewalld防火墙:CentOS 7.x以后使用firewalld取代iptables的防火墙配置,虽然最终都是使用iptables的架构,不过在配置上差很多;
  • 加载CPU的微指令功能;
  • 启动与配置SELinux 的安全上下文:如果由disable的状态改成enable的状态,或者是管理员配置强制重新配置一次SELinux的安全上下文,也在这个阶段处理;
  • 将目前的启动过程所产生的启动信息写入到/var/log/dmesg文件中;
  • 由/etc/sysconfig/modules/*.modules及/etc/rc.modules加载管理员指定的模块;
  • 加载systemd支持的timer功能;

systemd 启动multi-user.target 下的服务

/etc/systemd/system/multi-user.target.wants/里面默认要被启动的服务

服务的启动脚本配置都是放在下面的目录:

  • /usr/lib/systemd/system (系統默认的服务启动的脚本配置 )
  • /etc/systemd/system (管理员自己开发与配置的脚本配置)

使用systemctl enable/disable一个服务时,是到/etc/system/system/multi-user.target.wants/这个目录下建立和删除链接

# systemctl disable vsftpd.service

rm '/etc/systemd/system/multi-user.target.wants/vsftpd.service'

 

# systemctl enable vsftpd.service

ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service'

兼容 system V 的 rc-local.service:

会判断/etc/rc.d/rc.local是否具有可执行的权限来判断要不要启动这个服务

# ll /etc/rc.d/rc.local

-rw-r--r--. 1 root root 473 Mar  6 13:48 /etc/rc.d/rc.local

# systemctl status rc-local.service

rc-local.service - /etc/rc.d/rc.local Compatibility

   Loaded: loaded (/usr/lib/systemd/system/rc-local.service; static)

   Active: inactive (dead)

# systemctl list-dependencies multi-user.target | grep rc-local

# 明明就有这个服务,但是 rc.local 不具有可执行 (x) 的权限,因此这个服务不会被执行

# chmod a+x /etc/rc.d/rc.local; ll /etc/rc.d/rc.local

-rwxr-xr-x. 1 root root 473 Mar  6 13:48 /etc/rc.d/rc.local

# systemctl daemon-reload

# systemctl list-dependencies multi-user.target | grep rc-local

├─rc-local.service   # 这个服务确实被记录到启动的环境下!

提供 tty 界面与登陆的服务

getty.target的操作界面项目,包括systemd-logind.service,system-user-sessions.service等服务。

systemd 启动graphical.target下的服务

如果你的default.target 是 multi-user.target 的话,那么这个步骤就不会运行。反之,如果是graphical.target 的话,那么systemd就会开始加载用户管理服务与图形界面管理(windows display manager,DM)等

# systemctl list-dependencies graphical.target

graphical.target

├─accounts-daemon.service

├─gdm.service

├─network.service

├─rtkit-daemon.service

├─systemd-update-utmp-runlevel.service

└─multi-user.target

  ├─abrt-ccpp.service

.....(下面省略).....

到此为止,systemd 就已经完整的处理完毕

使用『 systemctl isolate multi-user.target 』切换runlevel

 

启动过程会用到的主要配置文件

关于模块: /etc/modprobe.d/*.conf /etc/modules-load.d/*.conf

有两个地方可以处理模块加载的问题,包括:

  • /etc/modules-load.d/*.conf:单纯要核心加载模块的位置;
  • /etc/modprobe.d/*.conf:可以加上模块参数的位置

将这个模块写入到系统启动过程中

# vim /etc/modules-load.d/cftp.conf

nf_conntrack_ftp

模块外加参数的配置方式

# vim /etc/modprobe.d/cftp.conf

options nf_conntrack_ftp ports=555

 

/etc/sysconfig/*

  • authconfig:身份认证的机制,包括是否使用本机的 /etc/passwd, /etc/shadow 等,以及 /etc/shadow密码使用的加密算法,还有是否使用外部密码服务器提供的账号验证 (NIS, LDAP) 等。系统默认使用 SHA512 加密算法,并且不使用外部的身份验证机制;使用authconfig-tui修改
  • cpupower:启动 cpupower.service 服务时,会读取这个配置文件。主要是 Linux 核心如何操作 CPU 的原则。启动 cpupower.service 之后,系统会让CPU 以最大效能的方式来运行,否则默认就是用多少算多少的模式来处理的。
  • firewalld, iptables-config, ip6tables-config, ebtables-config:
    与防火墙服务的启动外带的参数有关。
  • network-scripts/:主要用在配置网卡。

 

参考文档:

《鸟哥的Linux私房菜基础篇第三版》

 

你可能感兴趣的:(RHCE)