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

发布于:2022-08-06 ⋅ 阅读:(397) ⋅ 点赞:(0)

一、引导过程总览

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 disable xxx.service
检查服务状态(服务详细信息) systemctl status xxx.service
显示所有已启动的服务 systemctl list-units --type=service

网站公告

今日签到

点亮在社区的每一天
去签到