系统起不来时屏幕上的报错往往只给出一句零散线索Operating System not found、Give root password for maintenance。本文按故障位置分成四类来讲/etc/fstab写错导致的挂载失败、GRUB2 配置的修改与加固、GRUB2 引导程序与引导文件损坏后的救援修复、以及 LUKS 磁盘加密与 initramfs 的作用。文中命令名均标注英文全称完整清单见文末《附命令英文全称速查表》。本文概要项目内容文章主题/etc/fstab写错导致的三类挂载失败、GRUB2 配置的修改与菜单加固、GRUB2 引导程序与引导文件损坏后的救援修复以及 LUKS 磁盘加密与 initramfs 的作用所属类别Linux 系统管理 → 启动与引导 → GRUB2 与故障修复知识关键字/etc/fstab·xfs_repair· emergency mode ·grub2-install·grub2-mkconfig·/etc/default/grub·grub2-mkpasswd-pbkdf2· LUKS ·cryptsetup·/etc/crypttab一、/etc/fstab 引起的启动问题下面三个故障共用同一套环境一块 10 GiB 的/dev/sdb1XFS持久化挂载到/data01。# 环境准备[rootzhb-m1 ~]# parted /dev/sdb mklabel msdos[rootzhb-m1 ~]# parted /dev/sdb unit MiB mkpart primary 1 10241[rootzhb-m1 ~]# mkfs.xfs /dev/sdb1[rootzhb-m1 ~]# mkdir /data01[rootzhb-m1 ~]# echo /dev/sdb1 /data01 xfs defaults 0 0 /etc/fstab[rootzhb-m1 ~]# mount -a[rootzhb-m1 ~]# df -h /data01文件系统 容量 已用 可用 已用% 挂载点 /dev/sdb1 10G 33M 10G1% /data011.1 故障 1挂载点不存在[rootzhb-m1 ~]# umount /data01[rootzhb-m1 ~]# rmdir /data01重启后可以正常进入系统挂载点会被自动创建[rootzhb-m1 ~]# df -h /data01文件系统 容量 已用 可用 已用% 挂载点 /dev/sdb1 10G 33M 10G1% /data01结论挂载点目录缺失不影响启动systemd 会代为创建。1.2 故障 2设备名称错误[rootzhb-m1 ~]# vim /etc/fstab# 把原先的 sdb1 改成 sdb2/dev/sdb2 /data01 xfs defaults00重启后启动过程找不到该设备按 Esc 可看启动过程1 分 30 秒超时后进入 emergency 模式进行修复。把条目改成正确的值或直接注释掉然后输入exit继续启动。1.3 故障 3文件系统被破坏[rootzhb-m1 ~]# dd if/dev/zero of/dev/sdb1 bs1M count1重启后系统尝试自动修复文件系统修复失败则提示进入 emergency 模式输入 root 密码进入 emergency 模式后修复[rootzhb-m1 ~]# xfs_repair /dev/sdb1修复完成后输入exit正常启动系统。1.4 xfs_repair 用法速查表参数含义英文原意xfs_repair修复受损的 XFS 文件系统XFSrepair/dev/sdb1目标设备位置参数也可以是磁盘镜像文件-n只检查、不做任何修改no modify先跑它看损坏范围-L强制清零日志Log日志里有未落盘数据时会丢这部分数据是最后的手段-f目标是普通文件而非块设备file修镜像文件时用-v显示详细信息verbose⚠️注意xfs_repair必须作用在未挂载的文件系统上挂载中修复会进一步损坏数据。常规流程是先-n只读检查评估损坏程度确认后再正式修复-L会丢弃日志中尚未落盘的数据只在常规修复失败、且能接受这部分损失时才用。二、GRUB2 配置2.1 grub2 配置文件路径作用/boot/grub2主配置所在目录含grub.cfg、grubenv、user.cfg/etc/grub2.cfg指向/boot/grub2/grub.cfg的软链接不要直接修改它由系统自动生成EFI 启动方式对应/etc/grub2-efi.cfg/etc/grub.d/存放多个数字开头的脚本按从小到大顺序执行例如00_header会读取/etc/default/grub生成基本开机界面配置/etc/default/grub定义 GRUB 启动变量菜单超时时间、内核参数等/boot/grub2/grubenv设定默认启动条目saved_entry要自定义grub.cfg做法是改/etc/grub.d/里的脚本和/etc/default/grub再用grub2-mkconfig生成。2.2 grub2-mkconfig 用法速查表参数含义英文原意grub2-mkconfig扫描系统与/etc/default/grub生成 GRUB2 配置GRUB2makeconfig-o FILE把结果写到指定文件output正式生效必加不加-o结果打到标准输出用于先预览再决定2.3 修改 grub 菜单超时时间[rootzhb-m1 ~]# vim /etc/default/grub# 修改 GRUB_TIMEOUT 为 10GRUB_TIMEOUT10# 生成配置并重启验证[rootzhb-m1 ~]# grub2-mkconfig -o /etc/grub2.cfgGenerating grub configurationfile...done[rootzhb-m1 ~]# reboot2.4 修改内核启动参数[rootzhb-m1 ~]# vim /etc/default/grubGRUB_CMDLINE_LINUXrd.lvm.lvcentos/root rd.lvm.lvcentos/swap rhgb quiet consolettyS0[rootzhb-m1 ~]# grub2-mkconfig -o /etc/grub2.cfg[rootzhb-m1 ~]# reboot几个常用参数的含义参数作用rhgb启用图形化启动界面Red Hat Graphical Bootquiet减少启动日志输出只显示重要信息去掉它就显示完整日志consolettyS0把启动信息输出到串口 ttyS0导致 tty1 上看不到启动消息ro/rw只读 / 读写挂载根文件系统ro启动后会由系统自动切成读写root指定根文件系统所在设备如root/dev/sda1crashkernelauto预留内存供内核崩溃时转储net.ifnames0禁用网卡一致性命名ens33改回传统eth0biosdevname0配合net.ifnames0彻底禁用基于 BIOS 的设备命名加上consolettyS0后重启tty1 上启动过程变为一片空白效果如下2.5 查看全部内核启动参数所有内核参数的详细说明都在内核文档里CentOS 7 安装kernel-doc包即可获得该包非默认安装[rootzhb-m1 ~]# yum install kernel-doc -y[rootzhb-m1 ~]# less /usr/share/doc/kernel-doc-3.10.0/Documentation/admin-guide/kernel-parameters.txt文档路径中的版本号用uname -r查看实际值替换。2.6 grub 菜单加密不加保护时任何能接触到控制台的人都能按 e 改内核参数、进而拿到 root shell。给 GRUB2 菜单加口令可以堵住这条路。# 查看 /etc/grub.d/01_users 脚本它读取 user.cfg 里的 GRUB2_PASSWORD 并设置 superusers[rootzhb-m1 ~]# cat /etc/grub.d/01_users# 生成 PBKDF2 口令哈希[rootzhb-m1 ~]# grub2-mkpasswd-pbkdf2Enter password: redhat Reenter password: redhat PBKDF2hashof your password is grub.pbkdf2.sha512.10000.649DDB2FE50D7D3A0DF829A21887FFD9FB7CC14F...# 写入 /boot/grub2/user.cfg[rootzhb-m1 ~]# vim /boot/grub2/user.cfgGRUB2_PASSWORDgrub.pbkdf2.sha512.10000.649DDB2FE50D7D3A0DF829A21887FFD9FB7CC14F...# 生成配置并重启验证[rootzhb-m1 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg[rootzhb-m1 ~]# reboot重启后在启动菜单按 e会要求输入用户名和密码此处为 root / redhat通过后才允许编辑加密后要解除删掉/boot/grub2/user.cfg或清掉其中的GRUB2_PASSWORD再重新grub2-mkconfig生成一次配置即可。2.7 默认启动条目# 查看有哪些启动条目[rootzhb-m1 ~]# grep -o ^menu.*CentOS L.*Core) /etc/grub2.cfgmenuentryCentOS Linux (3.10.0-1160.71.1.el7.x86_64) 7 (Core)menuentryCentOS Linux (0-rescue-43c2aa8a5c024d90af4e8da0b3881cb2) 7 (Core)# 修改默认启动条目把 saved_entry 改成相应条目[rootzhb-m1 ~]# vim /boot/grub2/grubenvsaved_entryCentOS Linux(0-rescue-43c2aa8a5c024d90af4e8da0b3881cb2)7(Core)# 生成配置并重启验证[rootzhb-m1 ~]# grub2-mkconfig -o /etc/grub2.cfg[rootzhb-m1 ~]# reboot三、GRUB2 故障处理3.1 MBR 组成回顾主引导扇区由三部分组成引导程序446 字节硬盘启动时把系统控制权转给分区表中的某个操作系统。磁盘分区表项DPT4 项 × 16 字节。结束标志2 字节固定值AA55十六进制。3.2 故障 1grub 引导程序故障模拟故障——只清掉前 446 字节的引导程序不动分区表[rootzhb-m1 ~]# dd if/dev/zero of/dev/sda bs1 count446重启后系统无法从硬盘启动会尝试用其他设备如 PXE 网络启动解决思路用光盘启动重新安装引导程序。开机从光盘启动选择Troubleshooting。选择Rescue a CentOS system。稍等进入选择界面选1。搜索到系统后提示已挂载在/mnt/sysimage按回车继续。切换 root 目录并确认根文件系统是读写挂载sh-4.2# chroot /mnt/sysimagebash-4.2# mount | grep root/dev/mapper/centos-root on /typexfs(rw,relatime,seclabel,attr2,inode64,noquota)确认系统启动分区所在磁盘安装引导程序bash-4.2# grub2-install /dev/sdaInstallingfori386-pc platform. Installation finished. No error reported.输入exit两次重启系统第一次退出 chroot 环境第二次退出系统。bash-4.2# exitsh-4.2# exit⚠️注意grub2-install的目标必须是整块磁盘/dev/sda不能写成分区/dev/sda1——引导程序要写进主引导扇区的前 446 字节那是分区之外的区域。写错位置不会报致命错误但系统依然起不来。3.3 故障 2引导文件丢失[rootzhb-m1 ~]# mv /boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64{,.ori}[rootzhb-m1 ~]# reboot重启后系统无法启动提示内核文件找不到解决思路用光盘启动取得 root shell再从其他系统复制、或从 rpm 包中提取相应文件恢复# 进入救援环境后用 rpm 提取示例bash-4.2# rpm -ivh --force /mnt/cdrom/Packages/kernel-3.10.0-1160.71.1.el7.x86_64.rpm恢复后输入exit两次继续启动系统。3.4 故障处理总结用光盘启动的目的是把硬盘上的系统挂载到内存中再进行修复。除光盘外也可以用 U 盘启动盘启动或把故障磁盘拔下来挂载到其他正常的系统上修复。四、磁盘加密与 initramfs 的作用4.1 防止磁盘被拿走后数据被读取在 CentOS 7 中用LUKSLinux Unified Key SetupLinux 统一密钥设置加密磁盘或分区。LUKS 是 Linux 下主流的磁盘加密标准通过加密整个分区或逻辑卷来保护数据。在系统安装配置安装位置时可以直接勾选加密加密后的效果系统启动时必须输入密码才能读取硬盘中的数据。用救援环境修复磁盘时同样需要输入密码才能挂载。该加密不会加密 GRUB2 系统选择菜单也就是/boot目录中的数据仍然可读。4.2 手动加密数据盘以加密/dev/sdb1为例。LUKS 依赖cryptsetup工具它不在最小化安装的默认软件包里需要先装# 额外安装联网[rootzhb-m1 ~]# yum install cryptsetup -y# 离线环境先取到 rpm 包再本地安装[rootzhb-m1 ~]# rpm -ivh cryptsetup-*.rpmcryptsetup 用法速查表参数含义英文原意cryptsetup管理 LUKS 加密设备的工具cryptosetupluksFormat初始化加密分区会清除原有数据LUKSformatopen打开加密分区并映射到/dev/mapper/映射名openclose关闭映射分区恢复不可访问closeluksAddKey给加密设备增加一把密钥口令或密钥文件add key/dev/sdb1加密设备位置参数crypt_disk映射名位置参数--type luks指定 LUKS 版本luks1/luks2type--cipher指定加密算法cipher--key-size指定密钥长度位key size--batch-mode非交互模式适合脚本批量执行batch mode-y以交互方式校验新口令yes完整流程# 1. 初始化警告会覆盖数据需输入 YES 确认随后设置加密口令[rootzhb-m1 ~]# cryptsetup luksFormat /dev/sdb1WARNING!This will overwrite data on /dev/sdb1 irrevocably.# 2. 打开映射验证口令通过后生成 /dev/mapper/crypt_disk[rootzhb-m1 ~]# cryptsetup open /dev/sdb1 crypt_disk# 3. 格式化映射设备[rootzhb-m1 ~]# mkfs.xfs /dev/mapper/crypt_disk# 4. 挂载使用[rootzhb-m1 ~]# mkdir /mnt/encrypted[rootzhb-m1 ~]# mount /dev/mapper/crypt_disk /mnt/encrypted# 5. 卸载并关闭映射分区恢复不可访问[rootzhb-m1 ~]# umount /mnt/encrypted[rootzhb-m1 ~]# cryptsetup close crypt_disk开机自动挂载加密分区# 1. 取 LUKS 分区的 UUID注意取的是 /dev/sdb1 的 UUID不是映射设备的[rootzhb-m1 ~]# blkid /dev/sdb1# 2. 写 /etc/crypttab格式为「映射名 加密分区UUID 密钥文件路径 luks」none 表示启动时手输密码[rootzhb-m1 ~]# echo crypt_disk UUIDxxxx-xxxx-xxxx none luks /etc/crypttab# 3. 写 /etc/fstab[rootzhb-m1 ~]# echo /dev/mapper/crypt_disk /mnt/encrypted xfs defaults 0 0 /etc/fstab若希望开机自动输入密码把密码存进密钥文件如/root/luks_key权限必须设为 600。在crypttab里指定该文件路径再用luksAddKey把它注册给加密设备[rootzhb-m1 ~]# chmod 600 /root/luks_key[rootzhb-m1 ~]# cryptsetup luksAddKey /dev/sdb1 /root/luks_key⚠️注意cryptsetup luksFormat会不可撤销地清除分区原有数据执行前必须确认盘符并做好备份它只在确认提示中输入大写的YES才会继续。另外用密钥文件免交互挂载时密钥文件权限必须设为 600否则cryptsetup会拒绝使用。4.3 为什么 vmlinuz 与 initramfs 要分开职责分离降低维护复杂度。vmlinuz 是压缩后的 Linux 内核镜像提供进程管理、内存管理、基础调度等核心能力是系统运行的骨架需保持通用与稳定、不能频繁改动initramfs 是临时内存文件系统负责补充启动所需的辅助工具——特定磁盘驱动、LVM 逻辑卷模块、LUKS 解密工具等。两者分离后内核升级不必同步改驱动驱动更新也不用重新编译内核。精简内核体积提升启动效率。若把所有硬件驱动都集成进 vmlinuz内核体积会急剧增大延长加载与解压耗时。initramfs 只包含当前硬件环境必需的模块按需定制保持轻量。适配多硬件与场景增强通用性。不同设备的存储差异极大SATA、NVMe、RAID、加密存储内核不可能集成所有驱动。initramfs 可针对不同硬件定制生成同一份 vmlinuz 搭配不同的 initramfs就能适配台式机、服务器与嵌入式设备。4.4 为什么不直接用真正的根文件系统启动缺少驱动无法识别真正的根设备。真正的根文件系统在硬盘或 SSD 上需要对应驱动才能被内核识别而 vmlinuz 作为通用内核只集成了少量通用驱动覆盖不了 NVMe、RAID 控制器等特殊存储。initramfs 先加载这些缺失的驱动模块内核才能识别存储设备并挂载真正的根否则会直接启动失败。无法处理复杂的根目录配置。根文件系统常涉及 LVM 逻辑卷、LUKS 全盘加密、网络存储等配置这些都需要在挂载根目录之前执行额外操作激活逻辑卷、解密分区、连接网络。真正的根还没挂载时这些操作无处执行只能由 initramfs 这个临时系统先跑完对应工具与脚本。保障启动流程的稳定性与安全性。真正的根文件系统可能损坏或挂载异常直接启动会导致系统卡死且难以排查initramfs 作为过渡层可在挂载前做基础检查出问题时还能提供应急修复环境emergency mode 就是这么来的。对加密存储的根目录解密流程放在 initramfs 的临时环境中完成避免解密逻辑直接暴露在核心内核里也提升了启动安全性。 参考资料官方文档 · 中英双语GRUB 2 官方手册cryptsetup(8) 加密设备管理手册xfs_repair(8) XFS 修复工具手册fstab(5) 文件系统挂载表手册dracut(8) initramfs 生成工具手册附命令英文全称速查表命令 / 缩写英文全称 / 原意作用grub2-mkconfigGRUB2makeconfig扫描系统并生成 GRUB2 配置文件grub2-installGRUB2install把 GRUB2 引导程序写入磁盘grub2-mkpasswd-pbkdf2GRUB2makepasswdPBKDF2生成 PBKDF2 口令哈希用于菜单加密xfs_repairXFSrepair修复受损的 XFS 文件系统cryptsetupcryptosetup管理 LUKS 加密设备dracutdracut生成 initramfs 镜像blkidblockid查看块设备的 UUID 与文件系统类型UUIDUniversallyUniqueIDentifier分区 / 设备的唯一标识fstab 中用它代替盘符LUKSLinuxUnifiedKeySetupLinux 统一密钥设置磁盘加密标准PBKDF2Password-BasedKeyDerivationFunction 2口令派生函数GRUB 菜单加密用它生成哈希GRUBGRandUnifiedBootloader启动加载器MBRMasterBootRecord主引导记录DPTDiskPartitionTable磁盘分区表initramfsinitialRAMfilesystem临时内存文件系统存放启动所需驱动与脚本vmlinuzvirtualmemory LINUz压缩后的 Linux 内核镜像总结启动故障按位置排查——/etc/fstab写错先查挂载点与设备名。GRUB2 配置改完必须重新生成grub.cfg引导程序或引导文件损坏就进救援环境重装重建。加密盘的启动依赖 initramfs 里的解密环节。
企业数字化 ERP 产品动态
相关推荐
结论与贡献也要双版本烟测:三列表 + A/B 验收表 千笔-AIWritePaper https://www.aiwritepaper.com
结论与贡献最容易出现两种假完成:一是「贡献条很多」,但主张编号、证据锚点与可口述句对不上;二是结论写得很满,却从未留下「只会堆口号不核证据」的失败对照。claim—evidence—… · 2026/9/24 11:12:52
嵌入式轻量级智能体Agent-C:4KB C语言实现自然语言指令解析与Shell执行 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:12:52
STM32F103C8T6 SWD烧录失败?四线物理连接是关键 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:12:45
DP83848以太网PHY硬件设计与驱动调试实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:44:10
UDS流控三剑客:BS、STmin与FC帧的硬核解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:44:10
GDPR十年实录:从合规工具到隐私技术协议的演进 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:44:04
百视通盒子BesTV R3300-L刷机实战:从驱动识别到固件烧录全指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:44:03
800V车载PFC电感选型实战:从参数陷阱到车规量产 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:43:57
单芯片整合 HDMI1.4 发射 + ARC 音频回传:IT66220 方案落地指南 一、为什么方案商该盯住这颗料做 HDMI 音频类产品的工程师都清楚,传统 ARC 转换器、音频提取器、测试信号源,往往要分别上 HDMI 发射芯片、ARC 接收、音频提取电路,再外挂一颗 MCU 跑控制和 HDCP——BOM 一长串,板子越画越大&… · 2026/9/24 11:43:51
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44