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命令即可继续正常启动。

  1. 然后输入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/秒

重启系统验证

  1. 系统启动过程中尝试修复文件系统,修复失败后提示进入 emergency 模式修复。

在这里插入图片描述

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

在这里插入图片描述

  1. 修复完成后执行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
加密效果验证
  1. 系统启动到 GRUB2 菜单时,按e键尝试编辑启动项;
  2. 需输入用户名(root)和设置的密码才能进入编辑界面;

在这里插入图片描述

Logo

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

更多推荐