必须先卸载xfs分区,否则xfs_repair直接报错device is busy;用df -ht或lsblk -f确认挂载状态,umount卸载后,再通过xfs_repair -n预检、-l清日志(慎用)、-o bbs=指定备份超级块等参数精准修复。

必须先卸载,否则 xfs_repair 直接报错 device is busy
挂载状态下的 XFS 分区无法被 xfs_repair 处理,这是硬性限制,不是警告。它会立刻失败并输出类似 filesystem is mounted 或 device is busy 的错误,强行加 --force 之类参数也没用。
确认是否挂载:df -hT | grep xfs 或 lsblk -f | grep xfs;若看到目标设备(如 /dev/sdb1)对应挂载点,就说明还在用着。
- 正常卸载:
sudo umount /dev/sdb1 - 提示 busy 时,查占用进程:
lsof +D /mount/point或fuser -vm /mount/point - 实在卸不掉?可先只读重挂再卸载:
sudo mount -o remount,ro /dev/sdb1 /mnt→sudo umount /mnt - 根分区损坏无法进系统?需在 GRUB 启动时加
rd.break进入 initramfs shell,再执行xfs_repair /dev/sda2
xfs_repair -n 是唯一安全的预检方式
直接跑 xfs_repair /dev/sdb1 会写入修改——哪怕你没看到明显输出,只要它走完 phase 5,元数据就可能已被重写。而 -n 模式完全不碰磁盘,只模拟扫描并告诉你“如果修,会干啥”。
关键看输出里有没有高危动作提示:
- 空输出 → 文件系统一致,不用修
- 出现
would reset log、would rebuild AGI、would discard inode→ 真有损坏,且修复可能丢数据 - 出现
would reset superblock或would recreate root directory→ 高风险操作,暂停,优先备份关键文件再决定是否继续
别跳过这步。生产环境或根分区上,-n 花几十秒,能避免几小时的数据抢救。
日志损坏导致无法挂载时,xfs_repair -L 才是最后手段
-L 不是“更强的修复”,而是“跳过日志恢复”,强制清空日志段。它适用于:系统明确报错 log needs recovery 或 bad log record,且 xfs_repair 默认模式反复失败,又没有可用备份。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
执行前必须确认:
- 设备已卸载(
mount | grep /dev/sdb1无输出) - 系统日志里有
log I/O error或XFS (sdb1): log mount failed类报错 - 你接受丢失崩溃前几秒未刷盘的写入(比如刚保存的配置、正在复制的大文件)
执行命令:sudo xfs_repair -L /dev/sdb1(注意是大写 L,不是数字 1)。完成后立即尝试挂载,并用 ls -laR /mnt | head -50 快速扫一眼目录结构是否异常——如果大量目录为空或 lost+found 突然膨胀,说明元数据已失衡,别再写入,考虑从备份恢复。
主超级块损坏时,xfs_repair -o bbs= 指定备份位置
XFS 在多个位置存有备份超级块(backup superblocks),默认在 AG 0、AG 1、AG 2 等位置。当主超级块(AG 0)损坏,xfs_repair 可能连文件系统都识别不了,报错 can't read superblock 或 cannot determine geometry。
这时不能硬上 -L,得先让工具“看见”文件系统:
- 查备份超级块位置:
xfs_info /dev/sdb1(若还能运行)或查文档确认常见偏移(如 128MB、256MB) - 指定备用位置启动修复:
sudo xfs_repair -o bbs=262144 /dev/sdb1(262144 是 128MB 对应的扇区数,单位是 512 字节) - 若不确定位置,可逐个试:
xfs_db -r -c "sb 0" -c p /dev/sdb1、xfs_db -r -c "sb 1" -c p /dev/sdb1,看哪个能正常打印超级块内容
主 SB 损坏往往伴随其他元数据问题,修复后务必用 xfs_scrub -v /mnt 做一次只读完整性扫描,而不是直接认为“修好了”。










