fsck是 Linux 中用于检查和修复文件系统的工具。它虽支持多种文件系统,但不同文件系统需调用对应的工具(如 e2fsck 用于 ext4,xfs_repair 用于 XFS)。以下为详细指南及实例。
原创殊为不易!诚邀诸位进行批评、评议、转发!
1、适用的故障场景
Linux系统启动时自动检查文件系统时,如果文件系统异常,譬如断电、强制重启后无法挂载,检测到文件系统元数据(如 superblock、inode)不一致,这时常常产生启动故障,fsck就排上用途了。
2、fsck 常用选项
-A 检查 /etc/fstab 中所有文件系统
-C 显示进度条(仅部分文件系统支持)
-N 空运行(仅显示操作,不实际执行)
-y 自动修复所有问题(无需交互确认)
-n 仅检查,不修复
-f 强制检查(即使文件系统标记为 clean)
-V 详细输出
3、使用时注意事项
(1)必须先卸载目标分区(umount /dev/sdX)。根文件系统(/)需在单用户模式或 Live CD/USB 下操作。
(2)修复可能导致数据丢失,操作前建议备份。
(3)文件系统类型:确认文件系统类型(lsblk -f),选择正确的工具。
4. 实例操作
(1)检查并修复 ext4 文件系统
卸载分区(假设为 /dev/sda1)
sudo umount /dev/sda1
检查并自动修复
sudo fsck.ext4 -f -y /dev/sda1
或使用通用命令
sudo fsck -t ext4 -y /dev/sda1
交互式修复
sudo fsck.ext4 -r /dev/sda1
-r:交互模式,针对每个错误提示用户确认是否修复。
(2)检查修复 XFS 文件系统
sudo umount /dev/sdb1
sudo xfs_repair /dev/sdb1
XFS 专用:使用 xfs_repair 工具,而非 fsck.xfs。
严重损坏时:可能需要 -L 选项强制重置日志(谨慎使用,可能导致数据丢失)。
(3)检查所有文件系统
sudo fsck -A -y
通常在恢复模式或 Live 环境中使用。
(4)强制检查根文件系统
进入单用户模式(重启后添加内核参数 init=/bin/bash)
mount -o remount,ro / # 只读挂载根分区
fsck -f /dev/sda1
mount -o remount,rw / # 恢复读写
5. 高级修复:恢复 ext4 的超级块(Superblock)
超级块(Superblock) 是文件系统的核心数据,记录了整个文件系统的关键信息,相当于文件系统的“头文件”或“身份证”。它是文件系统在磁盘上的第一个重要结构,没有超级块,系统将无法识别和挂载文件系统。一个不恰当的比喻:超级块相当于一本书的目录首页。
没有目录:你无法快速找到章节内容;同理,没有超级块,系统无法定位文件和数据块。
若主超级块损坏,可使用备份恢复:
(1)查找备份超级块位置(输出中的 "Backup superblocks")
sudo dumpe2fs /dev/sda1 | grep -i superblock
输出:
Primary superblock at 0, Group descriptors at 1-2
Backup superblock at 32768, Group descriptors at 32769-32770
Backup superblock at 98304, Group descriptors at 98305-98306
(2)使用备份超级块修复(如 32768)
sudo fsck.ext4 -b 32768 /dev/sda1
写在最后
fsck在修复前一定去看看磁盘硬件是否有故障(比如raid错误,磁盘错误),否则可能引起修复故障,引起数据丢失。