Linux 系统启动故障排查与 GRUB2 配置实战
·
Linux 系统启动原理
/etc/fstab 引起的系统启动问题
环境准备
# 设置磁盘分区管理方案
[root@server ~ 09:37:47]# parted /dev/sdb mklabel msdos
信息: You may need to update /etc/fstab.
# 创建分区
[root@server ~ 09:45:12]# parted /dev/sdb unit MiB mkpart primary 1 10241
信息: You may need to update /etc/fstab.
# 格式化为xfs文件系统
[root@server ~ 09:45:50]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 创建挂载点
[root@server ~ 09:46:12]# mkdir /data01
# 设置持久化挂载
[root@server ~ 09:47:27]# echo '/dev/sdb1 /data01 xfs defaults 0 0' >> /etc/fstab
# 挂载并验证
[root@server ~ 09:48:12]# mount -a
[root@server ~ 09:48:14]# df -h /data01
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 10G 33M 10G 1% /data01
故障1:挂载点不存在
环境准备
[root@server ~ 09:48:23]# umount /data01
[root@server ~ 09:48:40]# rmdir /data01/
重启系统验证
# 可以正常进入系统,挂载点会被自动创建
[root@server ~ 09:49:11]# df -h /data01
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 10G 33M 10G 1% /data01
故障2:设备名称写错或者找不到设备
环境准备
[root@server ~ 09:49:20]# vim /etc/fstab
# 将原先的sdb1修改为sdc1
/dev/sdC1 /data01 xfs defaults 0 0
故障修复
进入 emergency 模式后,将 fstab 中错误的设备名改回/dev/sdb1(或注释该条目),执行exit命令即可继续正常启动。
- 然后输入exit,继续启动。
故障3:破坏文件系统
环境准备
[root@server ~ 10:14:36]# dd if=/dev/zero of=/dev/sdb1 bs=1M count=1
记录了1+0 的读入
记录了1+0 的写出
1048576字节(1.0 MB)已复制,0.00255055 秒,411 MB/秒
重启系统验证
- 系统启动过程中尝试修复文件系统,修复失败后提示进入 emergency 模式修复。

故障修复
- 输入 root 密码进入 emergency 模式;
- 执行 XFS 文件系统修复命令:
xfs_repair /dev/sdb1

- 修复完成后执行
exit命令,系统恢复正常启动。
二、GRUB2 启动配置详解
GRUB2 是 Linux 系统的主流启动引导程序,通过配置 GRUB2 可调整启动菜单、内核参数、安全策略等核心启动行为。
2.1 GRUB2 核心配置文件说明
| 配置文件 / 目录 | 作用说明 |
|---|---|
| /boot/grub2/ | GRUB2 核心配置文件存放目录(含 grub.cfg、grubenv、user.cfg 等) |
| /etc/grub2.cfg | 软链接指向 /boot/grub2/grub.cfg,禁止直接修改 |
| /etc/grub2-efi.cfg | EFI 启动模式下的 GRUB2 配置文件(软链接) |
| /etc/grub.d/ | 存放启动菜单生成脚本,按数字前缀从小到大执行(如 00_header) |
| /etc/default/grub | 定义 GRUB2 核心变量(如菜单超时、内核参数),是主要自定义入口 |
| /boot/grub2/grubenv | 存储默认启动条目等临时配置信息 |
注意:/etc/grub2.cfg 由系统自动生成,需通过修改 /etc/default/grub + 执行 grub2-mkconfig 命令更新。
2.2 调整 GRUB2 菜单超时时间
修改启动菜单的等待选择时间(默认 5 秒),步骤如下:
# 1. 编辑GRUB2核心配置文件
[root@server ~ 10:44:50]# vim /etc/default/grub
# 将GRUB_TIMEOUT值修改为10(单位:秒)
GRUB_TIMEOUT=10
# 2. 重新生成grub.cfg配置文件使修改生效
[root@server ~ 10:45:34]# grub2-mkconfig -o /etc/grub2.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.71.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-4d8a69a2591d45ebb7a926f3c04a2dfe
Found initrd image: /boot/initramfs-0-rescue-4d8a69a2591d45ebb7a926f3c04a2dfe.img
done
# 3. 重启系统验证超时时间生效
[root@server ~ 10:46:03]# reboot
2.3 自定义内核启动参数
通过 GRUB2 添加 / 修改内核启动参数,示例为将启动日志重定向到 ttyS0 终端:
# 1. 编辑GRUB2配置文件,修改内核参数行
[root@server ~ 11:37:42]# vim /etc/default/grub
# 在GRUB_CMDLINE_LINUX末尾添加console=ttyS0参数
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet console=ttyS0"
# 参数说明:
# - rhgb:启用Red Hat图形化启动界面
# - quiet:减少启动日志输出(仅显示重要信息)
# - console=ttyS0:将启动日志定向到ttyS0终端(tty1无启动消息)
# - debug:(可选)开启内核调试模式,显示完整启动日志
# 2. 重新生成grub.cfg配置文件
[root@server ~ 11:39:01]# grub2-mkconfig -o /etc/grub2.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.71.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-4d8a69a2591d45ebb7a926f3c04a2dfe
Found initrd image: /boot/initramfs-0-rescue-4d8a69a2591d45ebb7a926f3c04a2dfe.img
done
# 3. 重启验证参数生效
[root@server ~ 11:39:31]# reboot
效果如下:

