一、业务背景
项目是边端的IOT物联网项目,由于历史原因,项目当时采用的是Vmware Workstation软件,在软件上部署一个Linux系统,即CentOs,宿主机是Window系统,项目正常运行了两年多,一天,项目企业微信告警服务中断,上去看,进入服务器看到XFS文件系统检测到严重的数据损坏,为防止数据进一步破坏,系统进入了紧急模式;二、系统报错日志
报错日志:
XFS (dm-0): Internal error XFS_WANT_CORRUPTED_GOTO at line 1700 of file fs/xfs/libxfs/xfs_alloc.c. XFS (dm-0): Internal error xfs_trans_cancel at line 993 of file fs/xfs/xfs_trans.c. XFS (dm-0): Corruption of in-memory data detected. Shutting down filesystem XFS (dm-0): Please umount the filesystem and rectify the problem(s) XFS (dm-0): Failed to recover intents日志解析:
dm-0:这通常是 LVM 逻辑卷(/ 根分区) 的设备名。
Corruption of in-memory data detected:XFS 文件系统在内存中发现了数据损坏,为了避免扩大损坏,强制卸载 / 停止了文件系统。
Failed to recover intents:XFS 的日志 / 事务恢复失败,无法正常挂载文件系统。
系统提示:Please umount the filesystem and rectify the problem(s),意思是 “请卸载文件系统并修复问题”。
三、问题原因:
1、意外断电|强制关机,XFS日志事务没写完,导致元数据损坏。
2、磁盘硬件故障:坏道、磁盘控制器问题,RAID异常。
3、内存故障:内存不稳定导致文件系统元数据写入错误。
4、内核|驱动 Bug:老版本 CentOS 内核对某些硬件|虚拟化平台的兼容性问题
因为是虚拟机,所以硬件的问题基本都排除了;在虚拟机里出现 XFS 报错,硬件本身出问题的概率很低,更常见的是这些:
1、虚拟机意外断电/快照异常:比如宿主机崩溃、强制关闭虚拟机、快照创建/回滚失败,导致虚拟磁盘(vmdk/qcow2)里的 XFS 文件系统损坏。
2、虚拟磁盘空间不足:磁盘写满导致 XFS 事务日志无法完成,直接损坏元数据。
3、虚拟化平台兼容性问题:比如 KVM 的旧版本 QEMU、VMware 特定硬件版本,和 CentOS 的内核 / XFS 驱动有兼容性 bug。
4、宿主机存储底层问题:宿主机的磁盘 IO 卡顿、存储阵列故障,导致虚拟机磁盘写入中断。
##四、问题修复:
1、创建当前虚拟机的快照,避免修复失败
Vmware Workstation -> 虚拟机 -> 快照 -> 拍摄快照
点击保存即可。
2、使用系统镜像进入救援模式
2.1 准备和虚拟机里面一样版本的CentOS 镜像文件,因为我的系统是CentOS-7-x86_64-DVD-2009.iso这个版本的,所以我就下的这个版本;因为CentOS官网没有维护这个镜像了,所以从其他地方下载了这个版本
截至2026-04-29这个地址都是可以下载的:华为镜像仓库:https://mirrors.huaweicloud.com/centos/7/isos/x86_64/ 如果是其他版本,也可以从这里进行查找下载;
2.2 这里汇总几个可以下载的镜像仓库
阿里云镜像库:https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/
中国科学技术大学镜像库:https://mirrors.ustc.edu.cn/centos-vault/7.9.2009/isos/x86_64/
华为镜像库:https://mirrors.huaweicloud.com/centos/7/isos/x86_64/
2.3 修改虚拟机设置
2.3.1 虚拟机关机
2.3.2 虚拟机设置:把CD/DVD驱动设置挂载为刚才的iso镜像,并调整启动顺序,让虚拟机从CD/DVD优先启动
2.3.3 勾选:启动时连接
2.3.4 选项->高级->BIOS
2.3.5 保存,重新开机
3、系统进不了救援模式,直接按e进入命令行编辑
3.1 找到linux16开头的行;
3.2 把ro改成rw
3.3 在行尾加:init=/sysroot/bin/sh
3.4 ctrl+X 启动,进入紧急shell
4、在shell里面进行修复
4.1 把文件系统重新挂载为可读写:
mount -o remount,rw /
4.2 直接执行修复命令,报错 dm-0,根分区就是这个路径
xfs_repair /dev/dm-0
4.3 上一步提示错误,并没有提示repair complete,执行强制修复
xfs_repair -L /dev/dm-0
4.4 提示done,直接重启系统:reboot -f
5、重新看到重新进入到登录界面,系统修复成功
6、查看原部署好的docker,以及docker容器,都已经正常恢复启动,系统修复完成。