Linux第八章引导过程与服务控制视频

一.Linux操作系统的引导过程

系统引导是操作系统运行的开始,在用户能够正常登录到系统之前,Linux操作系统的引导过程将完成一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备。

一.引导过程总览

BIOS:基本输入输出系统  CMOS:金属半导体氧化物只读存储器

1.开机自检

       服务器开机之后,根据主板的BIOS设置,对cpu,内存,显卡,键盘等等(无涉及硬盘)设备进行初步的检测。检测成功后,根据预设的启动顺序(默认的启动顺序,第二个就是硬盘,要么手工设置的U盘启动。)系统的控制权从BIOS转移到硬盘(大多数时候转移给本机硬盘)。
       总结:检测出第一个能够引导系统的设备,比如硬盘或者光驱

2.MBR引导(主引导记录)

       MBR是硬盘的分区记录表,在这个表里记录硬盘的分区,以及系统启动盘的位置。系统的控制权到了硬盘,根据MBR记录表找系统启动盘,找到之后将系统的控制权传递给包含操作系统引导文件的分区,以及MBR记录中系统的启动菜单(grub)。
       总结:运行放在MBR扇区里的启动GRUB引导程序

(一个扇区0磁道0扇区,512字节)
1:bootloader:446字节(1-446)
2:DPT(硬盘分区表):64字节(447-510),每16个字节负责保存一个分区的信息
3.扇区的结束标识(55aa):2个字节(511-512)

3.GRUB菜单

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

4.加载Linux内核

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

5.init进程初始化(初始化进程)

        为了完成进一步的系统引导过程,Linux内核首先将系统中的"/sbin/init"程序加载到内存中运行(运行中的程序称为进程),init进程负责完成整个系统的初始化,最后等待用户进行登录。
        总结:加载硬件驱动程序,内核把init进程加载到内存中运行

总过程详述:
       加电后bios程序会自检硬件,硬件无故障后,会根据第一启动项去找内核,一般来说第一启动项是硬盘,找到硬盘后,会根据mbr 的指引找到完整的 grub 程序,再根据rub的配置文件找到内核文件的具体位置,然后将内核文件加载到内存中运行,内存加载好后会启动第一个程序。
init初始化进程是所有进程的副进程。

二.系统初始化进程及文件

相关命令:
start:开启
stop:停止
restart; 重启
enable:开机自启
disenable:开机不自启

1.init 进程

         Linux 操作系统中的进程使用数字进行标记,每个进程的身份标记号称为 PID 。在引导
Linux 操作系统的过程中, “/sbin/init” 是内核第一个加载的程序,因此 init 进程对应的 PID
总是为 1。
         init 进程运行以后将陆续执行系统中的其他程序,不断生成新的进程,这些进程称为 init
进程的子进程。反过来说, init 进程是这些进程的父进程。当然,这些子进程也可以进一步
生成各自的子进程,依次不断繁衍下去,最终构成一棵枝繁叶茂的进程树,共同为用户提供
服务。
          从以上描述可以看出, init 进程正是维持整个 Linux 操作系统运行的所有进程的 始祖
因此 init 进程是不允许被轻易终止的。需要切换不同的系统运行状态时,可以向 init 进程发
送正确的执行参数,由 init 自身来完成相关操作。
(串行启动)以文件的优先级一一启动

2.Systemd概述

(并行启动)多个文件一同启动

         Systemd Linux 操作系统的一种 init 软件, CentOS 7 系统中采用了全新的 Systemd
启动方式,取代了传统的 SysVinit Systemd 启动方式使系统初始化时诸多服务并行启动,
大大提高了开机效率。 CentOS 7 系统中 “/sbin/init” “/lib/systemd/systemd” 的链接文件。换
言之, CentOS 7 系统中运行的第一个 init 进程是 “/lib/systemd/systemd” systemd 守护进
程负责 Linux 的系统和服务, systemctl 用于控制 Systemd 管理的系统和服务状态。​​​​​​​
         Systemd 将其管理的资源组织成各种类型的单元( Unit ),表 8-1 中列出了 Systemd 使
用的各种单元类型。
Service
.service
描述一个系统服务
Socket
.socket
描述一个进程间通信的套接字
Device
.device
描述一个内核识别的设备文件
Mount
.mount
描述一个文件系统的挂载点
Automount
.automount
描述一个文件系统的自动挂载点
Swap
.swap
描述一个内存交换设备或交换文件
Path
.path
描述一个文件系统中文件或目录
Timer
.timer
描述一个定时器(用于实现类似 cron 的调度任务)
Snapshot
.snapshot
用于保存一个 systemd 的状态
Scope
.scope
使用 systemd 的总线接口以编程的方式创建外部进程
Slice
.slice
描述居于 Cgroup 的一组通过层次组织的管理系统进程
Target
target
描述一组 systemd 的单元
         Linux 系统服务是指运行在后台并提供特定功能的应用程序,如网站服务、 FTP 服务等。