2.4 GRUB2 菜单加密(防止未授权修改启动项)
为 GRUB2 启动菜单添加密码验证,仅授权用户可编辑启动项,步骤如下:
步骤 1:查看用户认证脚本
[root@server ~ 10:17:59]# cat /etc/grub.d/01_users
#!/bin/sh -e
cat << EOF
if [ -f \${prefix}/user.cfg ]; then
source \${prefix}/user.cfg
if [ -n "\${GRUB2_PASSWORD}" ]; then
set superusers="root"
export superusers
password_pbkdf2 root \${GRUB2_PASSWORD}
fi
fi
EOF
步骤 2:生成 PBKDF2 加密密码
[root@server ~ 10:33:47]# grub2-mkpasswd-pbkdf2
输入口令:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.2C20498ADFAFB864AA0A1CDCA555A82FA47DA8034457920BCB8E950A94356332A13C7530C70466260FF8FD68CB5FAF63B439D1FC2169281B477D8F4BB225B207.167FE461FA10769D0A64FB935473D6ED967378116EFCD361796B7941EB4740FB9F96AA49F0090A5B8845097829E6ECACDE7059EFA6F47D8520AF6B4C929BF1C7.
步骤 3:写入密码到 GRUB2 配置文件
[root@server ~ 10:34:00]# vim /boot/grub2/user.cfg
# 将上述生成的PBKDF2哈希值写入该文件
GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.2C20498ADFAFB864AA0A1CDCA555A82FA47DA8034457920BCB8E950A94356332A13C7530C70466260FF8FD68CB5FAF63B439D1FC2169281B477D8F4BB225B207.167FE461FA10769D0A64FB935473D6ED967378116EFCD361796B7941EB4740FB9F96AA49F0090A5B8845097829E6ECACDE7059EFA6F47D8520AF6B4C929BF1C7.
步骤 4:生效配置并验证
[root@server ~ 10:35:56]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.71.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-4d8a69a2591d45ebb7a926f3c04a2dfe
Found initrd image: /boot/initramfs-0-rescue-4d8a69a2591d45ebb7a926f3c04a2dfe.img
done
[root@server ~ 10:36:31]# reboot
加密效果验证
- 系统启动到 GRUB2 菜单时,按
e键尝试编辑启动项; - 需输入用户名(root)和设置的密码才能进入编辑界面;

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)