参考上一篇《PVE ZFS RAIDZ(RAID5)整列创建》,将安装完成的raidz其中一块硬盘去掉
去掉一块硬盘
查看r5阵列状态
发现健康状态已经变为DEGRADED了,并且提示了其中一块硬盘UNAVAIL
虽然RAIDZ整列已经警告了,但是虚拟机还是能正常使用,见下图
数据也还存在
此处体现了磁盘整列的好处,不会因为其中一块故障而丢失所有。
重新添加一块20G硬盘,这里PVE是安装到VMware环境的,所以模拟实现非常简单。
关闭PVE,然后添加一个20G新硬盘即可。
通过web界面查看整列详情,可以看到提示使用 zpool replace 替换坏的盘。反而言之就是特喵的不支持web操作。需要pve shell里面操作命令了。
打开pve shell命令行
查看整列状态
查看所有阵列
zpool status
查看指定阵列
zpool status -v 池名称
通过命令找新加入设备名称
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!!!
使用以下命令。(没有重建过的阵列,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
使用以下命令复制分区表。
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查看重建进度。
使用以下命令。
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
折腾多次,最后还是看一眼虚拟机和数据是否正常
虚拟机正常启动数据都还在。
参考文章:
https://blog.xqlee.com/article/251010091020839.html