Linux 通过将不同的系统服务进行搭配组合来协同满足不同的功能需求。不同的服务组合其
实现的功能也各不相同,就好比不同的药方能医治不同的病症一样。
         早期 Linux 操作系统中的 SysVinit 机制,默认包括七种不同的服务搭配方式,其中每一
种搭配方式称为运行级别,类似于 Windows 系统中的正常启动、安全模式、不带网络连接
的安全模式等。这些运行级别分别使用数字 0 1 6 来表示。为了向下兼容 SysVinit
系统, Systemd 使用了相应的 target (目标)模拟了 SysVinit 的运行级别,表 8-2 中列出了
运行级别所对应的 target ,并说明了各种 target 的含义及用途。

Systemd 的目标与 SysVinit 的运行级别(一种功能的体现)
多用户模式:可以允许多个用户登录系统
运行级别的切换命令格式:init + 运行级别号(0-6)

0
target
关机状态,使用该级别时将会关闭主机,halt(中断系统)
1
rescue.target
单用户模式,不需要密码验证即可登录系统,多用于系统维护,救援模式
2
multi-user.target
用户定义 / 域特定运行级别。默认等同于 3
3
multi-user.target
字符界面的完整多用户模式,大多数服务器主机运行在此级别
4
multi-user.target
用户定义 / 域特定运行级别。默认等同于 3
5
graphical.target
图形界面的多用户模式,提供了图形桌面操作环境
6
reboot.target
重新启动,使用该级别时将会重启主机

二.排除系统启动类障碍

       Linux 操作系统的启动过程涉及 MBR Main Boot Record ,主引导记录)、 GRUB 启动
菜单、系统初始化配置文件等各方面,其中任何一个环节出现故障都可能导致系统启动失常,
因此一定要注意做好相关文件的备份工作。本节介绍一些系统启动类故障修复的实例。

一.MBR扇区故障(模拟引导程序(分区表)损坏修复)

       MBR 位于物理硬盘的第一个扇区( 512 字节),该扇区又称为主引导扇区( MBR 扇区),
除了包含系统引导程序的部分数据外,还包含整个硬盘的分区表记录。当主引导扇区发生故
障时,将可能无法进入引导菜单,或者因无法找到正确的分区位置而无法加载系统,通过该
硬盘引导主机时很可能进入黑屏状态。
       下面将通过示例介绍对 MBR 扇区进行备份、模拟破坏、修复的过程。

1.备份MBR扇区数据

       由于 MBR 扇区中包含了整个硬盘的分区表记录,因此该扇区的备份文件必须存放到其
他的存储设备中,否则在恢复时将无法读取到备份文件。例如,执行以下操作可以将第
一块硬盘( sda )的 MBR 扇区备份到第二块硬盘的 sdb1 分区中(挂载到 /bak 目录)。
在虚拟机上加入一块20g以下(做实验用,)的磁盘。分区以及格式化。
挂载以及备份

2.模拟MBR扇区故障

        这里仍然使用 dd 命令,人为地将 MBR 扇区的记录覆盖,以便模拟出 MBR 扇区被破
坏的故障情况(切记要先做好备份,并且将备份文件存放到其他硬盘)。例如,执行以下操
作可以从设备文件 zero 中读取 512 字节的数据,并将其覆盖到第一块硬盘( sda ),从而破
MBR 扇区中的数据。
       完成上述操作后重启系统,将会出现 “Operating system not found” 的提示信息,表示无
法找到可用的操作系统,因此无法启动主机。

3.从备份文件中恢复MBR扇区数据

       由于 MBR 扇区被破坏以后,就无法再从该硬盘启动系统,所以需要使用其他硬盘中的
操作系统进行引导,或者直接使用 CentOS 系统的安装光盘进行引导。不管使用哪种方式,
目的都是相同的 —— 获得一个可以执行命令的 Shell 环境,以便从备份文件中恢复 MBR
区中的数据。
       以使用 CentOS 安装光盘引导为例,当出现安装向导界面时,选择 “Troubleshooting”
选项,如图 所示,进入修复故障页面。
     再选择 “Rescue a CentOS Linux system” 选项,如下图 所示,将以 救援模式 引导 Linux
