硬盘损坏?别急着格式化!

视频

起因

最近 Unraid 有一块缓存盘出现故障无法挂载,下意识以为是硬盘坏了。很多数据都要丢了,很难受。

xfs错误

但仔细一想,这企业盘也不至于坏这么快吧。于是查看系统日志,发现貌似是因为 XFS 文件系统的日志错误造成的,系统尝试修复,但没有成功。那就好了嘛,反正无路可走了,那就手动再修复一下试试。

xfs_repair 命令

XFS 文件系统有一个修复命令 xfs_repair,该命令后面跟上磁盘所在的位置即可修复。正常修复不成功时,要加一些参数再次尝试。

-n 参数类似 —dry-run,模拟运行,并不会真正修复,通过模拟可以看出来哪些节点出了问题。image-20230516233915308

-n 加 -v 也就是 -nv 参数同样是模拟运行但会给出修复的步骤及每个步骤需要的时间等详细信息。

-v 参数进行修复并显示详细信息

若修复出现日志类错误,使用 -L 参数通过强制将日志清零来修复。image-20230516233938091

修复

在正常的 Linux 系统上修复时需要先卸载硬盘,也就是要停止阵列。在命令行输入 xfs_repair 命令加上相关参数,再加上硬盘路径来使用,如:xfs_repair -n /dev/WDC_WD120EDAZ_xxxxxxxxxxx

Unraid 系统提供了一个简单的界面(姑且算是吧)来实现这个命令的操作。

首先需要停止阵列来卸载硬盘,然后勾选启动阵列按钮下面的维护模式,再次启动阵列。此时处于维护模式中,硬盘并未被挂载(mnt 路径下为空),但可对硬盘进行操作。

勾选维护模式

文件系统不挂载

点击需要修复的硬盘名称前面的磁盘号(形如 Disk1、Disk2、Cache),往下第二栏看到检查文件系统状态(Check Filesystem Status),点击检查(Check)按钮这个动作即对应于在命令行输入 xfs_repair 指令并回车,按钮后面的输入框可以输入对应参数。执行信息会输出在按钮的上方。

点击对应磁盘

修复完成后,再次使用 -n 参数检查是否正常。之后停止阵列(退出维护模式),再次启动阵列(维护模式会自动取消勾选),此时该盘已经正常挂载。

检查

常用操作顺序:xfs_repair -n -> xfs_repair -nv -> xfs_repair -v -> xfs_repair -L -> xfs_repair -n

修复时间

文件识别

修复过程中节点不匹配的文件会存放到 lost+found 共享文件夹内(若没有会自动创建),文件以节点值命名且没有后缀名,默认只能依靠文件大小来识别。

文件

在文件浏览器(如 FileBrowser、Kodbox)内查看这些文件,可以通过文件图标类型来分辨出常见的通用文件类型,如视频(mkv、mp4)、图片(jpg、png)、音频(mp3、flac)、文本格式(txt)等。一般此类文件不会过多,此法可加快文件识别速度,然后决定文件去留。

FileBrowser 文件

视频文件

总结

  • xfs_repair 并不是能修复所有错误,本文修复的前提仅是文件系统日志错误这一情况。
  • 文件系统日志错误一般是由于上次关机不正常或程序异常导致的。
  • 使用 -L 参数修复有风险(虽然风险很小),所以更安全的做法是在修复前先使用 dd 命令将磁盘克隆到另一块空盘。

参考

https://wiki.unraid.net/Check_Disk_Filesystems#xfs_repair