站点图标 风屿岛

记一次 PVE 挂掉后的数据恢复以及踩坑

问题概述

起因是因为我在对虚拟机进行日常备份工作,但是 PVE 在备份完第二个虚拟机后居然卡死了,我先后尝试刷新 WebUI,连接 SSH 均无反应,之后我就按了一下电源键希望它走正常关机流程关机,但是无论按多少次 PVE 都不理我,反而在尝试自己把自己再开起来,这就出现了可以在网络中看到一个奇怪现象

其中,192.168.1.3的ip是一直存在的,192.168.1.103也是一直存在的,但192.168.1.107会在一段时间突然上线,然后又立刻下线

之后我就一直尝试连接 SSH,但是都以失败告终,于是我干脆直接断电重启,不出意外的话就出意外了,开机之后跳 grub> 命令行

开始踩坑

因为是开机跳 grub> 判断为引导损坏,我不会修所以去搜教程

Recover From Grub Failure – Proxmox VE

根据官方教程操作了但是发现行不通,最终我放弃了研究官方教程,去互联网上搜其他的解决方案

参考了贼多教程,我这样搞了:

grub> ls
(hd0) (hd0,gpt1).....
grub> ls (hd0,gpt1)/
......

最终我发现原本的系统在 hd1 里面,并且只有一个用来装 EFI 的分区是可以在 grub 下面用 ls 命令查看到的,hd0 则是我用来装 ventoy 的 u 盘,于是我仔细看了那唯一一个可以访问的分区的内容和网上的内容做一些对比

网上找的 boot 里应该有的东西
ls (hd1,gpt1)/EFI/
proxmox boot

之后在我看来一圈以后发现和网上的完全对不上

之后我想起原先 pve 是以 xfs 文件系统安装的,于是我

grub>insmod xfs

之后又去尝试浏览那几个分区里的内容,发现依然无法浏览

于是我重启进 win pe 碰碰运气,在 DiskGenius 里我看到了除了引导分区外,还有一个 root 分区,但是貌似已经损坏了,另一个分区则是 Linux-LVM,是一个逻辑卷,也就是 pve 默认用来放磁盘映像和 CT 卷的数据区,于是我便想进 Ubuntu LiveCD 模式试试修复或者导出数据

进入 Ubuntu LiveCD 后我按照先前 pve 官方文档的方式尝试挂载 lvm

这里提示 lvm 卷已经激活,于是我按照官方的教程开始挂载

在执行完第二条后就报错了,提示 wrong fs type, bad option, bad superblock ,看到 wrong fs type 我就想可能是因为 Ubuntu LiveCD 是 ext4 而不是我之前用的 xfs 所以没法挂载,于是我干脆找来一个 u 盘把它做成 xfs 的再试试挂载,结果还是不行,于是我拿了一块空闲硬盘来,想先装一个新的 pve 系统,再把旧盘的数据导入进新盘

在装新 pve 的时候,快装好的时候提示 pve 这个逻辑卷已经存在,是否重命名为 pve-OLD-xxx 再继续安装,这里一定要让他重命名

装好之后进 pve 的 WebUI 点数据中心-存储,发现旧盘的 LVM 名已经重命名成 pve-OLD-xxx 了

把这个卷挂载上,发现原先的虚拟机磁盘都还在

那么这时候就可以想办法导入了,我的想法是先创建一个虚拟机,再用 qm importdisk 命令把磁盘导入到新的虚拟机中

连接 SSH 查看一下旧数据

然后我发现直接用 qm importdisk 导入不进去,会报错,于是我就打算先导出再导入

qemu-img convert -c -O vmdk /dev/pve-OLD-111B4F37/vm-107-disk-0 /mnt/pve/truenas/vm/vm-107-0.vmdk

用这个命令导出成 vmdk

这个命令执行起来貌似不会有除了报错以外的输出

qm importdisk 107 /mnt/pve/truenas/vm/vm-107-0.vmdk local-lvm

导入磁盘到虚拟机

咱们也是遵循 warning 不用管的原则导入它,导入过程中会提示百分比,这个导入时前面会比较慢,后面就快了(因为后面的空间没有被占用),到 100% 的时候会卡一阵子

这样就导入成功了

之后在 WebUI 里就能看到未使用的磁盘,双击后点击添加即可

记得在选项里勾上这个磁盘的引导

再开机就可以开起来了,数据抢救成功

退出移动版