Plum's Blog

给 PVE 的 ZFS 阵列更换故障硬盘

还是之前搭建的那个抽象的 PVE 服务器,最近发现默认的 ZFS Pool 居然 Degraded 了。

可以很明显地看到一个硬盘应该是损坏了。

因为我创建的是 RaidZ1,所以允许一块硬盘损坏,按理来说就是换一块硬盘就行了。

photo_2024-11-25_17-13-00.jpg

查询了一下文档和其他人的经验,基本操作就是:

因为目前硬盘已经是 Degraded 的状态,和 Offline 性质一致,所以就不再需要进行 offline 的操作,如果硬盘只是有错,没有彻底被 Degrade,是需要手动先下线的。

zpool offline poolname XXXXXXXX 

目前首当其冲是弄块新硬盘,因为这个 PVE 服务器本身就是老古董,查询了硬盘配件编号是:581311-001,很容易就在闲鱼上找到了大量卖家,大部分都是拆服务器的二手贩子,我对硬盘要求不高,能撑一阵就行,最后谈了谈 30 块钱弄了一块。

photo_2024-11-25_17-14-18.jpg

接下来另一个问题就是要找到损坏的硬盘的位置,因为我是把硬盘每个单独创建一个 Raid0 模拟 HBA 的作用的,所以常理的命令行读取序列号的方式是无效的,建议关机进入 Raid 卡界面,根据 Raid 卡创建的 Raid 编号顺序,对应 PVE 里的编号,比如这个在 PVE 中是第五个硬盘,而 Raid 卡里也是第五个,查询服务器的 Slot ,可以定位第五块的位置。更换新硬盘即可。

更换新硬盘之后,重启进入系统,可以看到已经识别,创建 Raid0,进入 PVE,对原有硬盘进行 Wipe,就可以使用 zpool 进行 replace 了,一般来说只需要输入原有的 disk-id 就行了。

zpool replace poolname XXXXXXXX NEWXXXXXXX

replace 后可以看到重建的进度,有可能速度比较慢,但是我这里是越来越快,大概 10 个小时就重建完毕了。

至此硬盘更换完成。

最后不得不说, RaidZ1 还是有风险的,虽然允许损坏一块硬盘,一旦发现有硬盘异常,还是应该尽快处理,不要拖着,否则你更换硬盘重建的时候(有时候重建会很久,甚至数以天计),还有一块也碰巧坏了,那就完蛋了。


参考:
https://www.rockylinux.cn/notes/diy-nas-series-32-zfs-storage-pool-failure-and-recovery.html
https://tomjamescn.github.io/post/2019-06-13-zfs-replace-bad-disk/
https://pve.proxmox.com/wiki/ZFS:_Tips_and_Tricks#Replacing_a_failed_disk_in_the_root_pool

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »