08 引导过程与服务控制

目录

8.1 Linux操作系统的引导过程

8.1.1   引导过程总览

开机自检

MBR引导

GRUP菜单

加载Linux内核

init进程初始化

8.1.2   系统初始化进程及文件

init进程

Systemd 概述

8.2 排除系统启动类故障

8.2.1 MBR扇区故障

1、备份MBR扇区数据

2、模拟MBR扇区故障

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

8.2.2 GRUB 引导故障

8.2.3  遗忘root用户的密码

8.3 服务控制及优化启动过程

8.3.1  系统服务控制

8.3.2  切换运行级别

1、查看系统的target

2、切换系统的target

8.3.3  优化启动过程

 1、常见的系统服务

2、优化开机自动加载的服务

(1)使用ntsysv工具

(2)使用systemctl工具


8.1 Linux操作系统的引导过程

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

8.1.1   引导过程总览

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

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

8.1.2   系统初始化进程及文件

  1. init进程
    1. Linux 操作系统中的进程使用数字进行标记,每个进程的身份标记号称为PID。在引导Linux 操作系统的过程中,“/sbin/init"是内核第一个加载的程序,因此init 进程对应的 PID 号总是为 1。
    2. init 进程运行以后将陆续执行系统中的其他程序,不断生成新的进程,这些进程称为init进程的子进程。反过来说,init 进程是这些进程的父进程。当然,这些子进程也可以进一步生成各自的子进程,依次不断繁衍下去,最终构成一棵枝繁叶茂的进程树,共同为用户提供服务。
    3. 从以上描述可以看出,init 进程正是维持整个 Linux 操作系统运行的所有进程的“始祖”,因此init 进程是不允许被轻易终止的。需要切换不同的系统运行状态时,可以向init 进程发送正确的执行参数,由init 自身来完成相关操作。
  2. Systemd 概述
    1. Systemd 是 Linux 操作系统的一种 init 软件,CentOS7系统中采用了全新的 Systemd启动方式,取代了传统的 SysVinit。Systemd启动方式使系统初始化时诸多服务并行启动,大大提高了开机效率。CentOS7 系统中“/sbin/init"是"/lib/systemdlsystemd”的链接文件。换言之,CentOS7系统中运行的第一个init 进程是“/lib/systemd/systemd”。systemd 守护进程负责 Linux 的系统和服务,systemctl 用于控制 Systemd 管理的系统和服务状态。
    2. Systemd 将其管理的资源组织成各种类型的单元(Unit),表 8-1 中列出了 Systemd 使用的各种单元类型。
    3.        Linux 系统服务是指运行在后台并提供特定功能的应用程序,如网站服务、FTP 服务等。Linux 通过将不同的系统服务进行搭配组合来协同满足不同的功能需求。不同的服务组合其实现的功能也各不相同,就好比不同的药方能医治不同的病症一样。
    4. 早期 Linux 操作系统中的 SysVinit 机制,默认包括七种不同的服务搭配方式,其中每一种搭配方式称为运行级别,类似于 Wndows 系统中的正常启动、安全模式、不带网络连接的安全模式等。这些运行级别分别使用数字0,1,…,6来表示。为了向下兼容 SysVinit系统,Systemd 使用了相应的target(目标)模拟了 SysVinit 的运行级别,表 8-2 中列出了运行级别所对应的 target,并说明了各种 target 的含义及用途。

8.2 排除系统启动类故障

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

8.2.1 MBR扇区故障

        MBR 位于物理硬盘的第一个扇区(512 字节),该扇区又称为主引导扇区(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”选项

       再选择“Rescue aCentOS Linux system”选项,将以“救援模式”引导Linux操作系统。 

         然后系统会自动査找硬盘中的 Linux分区并尝试将其挂载到/mntisysimage 目录(选择“1”确认并按 Enter 键继续)。接下来会出现 rescue 字符界面 

        最后,按 Enter 键后将进入带“sh-4.2#”提示符的 Bash Shell 环境只要执行相应的命令挂载保存有备份文件的硬盘分区(sdb1),并将数据恢复到硬盘“/devisda中即可,具体操作如下。需要注意的是,当前使用的系统环境是光盘中的Linux 目录结构。

        完成恢复操作以后,执行“exit”命令退出临时Shell环境,系统将会重启

8.2.2 GRUB 引导故障

        GRUB 是大多数 Linux 操作系统默认使用的引导程序,可以通过启动菜单的方式选择进入不同的操作系统(如果有)。当配置文件/boot/grub2/grub.cfg 丢失,或者关键配置出现错误,或者 MBR 中的引导程序遭到破坏时,Linux 主机启动后可能只出现“grub>”的提示符,无法完成进一步的系统启动过程

        若在该提示符后可以进行编辑,则通过输入对应的引导命令(可参考其他相同版本CentOS 中/boot/grub2/grub.cfg 文件的引导语句),然后执行“boot"命令即可正常引导 Linux操作系统  

        之后的启动过程与正常启动 CentS 系统的过程是一样的。登录进入操作系统以后,需要找到配置文件/bootgrub2/grub.cfg,并修复其中的错误,或者直接重建该文件。具体内容可以参考其他正常主机中的同名文件。       

        在 CentOS 系统中,执行以下操作可以査看 GRUB 配置文件 grub.cfg 的默认内容。

       

        grub.cfg 文件中包含很多内容,如加载 grubenv 中变量、设置默认引导项等。CentOs7默认有两个启动项: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#”的 Shel 环境以后,重写(或通过之前备份的文件恢复)grub.cfg 配置文件即可。重写完 grub.cfg 配置文件后,需要使用 grub2-mkconfig 工具更新 grub.cfg 配置文件。

        在上例中,若未执行“chroot /mntsysimage”命令,则重新建立的 grub.cfg 配置文件应该位于/mnt/sysimage/boot/grub2/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 字节为一组,是硬盘分区表)。

