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

引导过程总览

开机自检(BIOS)(如今UEFI)-》MBR引导(Master Boot Record)-》GRUB菜单-》加载内核(kernel)-》init进程初始化

  • MBR:一个扇区(0磁道0扇区)512字节
    1. bootloader:446字节(1--446)引导程序
    2. 硬盘分区表(DPT):64字节(447-510)每16字节负责保存一个分区的信息;4个主分区
    3. 结束标识55aa:2个字节(511-512)
  • init进程(管理工具:service)
    • 由Linux内核加载运行 /sbin/init 程序
    • init进程是系统中第一个进程
    • init进程的PID(进程标记)号永远为1
  • Systemd(管理工具:systemctl)
    • Systemd是Linux操作系统的一种init软件
    • CentOS7中采用全新的Systemd启动方式,取代传统的SysVinit
    • CentOS7中运行的第一个init进程是/lib/systemd/systemd

        Systemd单元类型

单元类型

扩展名

说明

Service

.service

描述一个系统服务

Socket

.socket

描述一个进程间通信的套接字

Device

.device

描述一个内核识别的设备文件

Automount

.automount

描述一个文件系统的自动挂载点

Swap

.swap

描述一个内存交换设备或交换文件

Path

.path

描述一个文件系统中文件或目录

Timer

.timer

描述一个定时器(用于实现类似 cron 的调度任务)

Snapshot

.snapshot

用于保存一个 systemd 的状态

Scope

.scope

使用 systemd 的总线接口以编程的方式创建外部进程

Slice

.slice

描述居于 Cgroup 的一组通过层次组织的管理系统进程

Target

.target

描述一组 systemd 的单元

        运行级别所对应的Systemd目标

运行级别

Systemd的target

说明

0

target

关机状态,使用该级别时将会关闭主机

1

rescue.target

单用户模式,不需要密码验证即可登录系统,多用于系统维护

2

multi-user.target

用户定义/域特定运行级别。默认等同于3

3

multi-user.target

字符界面的完整多用户模式,大多数服务器主机运行在此级别

4

multi-user.target

用户定义/域特定运行级别。默认等同于3

5

graphical.target

图形界面的多用户模式,提供了图形桌面操作环境

6

reboot.target

重新启动,使用该级别时将会重启主机

排除系统启动类故障

1、MBR扇区故障

(1)备份MBR扇区数据

        将第-块硬盘(sda)的 MBR 扇区备份到第二块硬盘的 sdb1 分区中(挂载到/backup 目录)

[root@localhost ~]# mkdir /backup
[root@localhost ~]# mount /dev/sdb1 /backup
[root@localhost ~]# dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1

(2)模拟 MBR 扇区故障

  • 使用 dd 命令,人为地将 MBR 扇区的记录覆盖,以便模拟出 MBR 扇区被破坏的故障情况(切记要先做好备份,并且将备份文件存放到其他硬盘)
  • 执行以下操作可以从设备文件 zero 中读取 512 字节的数据,并将其覆盖到第一块硬盘(sda),从而破坏 MBR 扇区中的数据
[root@localhost ~]# dd if=/devlzero of=/dev/sda bs=512 count=1

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

  • 由于 MBR 扇区被破坏以后,就无法再从该硬盘启动系统,所以需要使用其他硬盘中的操作系统进行引导,或者直接使用 CentOS系统的安装光盘进行引导
  • 使用 CentOS 安装光盘引导,当出现安装向导界面时,选择“Troubleshooting选项

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

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

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

sh-4.2# fdisk -/devlsda        //因 MBR 损坏,已无法获得有效分区表
Disk /dev/sda: 107.4 GB,107374182400 bytes, 209715200 sectors
Units=sectors of1*512=512 bytes
Sectors size (logical/physical):512 bytes / 512 bytes
l/0 siza (minimum/optimal): 512 bytes / 512 bytes
sh-4.2# mkdir /tmpdir
sh-4.2# mount /devlsdb1 /tmpdir        //挂载带有备份文件的分区
sh-4.2# dd if=/tmpdir/sda.mbr.bak of=/devisda        //恢复备份数据

完成恢复操作后,执行“exit”退出临时Shell环境

2、GRUB引导故障

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

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

grub>  linux16   /vmlinuz-3.10.0-514.el7.x86 64       root=/dev/mapper/centos-root
(/devlmapper/cl-root    rocrashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet LANG=en US.UTF-8)

grub> initrd16 /initramfs-3.10.0-514.el7.x86 64.img
grub> boot
  • 之后的启动过程与正常启动 CentOS系统的过程是一样的。登录进入操作系统以后需要找到配置文件/boot/grub2/grub.cfg,并修复其中的错误,或者直接重建该文件
    • 在 CentOS 系统中,执行以下操作可以査看 GRUB 配置文件 grub.cfg 的默认内容
