Zhi Wei 的个人博客
PVE离线备份虚拟机
PVE离线备份虚拟机

PVE离线备份虚拟机

我有一台基于Intel D1851平台的PVE设备,搭配64G内存与若干硬盘,组成了我的HomeServer。大概是上个月中旬,在一次停电以后,就无法启动了。故障现象是主板启动到6E阶段后,自动重启。或者卡B0/B2就是不启动,常规检查后,我笃定是主板挂了,遂某宝重新下单一块带集显的全新主板(坏的是某鱼淘的丐版)。

但令我做梦也没有想到的是,新板子到我手上依然无法点亮,这导致我一度怀疑自己是不是非酋,令人啼笑皆非的是最后排查出来,点不亮的原因竟然是机箱电源的CPU供电输出不够导致的。

但是在这一个多月的时间里,部署在PVE中Nexcloud不能用也给我造成了一些影响,最主要是还存有其他朋友的数据,这个是最让人烦恼的。在这期间,考虑到D1851的稳定性(没有排查出故障原因之前),以及功耗,我也入手了主打低功耗的一个平台J4125。

所以数据的恢复和迁移,就成了我折腾的新方向,先大致介绍一下D1851上的环境,我用了一块120G的SSD安装PVE8,虚拟机则存储在由两块SSD组成的ZFS镜像分区上的,另外放了一块1TB的机械用来备份虚拟机。

这个方案最开始的设想是准备作为生产环境长期使用的,所以选择了ZFS进行冗余,而且还追加一块1TB的机械进行备份。可惜完成以后没测试定时备份,所以才有了这篇文章。我的虚拟机数据都是存在了ZFS分区中,所以重现zpool就是恢复虚拟机的重中之重。

于是我在我的笔记本上进行恢复的尝试,目标是重现PVE环境和zpool。首先把120G的系统盘使用winhex做成硬盘镜像,在使用StarWind V2V Converter把IMG格式硬盘镜像转换成VM格式,在VMware Workstation中新建虚拟机,添加这块虚拟硬盘,然后再使用VM的直通模式,也就是直接使用物理磁盘,并且打开只读,添加ZFS镜像中的480G SSD,最后同样的直接使用物理磁盘方式再添加1TB HDD,这块盘可读写。

怀着忐忑的心情启动VM虚拟机以后,观察一下dmesg信息,一排红色信息提示zpool无法挂载,好在不影响系统启动,顺利登录root账号后,使用zpool status观察一下,不出意外的,没有任何zpool存在,使用手动zpool import导入一下,很完美PVE正常的挂载了zpool,然后修改网络配置,使用lspci看一下有没有网卡,然后使用ifconfig -a看下网卡的名称,最后编辑/etc/network/interfaces配置中桥接的网卡为VM的网卡。

启动浏览器,访问PVE的管理WEB,可以看到当前的zpool工作正常,但是raid降级了处在告警状态。不过只要能挂载就可以通过WEB进项数据的备份工作,这里注意的是不要再恢复环境中启动虚拟机,然后对虚拟机进行备份,但是备份却失败了,日志提示当前处在VM环境中需要打开嵌套VT,关闭虚拟机,编辑CPU设置打开虚拟化intel-vt选项。

ok到这里PVE环境和数据就已经复现了,WEB操作备份虚拟机数据到1TB HDD中即可。我复制了一个备份到笔记本中,使用VM重新安装了一个测试PVE环境,使用这个备份成功还原了虚拟机,这表示我的备份数据也是完整可用的。PVE的默认备份数据存放路径是/var/lib/vz/dump,也可以像移动VM虚拟机一样,把这些备份数据复制到任何一台PVE上进行还原。

这里聊一聊一个题外话,ZFS的使用感受。我的D1851再爆炸之前其实已经稳定运行了两个月不到了,期间因为测试和研究,也宕机过好几次,只能通过硬重启恢复。但是我的ZFS工作一直很稳定,观察它的健康状态,也不存在任何错误。这有可能是我的数据量太小了,根本触发不了什么,也有可能是官方宣称的自我修复?反正我觉得ZFS很可靠,一度想运用在J4125上,可惜这个平台最大支持8G内存。

说到内存,PVE的文档中明确指出了,ZFS十分而且依赖内存,一般1TB数据需要3G内存1G缓存和2G常驻(1+2),8TB数据则是(8+2)10G内存。推荐使用ECC内存和UPS电源保证数据的安全性。好在D1581这个洋垃圾平台本来就是用DDR3L的ECC内存。所以我分配了MAX 8G给ZFS使用。

关于ZFS的读写性能,在我的平台上面体现的却不是很明显,可能我这点IO量还不能够到它的专业领域,使用VirtIO SCSI single控制器创建了一块存储在ZFS中的8G硬盘,添加到WIN虚拟机中,使用HDtune进行测试顺序和随机读写,和单块SSD基本差不多,这里我觉得可以参考木桶效应,因为我这块M2的SSD性能实在是太差了。

有了ZFS和备份的加持,我已经一点也不虚了,所以便耐心的等待D1581的返修寄回。一转眼D1581主板和J4125我都拿到了,D1581那边说是给我换了一块主板,但实际上我做得记号都还在。中间省略排查电源故障的情节,实在不想提。排除故障以后先还原D1581,所有硬盘接好开机,直接复活,一点问题也没有。然后我拔掉了480G 的SSD给J4125做系统盘,因为我有虚拟机的备份,而且ZFS RAID降级也可以正常使用。

在这期间我研究了下PVE的HA高可用,个人使用其实大多数并不能满足前置要求,因为至少需要3个节点才能实现,而且要求硬件参数要求基本一致,我这里在D1581上还有一块Intel I350-T4,如果虚拟机使用了这个网卡,在迁移的目标上没有这个硬件,那没有办法做到高可用。这样的冗余成本如果不是商用还是算了吧,但我还是想研究下不停机的在线迁移。

所以我选择使用集群的在线迁移功能,在D1581上创建集群,J4125加入集群,然后选择虚拟机和LXC容器进行迁移,这里也分离线和在线迁移的方法,具体可以参考官方说明文档。我这里出现了一个问题,因为我的虚拟机大多数都是存在了ZFS分区中,但是J4125上却没有对应的挂载点,所以不能进行迁移甚至离线迁移也是不可以的。要想实现在线迁移不停机,需要将虚拟机存储在相同类型的存储空间中,比如我这个就要求迁移对端的节点上存在一个同样的zpool存储空间。

所以需要先将虚拟机的磁盘移动到LVM分区中,然后开机进行迁移就不会报错了。迁移的过程中虚拟机是不会停机的,如果迁移期间虚拟机的的IO比较大,会在快结束的时候短暂挂起一下虚拟机进行数据同步,一般情况下迁移期间基本感受不到系统异常。

仔细品了下PVE的集群,最佳的使用场景还是搭配Ceph存储,通过FC交换机进行数据的传输,再搭配UPS和硬件的冗余才能发挥出HA以及PVE的集群优势,不过这就是典型的商用环境了。个人用户还是直接scp传输一下备份的虚拟机文件,牺牲一点时间完全是够了。因为也实在没有什么个人业务是不能停机的。

最后聊聊J4125的性能,4C4T没什么亮点,唯一看重的就低功耗,跑一个win10刚刚好,没有一点性能溢出,跑nextcloud倒是挺好的,再跑一个OpenWRT,然后放一个WIN10-LTSC,刚好应该到达极限,平时需要高性能的场景就网络唤醒pve节点,平时就关机,整体一看性能与功耗刚好达到一个平衡点。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注