操作系统。
        然后系统会自动查找硬盘中的 Linux 分区并尝试将其挂载到 /mnt/sysimage 目录(选择
“1” 确认并按 Enter 键继续)。接下来会出现 rescue 字符界面,如下图 所示。
       最后,按 Enter 键后将进入带 “sh-4.2#” 提示符的 Bash Shell 环境,如图所示。只要执行相应的命令挂载保存有备份文件的硬盘分区(sdb1),并将数据恢复到硬盘“/dev/sda”中即可,具体操作如下。需要注意的是,当前使用的系统环境是光盘中的 Linux 目录结构。
完成恢复操作以后,执行 “exit” 命令退出临时 Shell 环境,系统将会自动重启。

二.GRUB引导故障

       GRUB 是大多数 Linux 操作系统默认使用的引导程序,可以通过启动菜单的方式选择进
入不同的操作系统(如果有)。当配置文件 /boot/grub2/grub.cfg 丢失,或者关键配置出现错
误,或者 MBR 中的引导程序遭到破坏时, Linux 主机启动后可能只出现 “grub>” 的提示符,无
法完成进一步的系统启动过程,如下图 所示。
可通过模拟达成上图界面。
        若在该提示符后可以进行编辑,则通过输入对应的引导命令(可参考其他相同版本
CentOS /boot/grub2/grub.cfg 文件的引导语句),然后执行 “boot” 命令即可正常引导 Linux
操作系统,具体操作如下:
       之后的启动过程与正常启动 CentOS 系统的过程是一样的。登录进入操作系统以后,
需要找到配置文件 /boot/grub2/grub.cfg ,并修复其中的错误,或者直接重建该文件。具体内
容可以参考其他正常主机中的同名文件。
       在 CentOS 系统中,执行以下操作可以查看 GRUB 配置文件 grub.cfg 的默认内容。

      grub.cfg 文件中包含很多内容,如加载 grubenv 中变量、设置默认引导项等。 CentOS 7
默认有两个启动项: CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core) CentOS Linux
(0-rescue- b15df1eb8205483f9f70c79709810abc) 7 (Core) 。无论是哪个启动项,都需要设
置如下所示的几个主要配置项。
menuentry :指定在启动菜单中显示的操作系统名称。
set root :指定包含内核等引导文件的 /boot 分区所在的位置。
insmod :加载指定的模块到内核。
linux16 :指定内核文件所在的位置,内核加载时权限为只读 “ro” ,并通过 “root=”
定根分区的设备文件位置。
initrd16 :指定启动内核所使用的临时系统镜像文件所在的位置。
       由于在 “grub>” 环境中使用的命令较为复杂,且一般也难以记住相关的命令选项、内核
加载参数等,因此用户可以采用另一种修复办法,同样使用 CentOS 的安装光盘引导进入
急救模式(参考上一小节)。若分区表未被破坏,则急救模式将会找到硬盘中的 Linux 根分
区,并将其挂载到光盘目录结构中的 /mnt/sysimage/ 文件夹中。
       进入 “bash-4.2#” Shell 环境以后,重写(或通过之前备份的文件恢复) grub.cfg 配置
文件即可。重写完 grub.cfg 配置文件后,需要使用 grub2-mkconfig 工具更新 grub.cfg 配置
文件。
       在上例中,若未执行 “chroot /mnt/sysimage” 命令,则重新建立的 grub.cfg 配置文件应
该位于 /mnt/sysimage/boot/grub2/grub.cfg
       如果是 MBR 扇区中的引导程序出现损坏,则在重建 grub.cfg 配置文件后仍然可能无法
成功启动系统,这时可以通过 CentOS 救援模式的 Shell 环境重新安装 grub 引导程序。切
换到待修复的 Linux 操作系统根环境,执行 “grub2-install /dev/sda” 命令可以重新将 grub 引导
程序安装到第一块硬盘( sda )的 MRB 扇区,具体操作如下:
       上述方法同样适用于在 Linux 主机中重装 Windows 操作系统(不覆盖 Linux 操作系统)
后导致 Linux 操作系统无法启动的情况。因为对于使用双操作系统的主机,后安装的
Windows 操作系统将使用自己的引导数据覆盖 MBR 扇区中的记录,导致开机后不再出现
GRUB 菜单从而无法进入 Linux 操作系统。如果后安装 Linux 操作系统, GRUB 程序将自
动识别硬盘中的 Windows 操作系统并将其加载到 GRUB 菜单配置中。
        注意:执行 “dd if=/dev/zero of=/dev/sda bs=446 count=1” 命令可以模拟出对 MBR 扇区