[root@localhost ~]# grep -v"^#" /bootlgrub2/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=”指定根分区的设备文件位置

 

备:另一种方式
  • 由于在"grub>"环境中使用的命令较为复杂,且一般也难以记住相关的命令选项、内核加载参数等,因此可以采用另一种修复办法,同样使用 CentOS 的安装光盘引导进入急救模式若分区表未被破坏,则急救模式将会找到硬盘中的 Linux 根分区,并将其挂载到光盘目录结构中的/mnt/sysimage/文件夹中,进入“bash-4.2#"的 Shel 环境以后,重写(或通过之前备份的文件恢复)grub.cfg 配置文件即可。重写完 grub.cfg 配置文件后,需要使用 grub2-mkconfig 工具更新 grub.cfg 配置文件
sh-4.2# chroot /mnt/sysimage        //将/mntsysimage 设置为当前环境的根
bash-4.2# vi /bootlgrub2lgrub.cfg        //编辑 grub.cfg 文件,内容略
bash-4.2# exit        //退出 chroot 环境
exit
sh-4.2# reboot        //退出 sh-4.2环境,系统会自动重启
  • 若未执行“chroot /mntsysimage”命令,则重新建立的 grub.cfg 配置文件应该位于/mnt/sysimage/boot/grub2/grub.cfg
  • 如果是 MBR 扇区中的引导程序出现损坏,则在重建 grub.cfg 配置文件后仍然可能无法成功启动系统,这时可以通过 CentOS 救援模式的 Shel 环境重新安装 grub 引导程序。切换到待修复的 Linux 操作系统根环境,执行“grub2-install /dev/sda"命令可以重新将 grub 引导程序安装到第 块硬盘(sda)的 MRB 扇区
sh-4.2# chroot /mnt/sysimage
bash-4.2# grub2-install /devlsda
bash-4.2# exit
sh-4.2# reboot
  • 上述方法同样适用于在 Linux 主机中重装 Windows 操作系统(不覆盖 Linux 操作系统)后导致 Linux操作系统无法启动的情况。因为对于使用双操作系统的主机,后安装的Windows 操作系统将使用自己的引导数据覆盖 MBR 扇区中的记录,导致开机后不再出现GRUB 菜单从而无法进入 Linux 操作系统
    • 注意:执行“dd if=/dev/zero of=/dev/sda bs=446 count=1”命令可以模拟出对 MBR 扇区中 GRUB 引导程序的破坏(注意先做好备份),但并不会破坏分区表

3、遗忘root用户的密码

                使用 CentOS 的安装光盘进入急救模式的 Shel 环境,则只需切换到待修复 Linux 操作系统的根目录环境,直接执行“passwd root”命令重设 root 用户的密码即可;

                或者修改/etc/shadow 文件,将 root用户的密码字段清空,重启后以空密码可登录系统

sh-4.2# chroot /mnt/sysimage

bash-4.1# passwd root

服务控制及优化启动过程

1、系统服务控制

在 CentOS 系统中,各种系统服务的控制脚本默认放在/usr/lib/systemd 目录下,通过systemctl 命令工具可以实现对指定系统服务的控制

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

2、切换运行级别

(1)查看系统的target

  • 明确当前系统所在的 target将有助于管理员排除一些应用故障。若未能确知当前所处的目标,可以直接执行“runlevel”命令进行查询
  • 若用户想查看系统启动时默认运行的 target,可以执行“systemctl get-default”命令以显示系统默认的 target

(2)切换系统的target

  • 当用户需要将系统转换为其他的target 时,可以通过传统的init 程序进行,只要使用与运行级别相对应的数字(0~6)作为命令参数即可,或者使用systemctl 命令进行目标切换
[root@localhost ~l# init 3
[root@localhost ~l# runlevel
5 3
或
[root@localhost ~]# systemctl isolate multi-user.target
  • 通过切换 target 的操作,还可以实现两个特殊的功能,那就是关机和重启。运行级别 0、6 分别对应关机、重启这两个特殊模式,因此只要执行“init 0”与“init 6”命令就可以实现相应的关机、重启操作了
  • 而运行级别 0、6 又分别对应着 systemd 的“poweroff.target”和“reboot.target”目标,因此执行“systemct powerof”与“systemctl reboot”命令也可以实现相应的关机、重启操作
  • 上述内容中的运行级别切换均为临时切换,若要永久切换运行级别,可通过In(链接)命令指定当前系统的默认运行级别,其中 -s选项表示创建软链接;-f表示强行删除任何已存在的目标文件
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值