PVE 崩溃恢复ZFS存储上的虚拟机
1. 查看磁盘是否还在ZFS
先决条件:PVE崩溃后重装系统并成功挂载之前的ZFS存储,PVE崩溃后挂载ZFS存储操作参考:PVE 系统崩溃重装 ZFS阵列挂载
1.1 WEB查看

1.2 PVE Shell命令查看
zfs list
输出参考;
root@pve:~# zfs list
NAME USED AVAIL REFER MOUNTPOINT
r5 32.5G 5.90G 128K /r5
r5/vm-100-disk-0 32.5G 33.4G 4.97G -
root@pve:~#
1.3 查看zfs存存储磁盘在pve的值
pvesm list r5
参数: r5 - 对应zfs存储名
输出参考:
root@pve:~# pvesm list r5
Volid Format Type Size VMID
r5:vm-100-disk-0 raw images 34359738368 100
重要提示:
操作zfs相关磁盘使用数据集路径,也就是zfs list 输出的路径,如上面的磁盘路径为:
r5/r5/vm-100-disk-0
操作qm相关设置使用pvmsm路径,参考上面的:
r5:vm-100-disk-0
2.创建空白虚拟机
空白虚拟机参考:
空白定义:无需系统操作安装资源,无需磁盘

3. 恢复ZFS存储上的虚拟机
3.1 方案一:附加磁盘空白虚拟机
3.1.1 导入磁盘到虚拟机
如果你想把 vm-100-disk-0 挂载到另一个虚拟机(如 VM 110)作为数据盘:
qm set 110 -sata0 r5:vm-100-disk-0
执行输出参考:
root@pve:~# qm set 110 -sata0 r5:vm-100-disk-0
update VM 110: -sata0 r5:vm-100-disk-0
💡 若提示“disk is already in use”,可先解除占用(见下文3.1.2)
3.1.2 处理“磁盘被占用”问题(可选)
提示:该步骤为上一步执行失败,提示了磁盘被占用/“disk is already in use”才操作,否则跳过该步骤
如果上一步qm set
提示磁盘已被使用(即使 VM 不存在),可能是因为 PVE 的元数据未清理:
# 查看磁盘占用情况
pvesm命令
pvesm queryusedby r5:vm-100-disk-0
如果返回空或旧 VMID,可手动清除:
# 强制释放(谨慎操作)
pvesm free r5:vm-100-disk-0
执行完成后到web界面查看虚拟机信息

3.1.3 更改磁盘名称或归属(推荐操作)
如果你不想继续用 vm-100-disk-0 这个名字,可以重命名 ZFS 数据集:
1.关闭虚拟机
2.执行zfs存储上的数据集(dataset name)重命名
(相当于文件系统里面的文件重命名)
zfs rename r5/vm-100-disk-0 r5/vm-110-disk-0
3. 更新虚拟机中硬盘映射
执行了第2步骤后,虚拟机的配置参考如下:

发现虚拟机配置并没有修改,然后查看当前的zfs存储和pve对应的关系
root@pve:~# zfs list
NAME USED AVAIL REFER MOUNTPOINT
r5 32.5G 5.90G 128K /r5
r5/vm-110-disk-0 32.5G 33.4G 4.99G -
root@pve:~# pvesm list r5
Volid Format Type Size VMID
r5:vm-110-disk-0 raw images 34359738368 110
root@pve:~#
可以看到名称已经在zfs数据集生效,pvesm生效,唯独虚拟机配置未生效。此时如果启动虚拟机将无法启动!!!
更新步骤:
在虚拟机110硬件中选当前的硬盘,点分离。分离后虚拟机暂时无硬盘
pve执行硬盘设置
qm set 110 -sata0 r5:vm-110-disk-0
执行参考
root@pve:~# qm set 110 -sata0 r5:vm-110-disk-0
update VM 110: -sata0 r5:vm-110-disk-0
root@pve:~#
更新后查看硬件信息

ok,搞定
3.1.4 设置引导顺序

3.2 方案二:恢复原 VM(若配置已丢失)
如果你希望恢复 VMID 100,并且你知道原始配置(CPU、内存、网卡等),可以手动重建虚拟机配置。
⚠️ 注意:虚拟机配置文件通常位于 /etc/pve/qemu-server/100.conf,如果该文件不存在,则需要重建。
手动创建配置文件
cat > /etc/pve/qemu-server/100.conf <<EOF
bootdisk: sata0
cores: 2
memory: 2048
net0: virtio=AA:BB:CC:DD:EE:FF,bridge=vmbr0
sata0: r5:vm-100-disk-0,size=32G
# 或者如果使用的是 qcow2 文件(存储类型为 Directory)
# ide0: local:100/vm-100-disk-0.qcow2,size=32G
onboot: 1
ostype: l26
EOF
🔁 参数说明:
- sata0: r5:vm-100-disk-0,size=32G:指向你的 ZFS 磁盘(pve shell执行
pvesm list r5
可以查看),size 可选,但建议写上。- r5 是你的 ZFS 池名,请根据实际修改。
- net0 的 MAC 地址可省略或随机生成。
保存后,在 Web 界面刷新,应能看到 VM 100。
4.开机校验

虚拟机成功启动,且数据存在。
提示:由于网卡mac新虚拟机没设置,随机生成,所以ip发生了变化
https://blog.xqlee.com/article/2510130941028222.html
评论