8.2.3  遗忘root用户的密码

        当忘记 root用户的密码时,将无法登录 Linux操作系统执行管理、维护等任务,而只能通过其他用户(普通用户)登录使用一些受限制的功能。当然,如果操作系统中还有其他具有 root 权限的用户(uid 为0),或者拥有修改root账号密码权限的用户,也可以使用这些用户登录操作系统,然后重新设置root用户的密码。

        然而,大多数时候 Linux 主机中具有 root 权限的用户只有一个,因此需要通过其他途径来重设 root账号的密码。最简便的途径是使用 CentOS 的安装光盘进入急救模式。

        若使用 CentOS 的安装光盘进入急救模式的 Shel 环境,则只需切换到待修复 Linux 操作系统的根目录环境,直接执行“passwd root"命令重设root 用户的密码即可;或者修改/etc/shadow 文件,将 root用户的密码字段清空,重启后以空密码可登录系统。以下操作即为进入急救模式重设 root 用户密码。


8.3 服务控制及优化启动过程

        在 Linux 操作系统完成引导以后,如何控制系统服务的运行状态?如何在不同的运行级别之间进行切换?如何优化启动过程,减少系统占用的资源?

8.3.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”。 

8.3.2  切换运行级别

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

1、查看系统的target

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

2、切换系统的target

        当用户需要将系统转换为其他的target时,可以通过传统的init 程序进行,只要使用与运行级别相对应的数字(0~6)作为命令参数即可,或者使用svstemctl命令进行目标切换。例如,为了节省系统资源,将系统运行的target由图形模式(5)切换为字符模式(3),可以执行“init 3”或“systemctl isolate multi-user.target”命令,命令如下:

或者

        将系统切换到字符模式以后,图形桌面环境不再可用。这时按 Alt+F7 组合键也无法恢复图形桌面环境。需要再次使用图形桌面时,可以执行“init 5"或者“systemctl isolategraphical.target”命令切换回去。

        通过切换 target 的操作,还可以实现两个特殊的功能,那就是关机和重启。运行级别 0、6 分别对应关机、重启这两个特殊模式,因此只要执行“init 0”与“init 6”命令就可以实现相应的关机、重启操作了,命令如下: 

        而运行级别 0、6 又分别对应着 systemd 的“poweroff.target”和“reboot.target”目标,因此执行“systemct poweroff’与“systemct reboot”命令也可以实现相应的关机、重启操作,命令如下:        上述内容中的运行级别切换均为临时切换,若要永久切换运行级别,可通过In(链接)命令指定当前系统的默认运行级别。例如,执行如下命令可将当前系统的开机默认运行级别从 graphical.target 更改为 multi-user.target。其中,-s选项表示创建软链接;-f表示强行删除任何已存在的目标文件。

8.3.3  优化启动过程

 1、常见的系统服务

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

2、优化开机自动加载的服务

        Linux操作系统在每次开机后会进入默认的systemd运行目标(如字符模式或图形模式),并运行该目标中默认设为启动的各种系统服务。若要禁止某些系统服务自动运行,可以使用ntsysv 或者 systemctl 工具进行优化。

(1)使用ntsysv工具

        ntsysv 工具可以在字符模式中运行,为用户提供一个仿图形的交互式操作界面,专门用于集中配置各种系统服务的启动状态。当需要同时设置多个服务的启动状态时,使用 ntsysv 工具会非常方便。

        单独执行“ntsysv”命令时仅用于管理当前运行目标中的服务;通过“--leve!”选项可以对指定运行目标(级别)中的服务进行管理。例如,执行“ntsysv--level35”命令可以打开 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/日录下面的 htpd.service 软连接文件就会被删除。        在当前系统下执行“systemctl list-units --type=service”命令可以查看当前系统中所有已激活的 系统服务,命令如下:

  • 38
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值