1、UEFI或BIOS初始化,运行POST开机自检
2、选择启动设备,Boot Sequence
系统启动次序一般含有:光驱、U盘、硬盘A、硬盘B。按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备。
3、引导装载程序,加载/boot分区文件系统驱动
4、加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
5、加载initramfs驱动模块和内核vmlinuz
6、内核初始化,centos7使用systemd代替init
7、执行initrd.target所有单元,包括挂载/etc/fstab
8、从initramfs跟文件系统切换到磁盘根目录
9、systemd执行默认target配置,配置文件/etc/systemd/system/default.target
10、systemd执行sysinit.target初始化系统及basic.target准备操作系统
11、systemd启动multi-user.target下的本机与服务器服务
12、systemd执行multi-user.target下的/etc/rc.d/rc.local
13、systemd执行multi-user.target下的getty.target及登录服务
14、systemd执行graphical需要的服务
Systemd技术
- 新系统都会采用的技术(RedHat7,CentOS7,Ubuntu15等);
- 设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度;
- 和 Sysvinit 兼容,降低迁移成本;
- 最主要优点:并行启动
- Pid为1的进程
[root@centos7 ~]# ps -ef|head -2 UID PID PPID C STIME TTY TIME CMD root 1 0 0 11:13 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
初始化进程作为Linux系统的第一个进程,它需要完成Linux系统中相关的初始化工作,为用户提供合适的工作环境。RHEL/CentOS 7系统已经替换掉了熟悉的初始化进程服务System V init正式采用全新的systemd初始化进程服务。如果您之前学习的是RHEL/CentOS 6系统,可能会不习惯。systemd初始化进程服务采用了并发启动机制,开机速度得到了不小的提升。CentOS6系统, 管理员可以使用如下指令来管理服务器的启动与停止
//关机相关命令 shutdown -h now //立即关机,常用 init 0 //切换系统关机级别,容易理解 //重启相关命令 reboot //重启命令,常用 init 6 //切换系统重启级别,容易理解
CentOS7系统, 管理员可以使用systemctl命令来管理服务器启动与停止//关机相关命令 systemctl poweroff //立即关机,常用 //重启相关命令 systemctl reboot //重启命令,常用 Systemd目标名称
无论如何, RHEL/CentOS 7已经没有了"运行级别"这个概念,Linux系统在启动时要进行大量的初始化工作,比如挂载文件系统和交换分区、启动各类进程服务等,这些都可以看作是一个一个的单元Unit, systemd用目标target代替了System V init中运行级别的概念,这两者的区别如下所示
System V init运行级别
systemd目标名称
作用
0
runlevel0.target, poweroff.target
关机
1
runlevel1.target, rescue.target
单用户模式
2
runlevel2.target, multi-user.target
3
runlevel3.target, multi-user.target
多用户的文本界面
4
runlevel4.target, multi-user.target
5
runlevel5.target, graphical.target
多用户的图形界面
6
runlevel6.target, reboot.target
重启
emergency
emergency.target
救援(急救)模式
RHEL/CentOS6系统运行级别管理
//查看运行级别 [root@student ~]# runlevel N 3 //如果N是其他数字,代表上一次运行级别 //切换运行级别 [root@student ~]# init 3 //永久修改配置文件 [root@student ~]# /etc/inittab
RHEL/CentOS7系统目标管理
//查看系统默认启动运行级别 [root@student ~]# systemctl get-default //查看系统有哪些target [root@oldboy ~]# ls /lib/systemd/system/*.target /lib/systemd/system/basic.target /lib/systemd/system/poweroff.target …… //修改默认启动运行级别(永久生效) [root@student ~]# systemctl set-default TARGET.target # multi-user.target: analogous to runlevel 3 # graphical.target: analogous to runlevel 5
systemd服务管理
由于之前长期使用RHEL/CentOS 6系统, 已经习惯使用service chkconfig等命令来管理系统服务,但在RHEL/CentOS 7系统中是使用systemctl命令来管理服务的。如下是RHEL/CentOS 6系统中System V init命令与RHEL/CentOS 7系统中systemctl命令的对比,后续课程中会经常用到它们。
systemctl管理服务的启动、重启、停止、重载、查看状态等常用命令System V init(6系统)
systemctl命令(7系统)
作用
service NAME start
systemctl start NAME.service
启动服务
service NAME stop
systemctl stop NAME.service
停止服务
service NAME restart
systemctl restart NAME.service
重启服务
service NAME reload
systemctl reload NAME.service
重新加载配置(不终止服务)
service NAME status
systemctl status NAME.servre 查
看服务运行状态
systemctl is-active sshd.service
查看服务是否在运行中
systemctl mask NAME.servre
禁止服务运行
systemctl unmask NAME.servre
取消禁止服务运行
systemctl设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令System V init(6系统)
systemctl命令(7系统)
作用
chkconfig NAME on
systemctl enable NAME.service
开机自动启动
chkconfig NAME off
systemctl disable NAME.service
开机不自动启动
chkconfig –list
systemctl list-unit-files
查看各个级别下服务的启动与禁用
chkconfig –list NAME
systemctl is-enabled NAME.service
查看特定服务是否为开机自启动
chkconfig–add NAME
systemctl daemon-reload
创建新服务文件或者变更设置
systemctl服务状态说明
服务状态
状态说明
loaded
服务单元的配置文件已经被处理
active(running)
服务的一个或多个进程在运行中
active(exited)
一次性运行的服务成功被执行并退出(服务运行后完成任务,相关进程会自动退出)
active(waiting)
服务已经运行但在等待某个事件
inactive
服务没有在运行
enabled
服务设定为开机运行
disabled
服务设定为开机不运行
static
服务不能被设定开机启动,但可以由其他服务启动该服务
Sysvinit、Upstart、Systemd三种启动方式对比
Sysvinit:完全采用串行的方式按顺序启动任务;
Upstart:多任务串行启动系统;
Systemd:完全采用并行的方式,一起执行任务。
Systemd并发启动原理
- 解决 socket 依赖/端口依赖
- 采用了D-Bus作为程序之间的通信工具,类似消息队列,可以缓存信息。
- 解决文件系统依赖:优先启动要用的文件系统,其余的文件系统都延迟启动加载。

