背景说明

在一次 Linux 虚拟机运行过程中,由于操作需要,对虚拟机执行了强制关机(相当于物理断电)。随后再次启动虚拟机时,系统在引导阶段进入了 ext4 文件系统自动检查(fsck),并在控制台输出大量类似以下信息:

  • recovering journal
  • Clearing 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 过程中再次中断系统。

Leave a Reply

Your email address will not be published. Required fields are marked *