Linux系统引导过程与启动排障
1.Linux操作系统引导过程
1)启动过程
开机自检(BIOS)→ MBR引导 → GRUB(菜单)→ 加载内核(kernet)→ init进程初始化
1、开机自检:检测设备/硬件是否正常。
2、MBR引导:硬盘一块扇区中的核心区域。
- 当计算机开机时,BIOS会读取硬盘上的MBR,并将控制权交给MBR中的引导程序,从而启动操作系统
3、GRUB菜单:给用户显示菜单-》选择以什么方式运行Linux内核加载Linux内核。
4、加载内核:内核是处于硬件和程序之间,用于管理协调角色(资源)目的:就是把内核程序/文件加载到内存中。
- Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程,
5、系统第一个进程init进程初始化,及其它自启动程序初始化。
2)systemd(/lib/systemd)
systemd是Linux系统的一套基本构建模块,它提供了一个系统和服务管理器,作为PID 1运行并启动系统的其余部分。systemd提供积极的并行化功能,使用套接字和D-Bus激活来启动服务,提供按需启动守护进程,使用Linux控制组跟踪进程,维护挂载和自动挂载点,并实现一个精心设计的基于事务依赖的服务控制逻辑。
①systemd的主要功能和特点
-
并行启动服务:允许并行启动多个不相互依赖的服务,显著缩短系统启动时间。
-
unit文件:每个系统资源(如服务、挂载点、设备、sockets、计时器等)都被定义为一个“单元”(unit),并由一个相应的配置文件(unit file)来描述。
-
依赖关系管理:允许精确地定义服务之间的依赖关系,确保服务按照正确的顺序启动或停止。
-
系统目标(targets):类似于System V init的运行级别,但更加灵活,代表一组服务的集合,定义了系统的某种运行状态。
-
journal日志:提供了一个名为journal的日志系统,用于收集和查看系统日志,支持快速过滤和查询。
-
socket激活:服务可以根据实际需求(如客户端连接)动态激活,而不是一直运行等待请求,提高了资源利用率。
-
环境变量与资源限制:unit文件中可以设定服务的环境变量、资源使用限制(如内存、cpu时间)等。
-
用户服务:除了系统级别的服务外,systemd还支持用户级别的服务,通过user@.service类型的单元。
-
网络命名和管理:提供了一个叫做networkd的组件,用于网络接口的配置和管理。
-
systemd在Linux系统中的作用
- systemd负责管理系统的启动过程、服务、挂载点、设备、网络等,确保系统按照正确的顺序和方式进行初始化。它取代了传统的init系统,提供了更高效、更灵活的服务管理方式
②systemctl单元类型
systemctl
是 systemd 的命令行工具,用于管理和控制系统服务。在 systemd 中,各种系统资源和对象都被组织成不同的“单元”(units)。每个单元都有一个特定的类型,这些类型决定了单元的行为和用途。以下是一些常见的 systemd 单元类型:
- Service(服务):
- 类型为
.service
。 - 定义了一个系统服务,包括如何启动、停止、重启该服务,以及它的依赖关系等。
- 示例:
nginx.service
表示 Nginx 网络服务器服务。
- 类型为
- Socket(套接字):
- 类型为
.socket
。 - 定义了一个网络或 IPC 套接字,可以用于监听来自客户端的连接请求。
- Socket 可以与服务关联,当有新的连接请求时,可以自动激活对应的服务。
- 示例:
dbus.socket
表示 D-Bus 通信套接字。
- 类型为
- Target(目标):
- 类型为
.target
。 - 类似于传统的 runlevel,定义了一组服务的集合,代表了系统的某种运行状态。
- 可以将系统切换到某个目标,从而改变系统的运行级别或状态。
- 示例:
graphical.target
表示图形界面模式,multi-user.target
表示多用户命令行模式。
- 类型为
- Device(设备):
- 类型为
.device
。 - 定义了一个系统设备,通常与 udev 规则相关联。
- 示例:
/dev/sda.device
表示一个硬盘设备。
- 类型为
- Mount(挂载):
- 类型为
.mount
。 - 定义了一个文件系统的挂载点,包括挂载选项、挂载点路径等。
- 示例:
/mnt/data.mount
表示一个数据挂载点。
- 类型为
- Automount(自动挂载):
- 类型为
.automount
。 - 定义了一个自动挂载点,当访问该路径时,系统会自动挂载相应的文件系统。
- 示例:
/mnt/nfs.automount
表示一个 NFS 自动挂载点。
- 类型为
- Swap(交换分区):
- 类型为
.swap
。 - 定义了一个交换分区,用于虚拟内存管理。
- 示例:
/dev/sdb1.swap
表示一个交换分区。
- 类型为
- Path(路径):
- 类型为
.path
。 - 定义了一个文件系统路径,当该路径发生变化时,可以触发某个服务或操作。
- 示例:
/etc/fstab.path
可以在/etc/fstab
文件发生变化时执行某些操作。
- 类型为
- Timer(计时器):
- 类型为
.timer
。 - 定义了一个定时器,可以在指定的时间间隔后触发某个服务或操作。
- 示例:
backup.timer
可以定期执行备份任务。
- 类型为
- Snapshot(快照):
- 类型为
.snapshot
。 - 用于创建当前系统状态的快照,可以用于备份或恢复。
- 示例:
emergency-snapshot.target
表示一个紧急快照目标。
- 类型为
③运行级别所对应的Systemd目标
运行级别 | Systemd的target | 说明 |
---|---|---|
0 | poweroff.target | 关机状态,使用该级别时将会关闭主机 |
1 | rescue.target | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
2 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
4 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
示例:
以下是一些常见的systemd目标及其与传统运行级别的对应关系:
runlevel命令
runlevel0.target
或poweroff.target
:- 对应传统的运行级别0,即关机模式。
- 系统会关闭所有服务并关机。
runlevel1.target
或rescue.target
:- 对应传统的运行级别1,即单用户模式。
- 系统仅启动最基本的服务,并以root用户登录,用于系统维护和故障排除。
runlevel2.target
、runlevel3.target
或multi-user.target
:- 对应传统的运行级别2和3,即多用户模式(无图形界面)。
- 系统启动所有必要的服务,但不启动图形界面。
runlevel4.target
:- 在传统的Linux系统中,运行级别4通常没有特殊含义,可以被配置为自定义状态。
- 在systemd中,这个目标也可以被用作自定义目标。
runlevel5.target
或graphical.target
:- 对应传统的运行级别5,即多用户模式(带图形界面)。
- 系统启动所有必要的服务,并启动图形界面。
runlevel6.target
或reboot.target
:- 对应传统的运行级别6,即重启模式。
- 系统会关闭所有服务并重启。
init命令
2.排除启动类故障
1)修复MBR扇区故障
- 故障原因
- 病毒、木马等造成的破坏
- 不正确的分区操作、磁盘读写误操作
- 故障现象
- 找不到引导程序,启动中断
- 无法加载操作系统,开机后黑屏
- 解决思路
- 应提前作好备份文件
- 以安装光盘引导进入急救模式
- 从备份文件中恢复
- 解决过程
######修复MBR扇区故障
MBR位于第一块硬盘(/dev/sda)的第一个物理扇区处,总共512字节
1.备份MBR 扇区数据到其它磁盘(/dev/sdb1)
mkdir /backup
mount /dev/sdb1 /backup
dd if=/dev/sda of=/backup/mbr.bak bs=512 count=1
2.模拟破坏MBR引导扇区
dd if=/dev/zero of=/dev/sda bs=512 count=1
3.引导界面进入急救模式,从备份文件中恢复MBR 扇区数据
先加载好光盘镜像,重启操作系统,
当出现安装向导界面时,选择“Troubleshooting”选项,
再选择“Rescue a CentOS Linux system”选项,进入急救模式
选择“1”选择 Continue并按 Enter 键继续
再次按 Enter 键后将进入带“sh-4.2#”提示符的 Bash Shell 环境
sh-4.2# mkdir /backupdir
sh-4.2# mount /dev/sdb1 /backupdir #挂载带有备份文件的分区
sh-4.2# dd if=/backupdir/mbr.bak of=/dev/sda #恢复备份数据
sh-4.2# exit
2)修复MBR引导故障
- 故障原因
- MBR中的GRUB引导程序遭到破坏
- grub.cfg文件丢失、引导配置有误
- 故障现象
- 系统引导停滞,显示“grub>”提示符
- 解决思路
- 尝试手动输入引导命令
- 进入急救模式,重写或者从备份中恢复grub.conf
- 向 MBR 扇区中重建grub程序
- 解决过程:
方法一:手动输入引导命令(笨拙繁琐,不建议使用)
grub> insmod xfs #加载指定的模块到内核
grub> linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=UUID=8fd74986-ae66-4ffd-b7d8-a19f2eca7b6f ro rhgb quiet LANG=zh_CN.UTF-8 #内核的名字及位置等信息
grub> initrd16 /initramfs-3.10.0-693.el7.x86_64.img #镜像系统文件
grub> boot #引导boot
方法二:进入急救模式,恢复GRUB引导程序
MBR位于第一块硬盘(/dev/sda)的第一个物理扇区处,总共512字节,前466字节是主引导记录,分区表保存在MBR扇区中的第477-510字节中。
mkdir /bak
mount /dev/sdb1 /bak
dd if=/dev/sda of=/bak/grub.bak bs=446 count=1
#模拟对MRB中的GRUB引导程序的破坏,但并不破坏分区表
dd if=/dev/zero of=/dev/sda bs=446 count=1
#引导界面进入急救模式,从备份文件中恢复GRUB引导程序
sh-4.2# mkdir /backupdir
sh-4.2# mount /dev/sdb1 /backupdir
sh-4.2# dd if=/backupdir/grub.bak of=/dev/sda
sh-4.2# exit
方法三:引导界面进入急救模式,重建GRUB菜单配置文件
rm -rf /boot/grub2/grub.cfg
#进入急救模式,加载系统镜像,切换到系统根环境
先加载好光盘镜像,重启操作系统,
当出现安装向导界面时,选择“Troubleshooting”选项,
再选择“Rescue a CentOS Linux system”选项,进入急救模式
选择“1”选择 Continue并按 Enter 键继续
再次按 Enter 键后将进入带“sh-4.2#”提示符的 Bash Shell 环境
sh-4.2# chroot /mnt/sysimage
#重新将GRUB引导程序安装到第一块硬盘(/dev/sda)的MRB扇区
bash-4.2# grub2-install /dev/sda
#重新构建GRUB菜单的配置文件
bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg
#退出chroot 环境,并重启
bash-4.2# exit
sh-4.2# reboot
##### 3)遗忘 root 用户
的密码
进入急救模式,加载系统镜像,切换到系统根环境
sh-4.2# chroot /mnt/sysimage
#重设 root 用户密码
bash-4.1# passwd root