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作为程序之间的通信工具,类似消息队列,可以缓存信息。

     
  • 解决文件系统依赖:优先启动要用的文件系统,其余的文件系统都延迟启动加载。


     

 


 

最后修改于 2019-12-24 15:38:43
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