fsck 是什么
fsck 不是一个具体的检查程序,而是各文件系统检查器的统一前端:它按 fstab 里的类型或 -t 指定的类型,分发到对应的实现,例如 ext 系走 e2fsck、XFS 走 xfs_repair。开机自检、批量维护、条款式的「卸载后检查」都会经由它。要注意 XFS 是个例外:fsck.xfs 实际上不做检查,真正的工具是 xfs_repair。
基本信息
| 适用平台 | Linux/Unix(util-linux 提供前端,各文件系统提供 fsck.<类型> 实现) |
|---|---|
| 命令语法 | fsck [选项] [-t 类型] 设备... |
| 常用选项 | -A 按 fstab 检查全部 -t 指定类型 -N 只显示将执行什么 -y 全部回答是 -n 全部回答否 -f 强制检查 |
| 退出码 | 按位组合:0 无错误、1 已修复、2 需重启、4 未修复、8 操作错误等 |
| 关键前提 | 目标文件系统必须处于卸载状态 |
典型使用场景
- 确认会调用哪个检查器:用 -N 先看命令再决定是否执行
- 维护窗口批量检查:按 fstab 对数据盘逐个检查
- ext 系强制检查:怀疑元数据异常时用 -f 触发完整检查
- 排查开机自检:确认 fstab 第 6 列的 pass 值设置
- 判断检查结果:按位读取退出码,区分「已修复」与「未能修复」
常用示例
常用示例
fsck -N /dev/sdb1 # 只看会调用哪个检查器,不实际执行
fsck -t ext4 /dev/sdb1 # 指定类型检查
fsck -f -y /dev/sdb1 # 强制检查并对提问全部回答是(谨慎)
fsck -A -y # 按 fstab 检查全部(确保都未挂载)
fsck -A -t ext4 # 只处理 ext4 类型的条目
echo $? # 结合 -N 之前的结果判断,注意按位含义选项与退出码读法
| 项 | 含义 | 注意 |
|---|---|---|
| -A | 按 fstab 遍历检查 | 会连带处理各种类型,混入网络文件系统可能卡住 |
| -t 类型 | 限定文件系统类型 | 维护时用来收窄范围 |
| -N | 只显示将执行的命令 | 不确定后果时先用它 |
| -y 与 -n | 对全部提问自动回答是或否 | -y 有风险,-n 用于只读评估 |
| -f | 强制完整检查 | ext 系默认按挂载次数与时间决定是否检查 |
| 退出码 1 与 2 | 已修复错误 / 建议重启 | 属正常完成,不等于失败 |
| 退出码 4 与 8 | 未能修复 / 操作错误 | 需要人工介入 |
| 退出码 16 与 32 | 用法或调用错误 / 被取消 | 检查参数与运行方式 |
fsck 的退出码是按位组合的:1 表示错误已修复、2 表示需要重启、4 表示有错误未能修复、8 表示操作出错、16 表示用法错误、32 表示被用户取消。启动脚本正是按这些位来判断要不要继续启动,维护脚本里不要把「非 0」一律当成失败。
对被挂载的文件系统运行 fsck 是危险操作:主流实现会直接拒绝,个别情况下可能造成损坏。检查根分区要进救援模式或在启动早期完成;检查数据盘要先 umount,并用 findmnt 确认没有残留挂载。XFS 请改用 xfs_repair,它同样要求离线。