服务器重启后卡在 dracut emergency shell,屏幕上反复提示 unexpected inconsistency、run fsck manually,或者出现 superblock could not be read,这基本就是文件系统元数据损坏的特征。遇到这种情况不用急着重装系统,可以先进入单用户模式或救援模式,手动挂载分区并执行修复。单用户模式只初始化最小运行环境,不会因为某个分区挂载失败而中断启动,是处理文件系统故障的主要入口。

下面围绕 CentOS 常见的两个大版本体系,说明怎么进入单用户模式,以及针对 ext4 和 XFS 两种文件系统的具体修复命令。
先判断故障范围:单用户模式还是救援模式
单用户模式与救援模式虽然都能拿到 root shell,但适用场景不同。单用户模式由本地引导加载器直接进入,只启动 init 的最小目标,网络服务和多数守护进程不会运行;它的根文件系统通常已经以只读方式挂载,适合 / 分区轻微错误、fstab 配置错误导致启动流程中断的情况。
救援模式则需要从 CentOS 安装 ISO 或 PXE 引导,完全脱离本地系统启动,本地根分区不会自动挂载。如果根分区超级块损坏严重、LVM 元数据异常,或者只要挂载根分区就报错,救援模式是更稳妥的选择,因为可以保证修复工具运行的环境不受损坏分区影响。
在实际运维中,建议优先尝试单用户模式,因为进入速度快,不需要准备启动介质;当单用户模式也无法加载根文件系统时,再切换到救援模式进行处理。
CentOS 7/8 在 GRUB2 下进入单用户模式并修复
CentOS 7 和 8 使用 GRUB2 加 systemd,进入方式与老版本不同。开机到 GRUB2 菜单时选中要启动的内核,按 e 进入编辑状态,找到以 linux16 或 linux 开头的内核命令行。通常这行末尾有 ro crashkernel=auto rhgb quiet。把 ro 改成 rw,并在行末追加 rd.break console=tty0,然后按 Ctrl+x 启动。
rd.break 的作用是让 initramfs 在挂载 sysroot 后立即中断,不继续执行 systemd 初始化,这样就能得到一个最小 shell。此时 /sysroot 一般已经以只读方式挂载,先不要直接执行 chroot。如果根分区是 ext4 或 ext3,可以用 lsblk 确认设备名,然后对底层设备执行 fsck:
# 查看块设备 lsblk # 对 ext4 根分区执行强制修复 fsck -y /dev/mapper/centos-root # 如果 /boot 是独立 ext4 分区 fsck -y /dev/sda1
如果根分区是 XFS 文件系统,那么 fsck 不是合适的选择。CentOS 7 和 8 默认根分区常为 XFS,fsck.xfs 只是占位脚本,并不会真正扫描元数据。XFS 必须使用 xfs_repair,而且文件系统不能处于挂载状态。先在 rd.break 环境中确认 /sysroot 未挂载或先卸载:
# 如果已经挂载,先卸载 umount /sysroot # 对 XFS 根分区先做只读检查 xfs_repair -n /dev/mapper/centos-root # 确认无挂载后执行修复 xfs_repair /dev/mapper/centos-root
修复完成后,如果需要修改 fstab 或恢复 SELinux 标签,再把 sysroot 挂载为可写并 chroot 进去:
mount -o remount,rw /sysroot chroot /sysroot # 修改 fstab 后创建自动重打标签标志 touch /.autorelabel exit exit
最后重启系统。如果文件系统损坏已经修复,CentOS 通常能正常进入多用户目标。若仍然卡住,需要查看 journalctl 或 dmesg 输出,确认是否还有其他分区损坏或 systemd unit 失败。
CentOS 6 在 GRUB 下进入单用户模式并修复
CentOS 6 使用传统 GRUB 和 SysVinit,操作路径更短。开机在 GRUB 菜单按 e,选中 kernel 那一行再按 e 编辑,在行末追加 single 或 1,回车后按 b 启动。系统会进入单用户模式并直接给出 root shell,不需要输入 root 密码,部分定制发行版可能要求密码。
进入单用户模式后,根分区通常以只读方式挂载,先把根分区重新挂载为可写,再根据文件系统类型执行修复。例如 /dev/sda1 是 ext4:
mount -o remount,rw / fsck -y /dev/sda1
如果 /dev/sda1 是 XFS,则必须先卸载根分区才能执行 xfs_repair。由于单用户模式下根分区已经挂载,直接执行 xfs_repair 会失败,需要临时用救援模式或 Live CD 引导后卸载根分区再修复。这也是早期 CentOS 6 默认 ext4 时操作简单、后来改用 XFS 后修复步骤变化的一个典型差异。
修复完成后可以检查 /etc/fstab 中的 UUID 是否与实际分区一致,使用 blkid 命令核对,避免因为克隆磁盘或分区表重建导致 UUID 变化而再次进入单用户模式。
修复后的确认与预防
文件系统修复完成后不要立即投入生产,需要先确认分区结构、挂载参数和 SELinux 上下文是否正常。执行 df -h 看挂载情况,执行 cat /proc/mounts 核对根分区是否以 rw 挂载。如果之前在 chroot 环境中创建了 /.autorelabel,重启时 SELinux 会重新给文件打标签,这个过程可能持续几分钟,不要强制断电。
对于生产服务器,建议把根分区和 /boot 分区的文件系统类型、UUID 记录在运维文档中。磁盘出现坏道或老化时,只靠 fsck 或 xfs_repair 修复只是暂时恢复,硬件问题可能会反复触发损坏。可以用 smartctl -a /dev/sda 查看磁盘健康状态,或使用 badblocks 做坏道检测。
# 查看磁盘 SMART 信息 smartctl -a /dev/sda # 只读检查 ext4 文件系统 fsck -n /dev/sda1
另外,不建议把根文件系统设置为 XFS 后仍然习惯性使用 fsck,这会让很多初学者误以为已经修复。熟悉 ext4 与 XFS 的差异,能在故障现场少走弯路。遇到根分区超级块损坏且 xfs_repair 无法完成时,再考虑使用救援模式挂载备份盘或用 xfs_metadump 保留现场,联系数据恢复团队处理。
CentOS文件系统损坏单用户模式fsck修复修改时间:2026-09-27 09:00:25