Linux fsck 命令:只读检查、修复限制与退出状态判断

fsck 调用对应文件系统的检查器,检查结构一致性,并按选项决定是否修复。先确认目标类型、使用状态与恢复方案;对仍在挂载使用的文件系统执行修改性检查,可能造成进一步损坏。

fsck 是前端,不是所有文件系统通用的修复算法。ext2、ext3、ext4 通常使用 e2fsck;XFS 的检查与修复应按 xfsprogs 的专用流程处理,不能把 ext 系列参数照搬过去。

基本语法与检查前提

sudo fsck [options] [file system]

这是说明性语法,方括号内不是可直接复制的参数。实际应明确指定已经核实的目标。util-linux fsck 在没有目标且未指定 -A 时,可能默认遍历 /etc/fstab,不能把省略参数理解为“什么都不做”。

先用 man fsck 与对应检查器的手册核对本机行为。准备可恢复的数据备份,并确认操作对象是含文件系统的正确分区或逻辑设备;不要把 /dev/sdb1 等示例名、整盘和某个分区随意互换。

核对类型、挂载与只读检查

查看文件系统信息。

lsblk -f

核对设备层级、识别到的类型、标签与 UUID(通用唯一标识符)。需要容量和型号时,应另外明确查询这些列;-f 的文件系统概览不是完整的设备身份与使用状况证明,空白字段也不代表可以直接修复。

查询示例设备的挂载关系。

findmnt /dev/sdb1

这个形式按设备或挂载点查询,结果通常属于当前挂载命名空间,即当前进程能看到的范围。无输出还须结合错误、退出状态与其他使用关系判断,不能据此认定设备在所有容器、进程或存储层中都未使用。

如果目标仍在使用,先保存业务数据、停止访问并安排卸载;不要为了运行检查而强行中断未知任务。可结合 mount 的查询与挂载验证及 umount 的占用排查和正常卸载核对流程。

仅针对已卸载的 ext 系列目标,示意只读检查。

sudo e2fsck -n /dev/sdb1

e2fsck 的 -n 以只读方式打开文件系统,对修复询问回答 No,不执行所提出的修复。不要与 -p 或 -y 混用,也不要未经评估叠加其他选项。检查可发现一致性问题,但不能保证硬件健康、全部文件内容正确或数据必然可恢复。

上游虽说明特定 -n 组合在已挂载目标上不修改文件系统,但也明确指出:目标仍挂载时输出的检查结果无效。因此这里仍要求先卸载,而不是把“只读”理解为可以在活动文件系统上得到可靠诊断。

只读检查与自动修复的区别

下面是通用前端的流程示意,保留了先查类型再运行检查的顺序。它不是自动批准操作的脚本;只有确认实际检查器支持所传入的 -n,并满足卸载等条件后,才考虑第二行:

lsblk -f
sudo fsck -n /dev/sdb1

-n 不是 fsck 前端统一实现的安全模式;未被前端识别的选项会传给具体检查器。不同检查器的参数没有统一标准,复杂或带参数的专用选项宜直接调用对应工具,不能假定任意格式都支持同样的只读语义。

发现错误后,不要立即追加 -y。对 e2fsck 而言,-y 自动回答 Yes,可能实际修改结构;-p 只自动处理它认为可自动修正的问题,遇到需要人工处理的情况仍会退出。两者都不能替代备份、故障判断和后续验证。

XFS 的 fsck.xfs 通常直接返回 0,并不表示完成了一次一致性扫描;部分强制启动配置是例外。需要检查或修复 XFS 时,应阅读 xfs_repair 手册并遵守卸载等条件,不直接套用本篇 ext 示例。

主要选项与范围

选项 作用与限制
-t format 指定或筛选检查的文件系统类型;具体推断规则须与目标及本机手册核对。
-A 遍历 /etc/fstab,按检查顺序等条件处理;第六字段为 0 的项目会跳过。
-N 仅显示准备执行的动作,不运行检查器;不能据此判断文件系统健康。
-M 跳过已挂载文件系统并对其返回 0;不是已经检查且无错误。
-V 详细显示过程及实际调用的检查器,不会自动禁止修改。

-N 与小写 -n 不是同一个选项。也不要为了检查单个目标而随意扩大到 -A;它可能处理多个文件系统,并按条件并行执行。调用之前必须明确检查范围与实际选项归属。

怎样读取退出状态

应在 fsck 命令结束后立即读取它的状态,例如在 Bash 中单独输入 echo "$?";先执行其他命令会覆盖这个值。详细诊断仍须结合标准输出、错误消息和实际调用的检查器。

util-linux fsck 的状态位包括:0 无错误,1 已纠正文件系统错误,2 系统应重启,4 仍有未纠正错误,8 操作错误,16 用法或语法错误,32 用户取消,128 共享库错误。多个条件可组合,多文件系统结果按位或汇总;不能只按“非零都等于同一种失败”处理。

例如 5 可以表示 1 与 4 同时存在,即有错误已纠正、也有错误未纠正,不是全部恢复完成。状态 0 也要结合 -M 跳过、XFS 占位检查器等情况判断。需要重启的状态应纳入维护恢复流程,不能只凭数字立即强制重启生产主机。

修复前后与恢复环境

  1. 核实目标、文件系统类型和存储层级,确认备份及可用恢复入口。
  2. 停止相关访问,安排卸载;根文件系统等正常运行时难以卸载的目标,使用适合的恢复模式或独立启动环境。
  3. 先按对应工具文档评估检查结果,再决定是否修复,不把错误输出自动转换成全面批准。
  4. 若实际进行了修复,重新核对一致性检查、挂载、文件访问与业务状态,保留完整消息和退出状态。

固态硬盘(SSD)、多盘阵列(RAID)、逻辑卷管理(LVM)及加密层会影响目标选择。若同时出现设备读写错误、反复掉盘或状态不明,应停止盲目重试,先区分底层故障与文件系统结构问题;反复修复并不是通用的数据恢复方案。

常见问题

已挂载的文件系统可以运行 fsck 吗?

不要对仍在使用的挂载目标执行修改性检查。通常先卸载或进入恢复环境,并遵循具体检查器文档;即使是 e2fsck 特定只读组合,在已挂载目标上的输出也不能视为有效检查结果。

官方文档

util-linux fsck 手册说明前端、范围与退出状态;e2fsck 手册说明 ext 系列检查和挂载限制;fsck.xfs 手册说明 XFS 的特殊处理。实际使用须对照已安装版本。