ZFS存储池存在数据损坏,如何恢复受影响的文件?
ZFS存储池存在数据损坏,如何恢复受影响的文件?
看起来你的ZFS存储池data-2024-06-04碰到了数据损坏的问题,先给你理理当前的状态,再说说该怎么处理:
先看看你提供的存储池状态详情:
zpool status -v pool: data-2024-06-04 state: ONLINE status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. scan: scrub repaired 0B in 01:00:45 with 1 errors on Fri Jul 5 03:23:14 2024 config:
从这个输出能看出来,存储池虽然还处于ONLINE状态,但已经有1个数据损坏错误,之前的scrub操作没能自动修复它——这说明ZFS没办法自己搞定这个损坏,得我们手动介入。
接下来按这几步操作:
第一步:定位损坏的具体文件
ZFS会把损坏文件的路径记录在系统日志里,你可以根据自己的系统来查找:- 如果你用的是Debian/Ubuntu系列,跑这个命令:
grep -i "corrupt" /var/log/syslog - 要是RHEL/CentOS系列,就看这个日志:
grep -i "corrupt" /var/log/messages
运行后就能找到到底是哪个文件出了问题。
- 如果你用的是Debian/Ubuntu系列,跑这个命令:
第二步:恢复损坏的文件
- 如果你有这个损坏文件的单独备份,直接把备份文件覆盖掉损坏的文件就好,这是最直接高效的方式。
- 要是没有单个文件的备份,那只能从整个存储池的完整备份里恢复对应的文件,甚至是整个池。恢复完成后,记得再跑一次scrub来确保没问题:
zpool scrub data-2024-06-04
提醒一下:这种数据损坏一般和存储设备的潜在硬件问题有关,恢复后最好多留意下存储池的状态,定期做scrub检查,避免后续再出状况。
备注:内容来源于stack exchange,提问作者Albert




