背景说明
在一次 Linux 虚拟机运行过程中,由于操作需要,对虚拟机执行了强制关机(相当于物理断电)。随后再次启动虚拟机时,系统在引导阶段进入了 ext4 文件系统自动检查(fsck),并在控制台输出大量类似以下信息:
recovering journalClearing orphaned inode ...
同时,系统在该阶段停留时间较长,给人以“卡住”的直观感觉。
现象描述
引导过程中,fsck.ext4 输出了大量 orphaned inode(孤儿 inode) 清理信息,持续时间明显长于平时正常启动。
但在日志中可以观察到:
- 未出现
I/O error - 未出现
EXT4-fs error - fsck 在持续输出或有磁盘 I/O 活动
- 最终文件系统被标记为
clean
原因分析
1. 强制关机导致文件系统处于未一致状态
ext4 是日志文件系统,但在以下情况下仍会留下不完整状态:
- 文件正在创建 / 删除
- 元数据尚未完全提交
- 目录项与 inode 关联未完成
虚拟机被强制关机时,这些操作会被中断。
2. orphaned inode 的来源
orphaned inode 是指:
- inode 已分配
- 但未能正确挂载到目录树
- 或删除流程中断,未完全释放
在包含 Web 服务、数据库、同步程序(如文件同步系统)等场景下,这类 inode 数量可能较多。
3. fsck 运行缓慢的技术原因
fsck.ext4 运行缓慢并不意味着异常,主要原因包括:
- 单线程执行
- 大量 inode 逐一校验
- 随机 I/O 密集
- 虚拟机磁盘(如 qcow2)本身性能有限
- 底层磁盘为 HDD 或存在 I/O 竞争
fsck 在修复过程中几乎不会提供进度指示,因此容易被误认为“卡死”。
预计耗时范围
在类似环境下,fsck 的常见耗时如下:
| 场景 | 耗时范围 |
|---|---|
| 数据量较小 | 5–15 分钟 |
| 普通服务器虚拟机 | 10–30 分钟 |
| 数据量较大 / inode 多 | 30–60 分钟 |
| 极端情况(仍属正常) | 1–2 小时 |
只要磁盘仍有 I/O 活动,fsck 仍在正常运行。
如何判断是否异常
正常情况特征
- 磁盘 I/O 持续存在
- CPU 有占用(哪怕较低)
- fsck 最终完成并标记为
clean
需要警惕的情况
- fsck 超过 90 分钟且 完全无 I/O
- 内核日志中出现 I/O error
- 每次启动都进入 fsck
- 即使正常关机也反复出现 orphaned inode
正确处理方式
正在 fsck 时
- 不要再次强制关机
- 等待 fsck 完成是最安全选择
- 中途断电反而可能扩大损坏范围
事后建议
- 尽量使用 正常关机(ACPI shutdown)
- 避免在关键服务运行时强制断电
- 对重要虚拟机定期做快照或备份
- 如频繁发生,可进一步检查宿主机磁盘健康状态
结论
本次 fsck 卡顿现象属于:
虚拟机强制关机后,ext4 文件系统进行完整一致性修复的正常行为
文件系统在 fsck 完成后处于一致、可用状态,不构成数据损坏或磁盘故障。
唯一需要避免的是:
在 fsck 过程中再次中断系统。