GRUB 引导程序的破坏(注意先做好备份),但并不会破坏分区表(实际上分区表保存在
MBR 扇区中的第 447 510 字节中, MBR 总共 512 字节,前 446 字节是主引导记录,从第
447 字节开始后的 64 字节,每 16 字节为一组,是硬盘分区表)

三.遗忘root用户的密码

       当忘记 root 用户的密码时,将无法登录 Linux 操作系统执行管理、维护等任务,而只
能通过其他用户(普通用户)登录使用一些受限制的功能。当然,如果操作系统中还有其他
具有 root 权限的用户( uid 0 ),或者拥有修改 root 账号密码权限的用户,也可以使用这
些用户登录操作系统,然后重新设置 root 用户的密码。
       然而,大多数时候 Linux 主机中具有 root 权限的用户只有一个,因此需要通过其他途
径来重设 root 账号的密码。最简便的途径是使用 CentOS 的安装光盘进入急救模式。
       若使用 CentOS 的安装光盘进入急救模式的 Shell 环境,则只需切换到待修复 Linux
作系统的根目录环境,直接执行 “passwd root” 命令重设 root 用户的密码即可;或者修改
/etc/shadow 文件,将 root 用户的密码字段清空,重启后以空密码可登录系统。以下操作即
为进入急救模式重设 root 用户密码。

三.服务控制及优化启动过程

       在 Linux 操作系统完成引导以后,如何控制系统服务的运行状态?如何在不同的运行级
别之间进行切换?如何优化启动过程,减少系统占用的资源?本节将进一步来解决这些问题。

1.系统服务控制

        在 CentOS 系统中,各种系统服务的控制脚本默认放在 /usr/lib/systemd 目录下。通过
systemctl 命令工具可以实现对指定系统服务的控制,语法格式如下:
对于大多数系统服务来说,常见的几种控制类型如下所述。
start (启动):运行指定的系统服务程序,实现服务功能。
stop (停止):终止指定的系统服务程序,关闭相应的功能。
restart (重启):先退出,再重新运行指定的系统服务程序。
reload (重载):不退出服务程序,只是刷新配置。在某些服务中与 restart 的操作
相同。
status (查看状态):查看指定的系统服务的运行状态及相关信息。
       例如,执行如下的 “systemctl start postfix.service” 操作可以启动尚未运行的 postfix
务。
       若要查看指定 postfix 服务的运行状态,只需将上述命令中的 “start” 改为 “status” 即可。
若要停止 postfix 服务,只需将 “start” 改为 “stop” 即可,具体命令如下:
       控制类型 “restart” 用在需要释放旧的资源全部从头开始的情况,它会先关闭相应的服务
程序,然后重新运行。例如,当在网卡的配置文件中设置了新的 IP 地址以后,为了激活新
IP 地址,可以重新启动名称为 network 的系统服务,命令如下:
        对于在实际生产环境中运行的服务器,不要轻易执行 stop restart 操作,以免造成客
户端访问中断,带来不必要的损失。若只是要为系统服务启用新的配置,可以采用相对温和
一些的 “reload” 参数重新加载配置,而不是生硬地执行 “restart” 。例如,对正在为用户提供
Web 访问的 httpd 服务,当需要应用新的配置时,建议执行 “systemctl reload httpd.service”
命令来重新载入配置,而不是执行 “systemctl restart httpd.service”

二.切换运行级别
 

      在前面的章节讲解 Systemd 相关知识的时候,已经介绍过 target 的含义及类型。不同
target 代表系统不同的运行状态,所启用的服务或程序也不一样。例如,对于互联网中
的网站、电子邮件等服务器来说,只需要运行在文本模式就可以了,无须启用图形桌面程序。
下面介绍如何查看及切换 target

1.查看系统的target

     
       明确当前系统所在的 target 将有助于管理员排除一些应用故障。若未能确知当前所处
的目标,可以直接执行 “runlevel” 命令进行查询,显示结果中的两个字符分别表示切换前的
目标、当前的目标。若之前尚未切换过运行级别,则第 1 列将显示 “N” ,命令如下:
       若用户想查看系统启动时默认运行的 target ,可以执行 “systemctl get-default” 命令以显
示系统默认的 target ,命令如下:

2.切换系统的target

       当用户需要将系统转换为其他的 target 时,可以通过传统的 init 程序进行,只要使用与
运行级别相对应的数字( 0 6 )作为命令参数即可,或者使用 systemctl 命令进行目标切换。
例如,为了节省系统资源,将系统运行的 target 由图形模式( 5 )切换为字符模式( 3 ),可
以执行 “init 3” “systemctl isolate multi-user.target” 命令,命令如下:
或者
       将系统切换到字符模式以后,图形桌面环境不再可用。这时按 Alt F7 组合键也无法恢
