Linux操作系统引导过程及服务控制(我惊羡人间烟火花开满,偏偏走不到月圆)

一、引导过程总览

1.开机自检

检查硬件设备,检测出第一个能够引导系统的设备,比如硬盘或者光驱
服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。

2.MBR 引导

运行放在MBR扇区里的启动GRUB引导程序
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR 记录中的引导信息调用启动菜单(如 GRUB)。

3.启动 GRUB 菜单

GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置,并屏幕显示grub菜单。
对于Linux操作系统来说,GRUB(统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。
CentOS 7 采用的是 GRUB2 启动引导器。

4.加载Linux内核

把内核和镜像文件系统加载到内存中
Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。
CentOS 7系统中,默认的内核文件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。

5.init初始化

加载硬件驱动程序,内核把init进程加载到内存中运行
为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成整个系统的初始化,最后等待用户进行登录。
在这里插入图片描述

传统init对于进程的管理是串行执行 Shell 脚本启动服务,容易出现阻塞情况,导致效率低下,系统启动速度较慢
systemd能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度。

二、Systemd服务控制

1.systemd服务控制的优势
传统sysv init 依赖于串行执行 Shell 脚本启动服务,导致效率低下,系统启动速度较慢。systemd 能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度。

  • 系统引导时实现服务并行启动
  • 按需启动守护进程
  • 自动化的服务依赖关系管理
  • 同时采用socket式与D-Bus总线式激活服务
  • socket与服务程序分离
  • 向后兼容sysv init脚本使用systemctl 命令管理,systemctl命令固定不变,
  • 不可扩展,非由systemd启动的服务,
  • systemctl无法与之通信和控制
  • 系统状态快照
    2.systemd的核心与配置
    systemd 核心概念:unit
  • unit 表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听 socket、保存的系统快照以及其它与init相关的信息。
  • systemd单元文件最初默认存放在/usr/lib/systemd/system目录中,每当安装新的软件都会自动在这个目录中添加一个配置文件。
  • systemctl 命令用于管理各种类型的systemd单元。
    2.Sysremd单元类型
    在这里插入图片描述
    3.unit的存放位置
    在这里插入图片描述
    unit配置文件
    服务控制一般需要编写 service 配置文件(这里以 httpd.service 文件为例)
//定义与Unit类型无关的通用选项;用于提 供unit的描述信息、unit行为及依赖关系等
[Unit]
Description=The Apache HTTP Server                          
After=network.target remote-fs.target nss-lookup.target                            
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
 
//与特定类型相关的专用选项;此处为 Service类型
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true
 
//定义由“systemctl enable”以及“systemctl disable”命令在实现服务启用或禁用时用到的一些选项
[Install]
WantedBy=multi-user.target

Unit段的常用选项:
Description:描述信息
After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
Wants:依赖到的其它units,弱依赖
Conflicts:定义units间的冲突关系
Service段的常用选项:
Type:定义影响ExecStart及相关参数的功能的 unit进程启动类型
EnvironmentFile:环境配置文件
ExecStart:指明启动unit要运行命令或脚本的绝对路径
ExecStartPre: ExecStart前运行
ExecStartPost: ExecStart后运行
ExecStop:指明停止unit要运行的命令或脚本
Restart:当设定 restart = 1 时,则当次daemon服务意外终止后,会再次自动启动此服务
RestartSec: 设置在重启服务前暂停多长时间,默认值是100毫秒(100ms)。如果未指定时间单位,那么将视为以秒为单位。 例如设为“20”等价于设为“20s”。
PrivateTmp:设定为yes时会再生成/tmp/systemd-private-UUID-NAME.service-XX/tmp/目录
Install段的常用选项:
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启systemctl daemon-reload

三、service运行级别

0 系统停机模式——系统默认运行级别不能设置为0,否则不能正常启动,机器关的;

1 单用户模式——root权限,用于系统维护,禁止远程登录(只能通过实机进去),进入单用户模式的时候root不需要密码就可以登录,所以在此模式下可以修改root密码;

2 多用户模式——没有NFS和网络支持;

3 完整的多用户文本模式——有NFS和网络,登录后进入控制台命令行模式。

4 系统未使用——保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电池用尽时,可以切换到这个模式来做一些设置;

5 图形化模式,登录后进入图形GUI模式,X windows系;

6 重启模式,默认运行级别不能设为6,否则不能正常启动;运行init6机器就会重启。
在这里插入图片描述

四、设置service运行级别

[root@localhost system]# systemctl [选项] [运行级别unit.target]
 get-default        取得当前的target
set-default        设置指定的target为默认的运行级别
isolate               在不重启情况下切换到指定的运行级别 
[root@localhost system]# init [1-6]         重启切换到指定的运行级别 

//查看当前运行级别
[root@localhost ~]#systemctl get-default 
graphical.target
 
//切换运行级别为3 multi-user.target
[root@localhost ~]#systemctl isolate multi-user.target 
 
//设置默认运行级别为5 graphical.target
[root@localhost ~]#systemctl set-default multi-user.target

五、Systemctl 服务常用命令

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值