Linux 引导过程与服务控制

Linux 操作系统的引导过程

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

引导过程总览

Linux 操作系统的引导过程一般包括以下几个阶段:开机自检、MBR 引导、GRUB 菜单、加载 Linux 内核、init 进程初始化。

  1. 开机自检
    服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit,中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
  2. MBR引导
    当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR(Master Boot Record,主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR 记录中的引导信息调用启动菜单(如 GRUB)。
  3. GRUB菜单
    对于 Linux操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB 以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。需要注意的是,CentOS7采用的是 GRUB2 启动引导器。
  4. 加载Linux内核
    Linux 内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。在 CentOS 系统中,默认的内核文件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64"。
  5. init进程初始化
    为了完成进一步的系统引导过程,Linux 内核首先将系统中的"/sbin/init"程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录。

系统初始化进程及文件

本小节主要介绍 init 进程及与系统初始化过程相关的一些配置文件。

  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"的链接文件。换言之,CentOS7系统中运行的第一个init 进程是"/lib/systemd/systemd"。systemd 守护进程负责 Linux 的系统和服务,systemctl 用于控制 Systemd 管理的系统和服务状态。
    ———————Systemd的单元类型——————
单元类型扩展名说明
Service.service描述一个系统服务
Socket.socket描述一个进程间通信的套接字
Device.device描述一个内核识别的设备文件
Mount.mount描述一个文件系统的挂载点
Automount.automount描述一个文件系统的自动挂载点
Swap.swap描述一个内存交换设备或交换文件
Path.path描述一个文件系统中文件或目录
Timer.timer描述一个定时器(用于实现类似 cron 的调度任务)
Snapshot.snapshot用于保存一个 systemd 的状态
Scope.scope使用 systemd 的总线接口以编程的方式创建外部进程
Target.target描述一组 systemd 的单元

》Linux 系统服务是指运行在后台并提供特定功能的应用程序,如网站服务、FTP 服务等。Linux通过将不同的系统服务进行搭配组合来协同满足不同的功能需求。不同的服务组合其实现的功能也各不相同,就好比不同的药方能医治不同的病症一样。
》早期 Linux 操作系统中的 SysVinit 机制,默认包括七种不同的服务搭配方式,其中每一种搭配方式称为运行级别,类似于 Windows 系统中的正常启动、安全模式、不带网络连接的安全模式等。这些运行级别分别使用数字0,1,…,6来表示。为了向下兼容 SysVinit系统,Systemd 使用了相应的target(目标)模拟了 SysVinit 的运行级别,表 8-2 中列出了运行级别所对应的 target,并说明了各种 target 的含义及用途。
—————Systemd的目标与SysVinit的运行级别————

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

排除系统启动类故障

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

MBR扇区故障

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

  1. 备份MBR扇区数据
    由于 MBR 扇区中包含了整个硬盘的分区表记录,因此该扇区的备份文件必须存放到其他的存储设备中,否则在恢复时将无法读取到备份文件。例如,执行以下操作可以将第一块硬盘(sda)的 MBR 扇区备份到第二块硬盘的 sdb1 分区中(挂载到/backup 目录)。在这里插入图片描述
  2. 模拟MBR扇区故障
    这里仍然使用 dd 命令,人为地将 MBR 扇区的记录覆盖,以便模拟出 MBR 扇区被破坏的故障情况(切记要先做好备份,并且将备份文件存放到其他硬盘)。例如,执行以下操作可以从设备文件 zero 中读取 512 字节的数据,并将其覆盖到第一块硬盘(sda),从而破坏 MBR 扇区中的数据。在这里插入图片描述
    完成上述操作后重启系统,将会出现“Operating system not found"的提示信息,表示无法找到可用的操作系统,因此无法启动主机。
  3. 冲备份文件中恢复MBR扇区数据
    由于 MBR 扇区被破坏以后,就无法再从该硬盘启动系统,所以需要使用其他硬盘中的操作系统进行引导,或者直接使用 CentOS系统的安装光盘进行引导。不管使用哪种方式,目的都是相同的–获得一个可以执行命令的 Shel 环境,以便从备份文件中恢复 MBR 扇区中的数据。
    以使用 CentOS 安装光盘引导为例,当出现安装向导界面时,选择“Troubleshooting选项,如图 8.1 所示,进入修复故障页面。在这里插入图片描述
    再选择"Rescue a CentOS Linux system"选项,如图8.2所示,将以"救援模式"引导Linux操作系统。在这里插入图片描述
    然后系统会自动查找硬盘中的 Linux 分区并尝试将其挂载到/mntsysimage 目录(选择“1"确认并按 Enter 键继续)。接下来会出现 rescue 字符界面,如图 8.3 所示。
    在这里插入图片描述
    最后,按 Enter 键后将进入带“sh-4.2#“提示符的 Bash Shell 环境,如图 8.4 所示。只要执行相应的命令挂载保存有备份文件的硬盘分区(sdb1),并将数据恢复到硬盘”/dev/sda中即可,具体操作如下。需要注意的是,当前使用的系统环境是光盘中的Linux 日录结构。在这里插入图片描述在这里插入图片描述
    完成恢复操作以后,执行“exit"命令退出临时 Shel 环境,系统将会自动重启。

GRUB引导故障

GRUB 是大多数 Linux 操作系统默认使用的引导程序,可以通过启动菜单的方式选择进入不同的操作系统(如果有)。当配置文件/bootgrub2grub.cfg 丢失,或者关键配置出现错误,或者 MBR 中的引导程序遭到破坏时,Linux 主机启动后可能只出现"grub>”的提示符,无法完成进一步的系统启动过程,如图 8.5 所示。在这里插入图片描述
若在该提示符后可以进行编辑,则通过输入对应的引导命令(可参考其他相同版本CentOS 中/boot/grub2/grub.cfg 文件的引导语句),然后执行“boot"命令即可正常引导 Linux
操作系统,具体操作如下:在这里插入图片描述
之后的启动过程与正常启动 CentOS 系统的过程是一样的。登录进入操作系统以后,需要找到配置文件/bootgrub2/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 /mntsysimage"命令,则重新建立的 grub.cfg 配置文件应该位于/mntsysimage/bootgrub2/grub.cfg.
如果是 MBR 扇区中的引导程序出现损坏,则在重建 grub.cfg 配置文件后仍然可能无法成功启动系统,这时可以通过 CentOS 救援模式的 Shel 环境重新安装 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 的安装光盘进入急救模式的 Shel 环境,则只需切换到待修复 Linux 操作系统的根目录环境,直接执行"passwd root"命令重设root 用户的密码即可;或者修改/etc/shadow 文件,将 root 用户的密码字段清空,重启后以空密码可登录系统。以下操作即为进入急救模式重设 root 用户密码。在这里插入图片描述

服务控制及优化启动过程

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

系统服务控制

在 CentOS 系统中,各种系统服务的控制脚本默认放在/usr/lib/systemd 目录下。通过systemctl 命令工具可以实现对指定系统服务的控制,语法格式如下:在这里插入图片描述
对于大多数系统服务来说,常见的几种控制类型如下所述。

start(启动):运行指定的系统服务程序,实现服务功能。
stop(停止):终止指定的系统服务程序,关闭相应的功能。
restart(重启):先退出,再重新运行指定的系统服务程序。
reload(重载):不退出服务程序,只是刷新配置。在某些服务中与restart 的操作相同。
status(查看状态):查看指定的系统服务的运行状态及相关信息。

例如,执行如下的"systemctl start postfix.service"操作可以启动尚未运行的 postfix 服务
在这里插入图片描述
若要查看指定 postfx 服务的运行状态,只需将上述命令中的"start"改为"status"即可。若要停止 postfix 服务,只需将"start"改为“stop"即可,具体命令如下:在这里插入图片描述
控制类型"restart"用在需要释放旧的资源全部从头开始的情况,它会先关闭相应的服务程序,然后重新运行。例如,当在网卡的配置文件中设置了新的IP 地址以后,为了激活新的 IP 地址,可以重新启动名称为network的系统服务,命令如下:在这里插入图片描述
对于在实际生产环境中运行的服务器,不要轻易执行 stop或restan 操作,以免造成客户端访问中断,带来不必要的损失。若只是要为系统服务启用新的配置,可以采用相对温和一些的“reload"参数重新加载配置,而不是生硬地执行"restart"。例如,对正在为用户提供Web 访问的 htpd 服务,当需要应用新的配置时,建议执行“systemctl reload httpd.service命令来重新载入配置,而不是执行“systemctl restart httpd.service”。在这里插入图片描述

切换运行级别

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

  1. 查看系统的target
    明确当前系统所在的 target 将有助于管理员排除一些应用故障。若未能确知当前所处的目标,可以直接执行"runleve!“命令进行查询,显示结果中的两个字符分别表示切换前的目标、当前的目标。若之前尚未切换过运行级别,则第1列将显示“N”,命令如下:在这里插入图片描述
    若用户想查看系统启动时默认运行的target,可以执行"systemctl get-default”命令以显示系统默认的 target,命令如下:
    在这里插入图片描述
  2. 切换系统的target
    当用户需要将系统转换为其他的target 时,可以通过传统的init 程序进行,只要使用与运行级别相对应的数字(0~6)作为命令参数即可,或者使用systemctl 命令进行目标切换。例如,为了节省系统资源,将系统运行的 target 由图形模式(5)切换为字符模式(3),可以执行“init 3"或“systemctl isolate multi-user.target"命令,命令如下:在这里插入图片描述

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

优化启动过程

Linux 操作系统中包含了大量的服务程序,这些服务程序在切换运行级别时根据预设的状态进行启动或终止。其中有不少系统服务可能并不是用户需要的,但是默认也运行了。那么,在 Linux 操作系统中默认包括哪些系统服务?各自的作用是什么?如何控制开机后自动运行的系统服务,以减少资源占用、提高系统运行效率呢?下面就这些问题分别进行讲解。

  1. 常见的系统服务
    在 CentOS 系统中,默认安装的系统服务多达 100 余种,这些系统服务为用户提供了丰富的应用服务。只有了解各个系统服务的用途,才能有选择地进行优化操作,实现按需启用 Linux 服务。
    ————CentOS系统中常见的系统服务————
服务名称用途简介备注
atd延期、定时执行任务建议关闭
bluetooth发现、认证蓝牙相关设备建议关闭
crond按预定周期执行计划任务建议开启
irgbalance多核心 CPU 处理器的调度支持建议开启
kdump记录内核崩溃时的内存信息建议关闭
Ivm2-monitorLVM 管理及监控建议开启
netfs访问共享文件夹等网络文件系统建议开启
network配置及使用网卡、网络地址建议开启
restorecondSELinux 安全机制的文件监控和恢复功能建议关闭
rhnsd访问 Red Hat Network,获取通知、提交订阅等建议关闭
rpcgssd管理 NFS(Network File System,网络文件系统)访问中的客户程序语境建议关闭
saslauthd基于文本的身份认证建议关闭
smartd监控本地硬盘的状态并发送故障报告建议开启
smb文件共享服务建议开启
sshd提供远程登录和管理 Linux 主机的功能建议开启
rsyslog记录内核、系统的日志消息建议开启
vsftpd通过 FTP(File Transfer Protocol,文件传输协议)提供文件上传,下载功能建议关闭

必须强调的是,这些服务到底是选择开启还是关闭,应根据主机的实际功能需求来定,不要生搬硬套。例如,如果当前的 Linux 主机用来向局域网提供文件共享服务,那么smb服务应开启,而不能关闭。

  1. 优化开机自动加载的服务

Linux操作系统在每次开机后会进入默认的systemd运行目标(如字符模式或图形模式),并运行该目标中默认设为启动的各种系统服务。若要禁止某些系统服务自动运行,可以使用ntsysv 或者 systemct 工具进行优化。
(1)使用ntsysv工具
ntsysv 工具可以在字符模式中运行,为用户提供一个仿图形的交互式操作界面,专门用于集中配置各种系统服务的启动状态。当需要同时设置多个服务的启动状态时,使用 ntsysv 工具会非常方便。
单独执行“ntsysv"命令时仅用于管理当前运行目标中的服务;通过"–leve!"选项可以对指定运行目标(级别)中的服务进行管理。例如,执行"ntsysv-level35"命令可以打开 ntsysv
管理程序,如图 8.6所示,同时对运行目标 3、5中的各种系统服务的默认启动状态进行调整。在这里插入图片描述
操作时按↑、↓方向键来选择不同的系统服务,按Space(空格)键设置服务的默认启动状态(“[*]"表示启动,“[]表示关闭)。如果要查看所选定服务的说明信息,按 F1 键可以
获取帮助。
(2)使用systemctl工具
systemctl 工具与 ntsysv的功能类似,但是 systemctl 不提供交互式的操作界面,它用于查询或设置系统服务的默认启动状态。当需要设置某一个服务在当前运行目标中的默认启动状态时,使用 systemct 工具会更有效率。使用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=senvice"命令可以查看当前系统中所有已激活的系统服务,命令如下:在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值