e2fsck 是什么
e2fsck 是 ext2/ext3/ext4 文件系统的检查与修复工具,也叫 fsck.ext4。它读取超级块、块位图、inode 位图与日志,比对元数据的一致性,发现不一致时按你的回答决定修复还是保留。它的硬性前提是:文件系统必须已卸载,或至少只读挂载——对正在写入的 ext4 跑修复,会让本就破碎的元数据变得更碎。
基本信息
| 用途 | 检查并修复 ext2/ext3/ext4 文件系统的不一致 |
|---|---|
| 语法 | e2fsck [选项] 设备;日常也可用 fsck 前端按 fstab 类型自动调用 |
| 所属软件包 | e2fsprogs(多数系统默认自带) |
| 常用选项 | -n 只检查、-f 强制全量、-y 全部回答 yes、-p 自动修复安全项、-C 显示进度 |
典型使用场景
- 非正常关机后:掉电、内核崩溃后挂载报错,卸载后跑一次检查
- 挂载报错:Superblock checksum does not match 之类的提示,需要判断是数据损坏还是意外断电
- 缩容前置步骤:用 resize2fs 缩小文件系统前必须离线检查一遍,否则缩容失败率很高
- 磁盘异常告警后:dmesg 里出现 ext4 错误、I/O 错误时,确认文件系统是否已受损
- 例行巡检:在不影响业务的窗口内对数据盘做只读检查(-n),记录退出码
标准修复流程
标准修复流程
umount /data # 第一件事:卸载
fsck -n /dev/sdb1 # -n 只检查不修改,先读报告
blkid /dev/sdb1 # 确认类型确实是 ext4 而不是 xfs
e2fsck -f -y /dev/sdb1 # -f 强制全量检查,-y 全部回答 yes
mount /data && df -h /data # 挂载验证
dmesg | tail -n 20 # 看内核侧是否还有 I/O 报错超级块损坏时的恢复线索
超级块损坏时的恢复线索
dumpe2fs /dev/sdb1 | grep -i superblock # 列出备份超级块位置(不要照抄别人的数字)
e2fsck -b 32768 /dev/sdb1 # 用备份超级块尝试修复(数字以实际输出为准)
e2fsck -p /dev/sdb1 # 自动修复安全项,需要人工判断时返回码 4e2fsck 退出码读法
| 退出码 | 含义 | 下一步 |
|---|---|---|
| 0 | 无错误 | 可以正常挂载 |
| 1 | 发现并已修复错误 | 再次运行确认返回 0 |
| 2 | 已修复,需要重启 | 按提示重启后再检查 |
| 4 | 发现错误但未修复 | 需人工介入,检查硬件与备份 |
| 8 | 操作错误 | 命令参数或设备有问题,未做任何修改 |
根文件系统在开机阶段由 systemd 的 fsck 服务按 fstab 的 pass 值检查,两种模式可以通过内核参数干预:fsck.mode=force 强制检查、fsck.mode=skip 跳过检查。旧系统上 touch /forcefsck 再重启是传统做法,较新的 systemd 环境不一定生效,用法以本机 systemd 版本行为为准。
检查大容量盘即使日志干净也建议预留维护窗口:-f 会全量扫描元数据,几 TB 的盘跑几十分钟很常见。