复图形桌面环境。需要再次使用图形桌面时,可以执行 “init 5” 或者 “systemctl isolate
graphical.target” 命令切换回去。
       通过切换 target 的操作,还可以实现两个特殊的功能,那就是关机和重启。运行级别 0
6 分别对应关机、重启这两个特殊模式,因此只要执行 “init 0” “init 6” 命令就可以实现相应
的关机、重启操作了,命令如下:
       而运行级别 0 6 又分别对应着 systemd “poweroff.target” “reboot.target” 目标,因
此执行 “systemctl poweroff” “systemctl reboot” 命令也可以实现相应的关机、重启操作,命
令如下:
       上述内容中的运行级别切换均为临时切换,若要永久切换运行级别,可通过 ln (链接)
命令指定当前系统的默认运行级别。例如,执行如下命令可将当前系统的开机默认运行级别
graphical.target 更改为 multi-user.target 。其中, -s 选项表示创建软链接; -f 表示强行删
除任何已存在的目标文件。

3.优化启动过程

       Linux 操作系统中包含了大量的服务程序,这些服务程序在切换运行级别时根据预设的
状态进行启动或终止。其中有不少系统服务可能并不是用户需要的,但是默认也运行了。
       那么,在 Linux 操作系统中默认包括哪些系统服务?各自的作用是什么?如何控制开机
后自动运行的系统服务,以减少资源占用、提高系统运行效率呢?下面就这些问题分别进行
讲解。
(1)常见的系统服务
       在 CentOS 系统中,默认安装的系统服务多达 100 余种,这些系统服务为用户提供了
丰富的应用服务。只有了解各个系统服务的用途,才能有选择地进行优化操作,实现按需启
Linux 服务。
       表中 列出了 CentOS 中常见的一些系统服务,包括服务的作用、建议启动的状态,
以供优化系统服务时参考。
服务名称              用途简介                                                                                              备注
必须强调的是,这些服务到底是选择开启还是关闭,应根据主机的实际功能需求来定,
不要生搬硬套。例如,如果当前的 Linux 主机用来向局域网提供文件共享服务,那么 smb
服务应开启,而不能关闭。
(2)优化开机自动加载的服务
       Linux 操作系统在每次开机后会进入默认的 systemd 运行目标(如字符模式或图形模式),
并运行该目标中默认设为启动的各种系统服务。若要禁止某些系统服务自动运行,可以使用
ntsysv 或者 systemctl 工具进行优化。
     ( 1 )使用 ntsysv 工具
        ntsysv 工具可以在字符模式中运行,为用户提供一个仿图形的交互式操作界面,专门用于
集中配置各种系统服务的启动状态。当需要同时设置多个服务的启动状态时,使用 ntsysv 工具
会非常方便。
        单独执行 “ntsysv” 命令时仅用于管理当前运行目标中的服务;通过 “--level” 选项可以对指
定运行目标(级别)中的服务进行管理。例如,执行 “ntsysv --level 35” 命令可以打开 ntsysv
管理程序,如图 所示,同时对运行目标 3 5 中的各种系统服务的默认启动状态进行调整。
       操作时按 方向键来选择不同的系统服务,按 Space (空格)键设置服务的默认启
动状态( “[*]” 表示启动, “[ ]” 表示关闭)。如果要查看所选定服务的说明信息,按 F1 键可以
获取帮助。
2 )使用 systemctl 工具
       systemctl 工具与 ntsysv 的功能类似,但是 systemctl 不提供交互式的操作界面,它用
于查询或设置系统服务的默认启动状态。当需要设置某一个服务在当前运行目标中的默认启
动状态时,使用 systemctl 工具会更有效率。使用 systemctl 工具控制服务开机启停的命令
格式如下:
常用的选项有三种:
enable :开机自动启动。
disable :开机自动关闭。
is-enable:查看开机启动状态。
      例如,执行以下操作即可配置 apache 服务开机自动启动或关闭,并查看开机启动状态。
apache 服务设置为开机自动启动时,在 /etc/systemd/system/multi-user.target.wants/
录下面会出现一个文件名为 httpd.service 的软连接文件。当 apache 服务设置为开机自动关
闭时,在 /etc/systemd/system/multi-user.target.wants/ 目录下面的 httpd.service 软连接文件
就会被删除。
       在当前系统下执行 “systemctl list-units --type=service” 命令可以查看当前系统中所有已
激活的系统服务,命令如下:
本章到此完结。
  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值