文件系统损害会导致终端无法进入操作系统,这种情况常见于操作系统异常断电后重启。
例如CentOS 7的服务器意外断电后文件系统损坏,重启后无法进入操作系统,而是进入了Emergency模式。运行journalctl
命令,可能会看到类似如下的关键报错信息:
Failed to recover EFIs
:这个报错信息表明EFI(可扩展固件接口)系统分区存在问题,可能是EFI分区损坏。Failed to mount /sysroot
:/sysroot
是在启动过程的早期阶段挂载系统根文件系统的位置。如果系统无法挂载此目录,通常表示根文件系统存在问题。Dependency failed for initrd Root File System
:这个信息意味着初始RAM磁盘(initrd)无法加载必要的驱动程序和模块以正确挂载根文件系统。Dependency failed for Reload Configuration from the Real Root
:这个信息也是说明无法访问根文件系统。task mount:2744 blocked for more than 120 seconds
:这条消息说明有一个进程阻塞了,这可能是由于文件系统或硬件问题引起的。
由于是意外掉电导致服务器异常关闭,考虑到可能是文件系统出现了损坏,导致无法进入操作系统。
文件系统损坏无法进入操作系统故障的解决步骤一般分为三步:
- 通过LiveCD等方式进入第三方操作系统
- 识别故障文件系统分区
- 根据文件系统类型运行相应修复命令尝试修复文件系统
通过LiveCD等方式进入第三方操作系统
以CentOS 7为例,通过CentOS 7的安装镜像,启动后进入安装程序导航,选择进入Troubleshooting
,在提示是否寻找本地已安装的Linux操作系统,并把根目录挂载到/mnt/sysimage
时,选择1) Continue
。之后会进入Shell。
识别故障文件系统分区
通过fdisk -l
、lsblk
、blkid
等命令,通过分区大小、文件系统类型等特征识别要修复的文件系统分区。
修复文件系统
不同的文件系统类型需要使用不同的修复命令。
对于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
命令尝试挂载文件系统分区,修复成功后应该能够成功挂载文件系统,不会报错。