Linux操作系统引导过程及服务控制

目录

一、引导过程总览

1.开机自检

2.MBR引导

3.GRUB菜单

4.加载Linux内核

5.init进程初始化

 二、Systemd服务控制

1.systemd服务控制的优势

2.systemd的核心与配置

3.service运行级别

4.设置service运行级别

 三、Systemctl 服务常用命令


一、引导过程总览

1.开机自检

        检测出第一个能够引导系统的设备,比如硬盘或光驱。

        服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit,中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。 

2.MBR引导

        运行放在MBR扇区里的启动GRUB引导程序

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

3.GRUB菜单

        GRUB引导程序通过读取GRUB配置文件 /boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置

        对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给 GRUB 以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载 Linux 内核文件,然后将系统控制权转交给内核。

需要注意的是,CentOS 7 采用的是 GRUB2 启动引导器。 

4.加载Linux内核

        把内核和镜像文件系统加载到内存中

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

5.init进程初始化

        加载硬件驱动程序,内核把init进程加载到内存中运行

        为了完成进一步的系统引导过程,Linux内核首先将系统中的“ /sbin/init ”程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户登录。

 

 二、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单元。

 各种类型的 unit

unit 配置文件存放位置

[root@localhost system]#ls /usr/lib/systemd/system
abrt-ccpp.service                        dev-hugepages.mount                    iscsiuio.socket                     plymouth-quit.service              selinux-policy-migrate-local-changes@.service  systemd-kexec.service
abrtd.service                            dev-mqueue.mount                       kdump.service                       plymouth-quit-wait.service         serial-getty@.service                          systemd-localed.service
abrt-oops.service                        dm-event.service                       kexec.target                        plymouth-read-write.service        shutdown.target                                systemd-logind.service
abrt-pstoreoops.service                  dm-event.socket                        kexec.target.wants                  plymouth-reboot.service            shutdown.target.wants                          systemd-machined.service
abrt-vmcore.service                      dmraid-activation.service              kmod-static-nodes.service           plymouth-start.service             sigpwr.target                                  systemd-machine-id-commit.service
abrt-xorg.service                        dnsmasq.service                        kpatch.service                      plymouth-switch-root.service       sleep.target                                   systemd-modules-load.service
accounts-daemon.service                  dracut-cmdline.service                 ksm.service                         polkit.service                     -.slice                                        systemd-nspawn@.service
alsa-restore.service                     dracut-initqueue.service               ksmtuned.service                    postfix.service                    slices.target                                  systemd-poweroff.service
alsa-state.service                       dracut-mount.service                   libstoragemgmt.service              poweroff.target                    smartcard.target                               systemd-quotacheck.service
anaconda-direct.service                  dracut-pre-mount.service               libvirtd.service                    poweroff.target.wants              smartd.service                                 systemd-random-se

 解读 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要运行命令或脚本的绝对路径

ExecStartPreExecStart前运行

ExecStartPostExecStart后运行

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

3.service运行级别

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

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

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

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

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

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

6 重启模式,默认运行级别不能设为6,否则不能正常启动;运行init6机器就会重启。

各个级别的作用
0(poweroff.target):关机
1(rescue.target):单用户模式
2、3、4(mulit-user.target):多用的文本界面
5(graphical.target):多用的图形界面
6(reboot.target):重启

4.设置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 服务常用命令

效果命令
启动服务systemctl start xxx.service
停止服务systemctl stop xxx.service
重启服务systemctl restart xxx.service
重载服务systemctl reload xxx.service
使某服务开机自启systemctl enable xxx.service
查看服务是否开机自启systemctl is-enable xxx.service
使某服务开机不自启systemctl disable xxx.service
检查服务状态(服务详细信息)systemctl status xxx.service
显示所有已启动的服务systemctl list-units --type=service
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值