文件系统损害会导致终端无法进入操作系统,这种情况常见于操作系统异常断电后重启。

例如CentOS 7的服务器意外断电后文件系统损坏,重启后无法进入操作系统,而是进入了Emergency模式。运行journalctl命令,可能会看到类似如下的关键报错信息:

  1. Failed to recover EFIs:这个报错信息表明EFI(可扩展固件接口)系统分区存在问题,可能是EFI分区损坏。
  2. Failed to mount /sysroot/sysroot 是在启动过程的早期阶段挂载系统根文件系统的位置。如果系统无法挂载此目录,通常表示根文件系统存在问题。
  3. Dependency failed for initrd Root File System:这个信息意味着初始RAM磁盘(initrd)无法加载必要的驱动程序和模块以正确挂载根文件系统。
  4. Dependency failed for Reload Configuration from the Real Root:这个信息也是说明无法访问根文件系统。
  5. task mount:2744 blocked for more than 120 seconds:这条消息说明有一个进程阻塞了,这可能是由于文件系统或硬件问题引起的。

由于是意外掉电导致服务器异常关闭,考虑到可能是文件系统出现了损坏,导致无法进入操作系统。

文件系统损坏无法进入操作系统故障的解决步骤一般分为三步:

  1. 通过LiveCD等方式进入第三方操作系统
  2. 识别故障文件系统分区
  3. 根据文件系统类型运行相应修复命令尝试修复文件系统

通过LiveCD等方式进入第三方操作系统

以CentOS 7为例,通过CentOS 7的安装镜像,启动后进入安装程序导航,选择进入Troubleshooting,在提示是否寻找本地已安装的Linux操作系统,并把根目录挂载到/mnt/sysimage时,选择1) Continue。之后会进入Shell。

识别故障文件系统分区

通过fdisk -llsblkblkid等命令,通过分区大小、文件系统类型等特征识别要修复的文件系统分区。

修复文件系统

不同的文件系统类型需要使用不同的修复命令。

对于XFS类型的文件系统,使用xfs_repair命令进行修复:

xfs_repair <文件系统分区路径>

例如:

xfs_repair /dev/mapper/centos-root

如果运行修复命令后有如下的报错信息:

ERROR: The filesystem has valuable metadata changes in a log which needs to be replayed. Mount the filesystem to replay the log, and umount it before re-running xfs_repair. If you are unable to mount the filesystem, then use the -L option to destroy the log and attempt a repair.

按照报错信息的提示尝试添加-L选项运行命令

xfs_repair -L <文件系统分区路径>

对于ext4类型的文件系统,使用e2fsck命令进行修复:

e2fsck -f <文件系统分区路径>

这里-f选项的作用是忽略ext4文件系统的clean标志(在文件系统被正常卸载时,会设置该标志,表示文件系统被正常卸载,没有检测到任何错误),对文件系统进行检查,修复潜在的不一致性和故障。

修复完成后可以使用mount命令尝试挂载文件系统分区,修复成功后应该能够成功挂载文件系统,不会报错。