前段时间,客户一台kylinOS的虚拟机没响应了,登录控制台看到是这个画面,表示元数据(metadata) 损坏,xfs强行关闭了文件系统。

客户重启虚拟机后恢复访问了,但不知道元数据损坏的隐患是否还在?
先理清几个概念
元数据是什么?描述数据的数据,是整个文件系统的“地图”,它描述了所有文件和目录的结构、空间分配、inode、B+树、日志位置等信息。
元数据损坏什么意思?是它描述的不对,跟磁盘上实际数据不符,就像地图不能真实反映地形一样。
元数据损坏为何强行shutdown文件系统?这是xfs处理策略,一致性优先,避免扩大损失范围;它不同与ext4,ext4是可用性优先,会继续运行,风险是进一步损坏。
元数据什么时候会检查是否损坏?xfs在mount和I/O操作阶段会检查元数据损坏与否。
为何内存要缓存元数据?是全部元数据吗?这是OS为了提升读写性能。不是全部,这个数据量大,全部缓存不经济。
再回到客户疑问。因为要排查隐患,需要借助xfs_repair对文件系统最全面扫描,前提是分区是在umount状态,而dm-0对应的是根分区,因此只能停机才能进行。
出现元数据损坏,有两种情形,一种只是内存中的元数据损坏,磁盘中元数据正常。造成原因比较复杂,可能是总线传输问题,也可能是内存硬件和OS或驱动程序问题。但这种出现概率小,chatgpt给出的是10%。另一种情形就是磁盘中的元数据本身就有问题,I/O操作阶段检查出损坏的。遇到这种错误,正确的做法就是重启进入单用户或救援模式,umount分区,借助xfs_repair做全面扫描修复。
具体步骤,以虚拟化环境和OS kylin v10为例。
一、操作前准备
为虚拟机创建 带内存的快照,必要时可快速恢复系统状态。(注意:这是虚拟机能正常开机的情况,若xfs的根分区已无法挂载,开机就就进入紧急模式,则输入root密码回车,直接跳到第三步)
二、kylin OS 进入救援模式
- 虚拟机配置CD/DVD连接kylin安装镜像
- 重启后,按ECS进入启动菜单,选择CD/DVD
- Troubleshooting → Rescue a Kylin system
- 加载后,直接enter回车进入shell界面
三、确认根分区
输入blkid,回车查看分区
通常采用lvm管理的根分区是/dev/mapper/klas-root
四、使用 xfs_repair -n 检查有无数据损坏
xfs_repair -n /dev/mapper/klas-root
有损坏则用xfs_repair -v 修复
xfs_repair -v /dev/mapper/klas-root
修复完,建议再检查下,看是否修复好了(可选)
xfs_repair -n /dev/mapper/klas-root
五、退出救援模式并重启系统
reboot
六、遇到问题
如果修复失败或数据丢失,可通过 之前创建的快照 恢复虚拟机状态。
2万+

被折叠的 条评论
为什么被折叠?



