记一次存储池损毁的恢复经历
前段时间去海鲜市场淘了一个矿龙1250电源给自己的8盘位nas换上了。一开始用的还行,那天跑了下ai生图的时候,矿龙发出了龙吟声,电源啸叫了。当时没在意,第二天发现存储池已经损毁了。看了下硬盘状态,发现有两块状态异常,但是smart报告是正常的。重启nas后存储池还是损毁状态。之前用debian自建nas时候遇到过这种情况。我就通过ssh登录到nas
mdadm -S /dev/md127
停止了raid127。然后通过
mdadm --assemble --force /dev/md127 /dev/sdh1 /dev/sdi1 /dev/sdf1 /dev/sde1 /dev/sdd1 /dev/sdc1 /dev/sda1 /dev/sdb1
重新组装了raid。重启一下nas后,到这里存储池就恢复了。
接下来就是遇到了新的问题了,存储池使用一段时间后,就变成只读状态了。查了下论坛很多人都遇到了同样的问题,但是没有找到解决办法。
通过mount发现是挂载状态变成了ro,raid127状态是active正常的。
systemctl stop docker
systemctl stop smbd
systemctl stop docker.socket
...
我把能想到的服务都停了,然后通过
umount /vol1
卸载卷,但提示设备忙无法卸载。
通过
lsof /vol1
发现是qbittorrent在使用卷,但qbittorrent是通过docker启动,可我的docker服务都停了,qbittorrent也无法停止。
kill进程后又会重新启动。最后只能通过
umount -f /vol1
强制卸载卷后做了个数据块修复
btrfs scrub start /dev/mapper/trim_4d671acd_6acb_41e9_b712_96b90c9fc785-0
修复结果
UUID: 23af5bc7-68ea-4ee7-bd7b-5a6a6b4fbaf1
Scrub started: Thu May 8 21:17:11 2025
Status: aborted
Duration: 4:30:00
Total to scrub: 21.93TiB
Rate: 944.63MiB/s
Error summary: verify=80
Corrected: 56
Uncorrectable: 24
Unverified: 0
修复不成功啊。尝试使用
btrfs check --repair --force /dev/mapper/trim_4d671acd_6acb_41e9_b712_96b90c9fc785-0
结果一直在qbittorrent的config文件上循环,修复失败。
再尝试另一个方法
mkdir -P /mnt/badpool
mount -o ro /dev/mapper/trim_4d671acd_6acb_41e9_b712_96b90c9fc785-0 /mnt/badpool
挂载卷,然后通过
find /mnt/badpool -type f -exec cp -v {} /dev/null \; 2> /root/file.txt
通过/root/file.txt查看损坏文件,然后通过将其删除掉后,再通过
btrfs scrub start /dev/mapper/trim_4d671acd_6acb_41e9_b712_96b90c9fc785-0