PVE ZFS RAIDZ(RAID5)阵列重建
1.模拟磁盘故障
参考上一篇《PVE ZFS RAIDZ(RAID5)整列创建》,将安装完成的raidz其中一块硬盘去掉

去掉一块硬盘
查看r5阵列状态

发现健康状态已经变为DEGRADED(降级)了,并且提示了其中一块硬盘UNAVAIL(不可用)
虽然RAIDZ整列已经警告了,但是虚拟机还是能正常使用,见下图

数据也还存在

此处体现了磁盘整列的好处,不会因为其中一块故障而丢失所有。
2.PVE重建RAIDZ
重新添加一块20G硬盘,这里PVE是安装到VMware环境的,所以模拟实现非常简单。

关闭PVE,然后添加一个20G新硬盘即可。

通过web界面查看整列详情,可以看到提示使用 zpool replace 替换坏的盘。反而言之就是特喵的不支持web操作。需要pve shell里面操作命令了。
2.1 命令查看整列状态
打开pve shell命令行

查看整列状态
查看所有阵列
zpool status
查看指定阵列
zpool status -v 池名称


2.2 找到新加硬盘的设备路径
通过命令找新加入设备名称
lsblk

可以看到新设备为 nvme0n3
通过命令找设备的设备id路径
ls -l /dev/disk/by-id/*

由上图可以看到新硬盘的设备id路径为
/dev/disk/by-id/nvme-VMware_Virtual_NVMe_Disk_VMware_NVME_0000_3
重要提醒:
虽然直接使用 /dev/xxx 设备也能用,但是不建议,推荐使用by-id设备路径,防止迁移或系统崩溃导致硬盘顺序号变化导致存储池GAME OVER!!!
2.3 替换阵列不可用硬盘
2.3.1 替换非系统所在阵列盘
使用以下命令。(没有重建过的阵列,zfs记录的名称就是一长串,正常现象)
zpool replace -f 池名称 ZFS记录的旧硬盘名称 新硬盘路径
特别重要提示:
注意不要把好盘给替换了,要替换需要更换的盘!
通过2.1操作我们可以看到ZFS记录的问题硬盘名称(就是was后面那串)为:
/dev/disk/by-id/nvme-VMware_Virtual_NVMe_Disk_VMware_NVME_0000_3-part1
所以替换命令为:
zpool replace -f r5 /dev/disk/by-id/nvme-VMware_Virtual_NVMe_Disk_VMware_NVME_0000_3-part1 /dev/disk/by-id/nvme-VMware_Virtual_NVMe_Disk_VMware_NVME_0000_3
执行后可以在web的ZFS整列详情看到重建中,也可以在命令行查看状态查看

重建完成后状态变为ONLINE

2.3.2 替换系统所在阵列盘
分区
使用以下命令复制分区表。
sgdisk 好硬盘或旧硬盘路径 -R 新硬盘路径
sgdisk -G 新硬盘路径
#例
sgdisk /dev/nvme0n1 -R /dev/nvme1n1
sgdisk -G /dev/nvme1n1
恢复数据
使用以下命令重建zfs阵列。
zpool replace -f rpool ZFS记录的旧硬盘名称 新硬盘ZFS分区路径
#例,注意不要把好盘给替换了,要替换需要更换的盘!
zpool replace -f rpool 654684651684613 /dev/nvme1n1p3
可以使用zpool status查看重建进度。
重建efi分区数据,使更换的硬盘可以启动。
使用以下命令。
proxmox-boot-tool format 新硬盘EFI分区路径
proxmox-boot-tool init 新硬盘EFI分区路径
#例
proxmox-boot-tool format /dev/nvme1n1p2
proxmox-boot-tool init /dev/nvme1n1p2
使用以下命令确认efi启动正常。
proxmox-boot-tool refresh
3.数据查看
折腾多次,最后还是看一眼虚拟机和数据是否正常

虚拟机正常启动数据都还在。
参考文章:
https://www.syntaxspace.com/article/251010091020839.html
评论