引导过程总览
开机自检(BIOS)(如今UEFI)-》MBR引导(Master Boot Record)-》GRUB菜单-》加载内核(kernel)-》init进程初始化
- MBR:一个扇区(0磁道0扇区)512字节
- bootloader:446字节(1--446)引导程序
- 硬盘分区表(DPT):64字节(447-510)每16字节负责保存一个分区的信息;4个主分区
- 结束标识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 控制类型 服务名称
- stant(启动):运行指定的系统服务程序,实现服务功能
- stop(停止):终止指定的系统服务程序,关闭相应的功能
- restart(重启):先退出,再重新运行指定的系统服务程序
- reload(重载):不退出服务程序,只是刷新配置。在某些服务中与restart 的操作相同
- 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表示强行删除任何已存在的目标文件
1633

被折叠的 条评论
为什么被折叠?



