PVE从qcow2文件恢复虚拟机

5月 10, 2023 84点热度 0人点赞 0条评论

一、写本文原因
公司有一台物理服务器,X58架构,挺老了,属于垃圾成色了。后来用U盘装了PVE做了虚拟化,当做线下测试服务器,以及做一些实验用。
由于园区经常停电,导致了经常装载U盘上的PVE系统损坏,好在装载U盘,对本地的虚拟机数据没有影响,装了几次也有了一些经验。

二 、备份文件
2.1 安装时备份
需要牢记住hostname和IP地址,Hostname直接和你的数据中心名称挂钩,尽量和虚拟保持一致

2.2 备份PVE配置文件
待PVE虚拟机部署完成,并且正式运行时,请备份如下目录文件:/etc/pve/
其中如下两个比较重要:
qemu-server:保存了虚机的配置信息
storage.cfg:保存了PVE的分区信息
root@zm:/mnt/bak/dump# ls -ll /etc/pve/
total 4
-rw-r----- 1 root www-data 451 Nov 2 11:45 authkey.pub
-rw-r----- 1 root www-data 16 Nov 2 11:40 datacenter.cfg
drwxr-xr-x 2 root www-data 0 Nov 2 11:45 ha
lrwxr-xr-x 1 root www-data 0 Jan 1 1970 local -> nodes/zm
lrwxr-xr-x 1 root www-data 0 Jan 1 1970 lxc -> nodes/zm/lxc
drwxr-xr-x 2 root www-data 0 Nov 2 11:45 nodes
lrwxr-xr-x 1 root www-data 0 Jan 1 1970 openvz -> nodes/zm/openvz
drwx------ 2 root www-data 0 Nov 2 11:45 priv
-rw-r----- 1 root www-data 2074 Nov 2 11:45 pve-root-ca.pem
-rw-r----- 1 root www-data 1675 Nov 2 11:45 pve-www.key
lrwxr-xr-x 1 root www-data 0 Jan 1 1970 qemu-server -> nodes/zm/qemu-server
drwxr-xr-x 2 root www-data 0 Nov 2 11:45 sdn
-rw-r----- 1 root www-data 332 Nov 2 12:00 storage.cfg
-rw-r----- 1 root www-data 39 Nov 2 11:40 user.cfg
drwxr-xr-x 2 root www-data 0 Nov 2 11:45 virtual-guest
-rw-r----- 1 root www-data 119 Nov 2 11:45 vzdump.cron

2.3.备份分区表
备份分区表/etc/fstab,这里记载了磁盘的挂载信息,假如丢失或者不记得,会导致虚机磁盘目录不对,无法启动;

2.4.使用PVE备份功备份虚机
点击虚机–备份,可以看到此虚机的备份信息,如果本机没有备份的话,建议及时进行备份,进行重大操作前也建议进行备份。

备份时默认的模式为快照,默认压缩格式为ZSTD。

快照模式:备份时对服务器进行暂挂处理,来保持数据一致性,假如虚机开启了agent,在暂停备份时由agent来接收数据,如果对数据要求一致性不太高,可以使用从此模式;

挂起模式:进行备份前,会对虚机进行暂挂处理,导致备份时间过长,并且数据一致性不太高,可以PASS此模式;

停止模式:数据一致性最高,用最短的停机时间对虚机进行备份。

 

三、恢复
3.1 使用配置文件进行恢复
如果对配置文件进行过备份,可以把对应的conf文件直接复制到/etc/pve/qemu-server/里即可,然后修改存储信息/etc/pve/storage.cfg,修改Linux分区表/etc/fstab,启动虚拟就可以了;

3.2 没有配置文件进行恢复
如果没有配置文件,只有虚机硬盘镜像在,不怕,我们还有机会!假如你格式化了硬盘,所有虚机镜像不在了,对不起,这篇文章你应该不用看了,你该考虑怎么跑路了~
虚机的磁盘镜像在设定好的目录下,可以是LVM也可以是standard分区。以我的目录为例子,虚机镜像路径在:/mnt/vm/images/,前面的vm对应的是分区目录,数字编号对应了虚机的编号,disk-0和disk-1对应了虚机的第一块和第二块硬盘;

ls /mnt/vm/images/
# 虚机编号
100 101 102 103 104 105 106

# 查看虚机编号106的镜像文件
ls 106/
vm-106-disk-0.qcow2 vm-106-disk-1.qcow2

镜像文件有了,我们该怎么恢复呢?不要急慢慢来,首先在PVE里创建一个虚拟机,编号千万不要和上面的重复。

然后把创建好的虚机配置文件复制一份,进行修改,我们需要修改如下内容
name:虚机的名字,可以和之前一样
虚机的mac地址:可以使用如下命令生成,前面的52:54:00可以自行替换

echo 52:54:00:`openssl rand -hex 3 | sed 's/\(..\)/\1:/g; s/.$//'`

smbios1:虚机bios UUID,使用如下命令生成uuidgen,如果提示找不到命令,使用apt install uuid-runtime进行安装
unused0:未使用的硬盘,更改为旧的虚机硬盘路径
virtio0:引导硬盘,更改为旧的虚机硬盘路径
vmgenid:虚机UUID, 可以使用uuidgen命令生成

 

更改完成后可以在PVE管理界面看到更改好的虚机ID,直接右键开机即可;

 

 

 

 

 

 

 

如何通过qcow2镜像获取虚拟机的磁盘数据

背景
当虚拟机出现崩溃,客户并不急于恢复虚拟机或者虚拟机已经无法恢复时,可以通过挂载虚拟机镜像,可以获取虚拟机镜像内部的数据,这样用户的数据就可以抢救出来了。

挂载方法
假设虚拟机磁盘镜像路径为$PATH,镜像格式为$FORMAT, 挂载的目标目录为$mnt
按照如下顺序执行命令:

# modprobe nbd max_part=16
# lsmod | grep nbd #查看nbd模块是否加载
# qemu-nbd -c /dev/nbd0 $PATH -f $FORMAT #将磁盘镜像挂载到/dev/nbd0设备
# fdisk -l /dev/nbd0 #查看镜像的分区情况

通过fdisk查看分区情况,查看结果例如:

Disk /dev/nbd0: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders, total 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0008104f

Device Boot Start End Blocks Id System
/dev/nbd0p1 * 63 208844 104391 83 Linux
/dev/nbd0p2 208845 41929649 20860402+ 8e Linux LVM
/dev/nbd0p3 41929650 167766794 62918572+ 83 Linux

非lvm分区挂载
可以看到其中第二个分区使用了lvm,其他两个分区是非lvm分区,如果需要挂载第三个分区,也就是非lvm分区,可以执行下列命令:

# qemu-nbd -c /dev/nbd1 $PATH -f $FORMAT -P 3
# mount /dev/nbd1 $mnt
1
2
lvm分区挂载
如果需要挂载第二个分区,就是lvm分区,可以执行下列命令:

# qemu-nbd -c /dev/nbd2 $PATH -f $FORMAT -P 2
# pvscan

pvscan可以看到物理卷的信息

PV /dev/sda5 VG hty-compute2-vg lvm2 [465.52 GiB / 0 free]
PV /dev/loop2 VG cinder-volumes lvm2 [30.00 GiB / 30.00 GiB free]
PV /dev/nbd1 VG VolGroup00 lvm2 [19.88 GiB / 0 free]
Total: 3 [515.39 GiB] / in use: 3 [515.39 GiB] / in no VG: 0 [0 ]

lvm分区都被映射到/dev/mapper/下

# ls /dev/mapper/
control hty--compute2--vg-swap_1 VolGroup00-LogVol01
hty--compute2--vg-root VolGroup00-LogVol00

以上在VolGroup00组中,有两个lv,分别尝试挂载之后,发现其中一个是swap分区,无法挂载,在本文的例子中,VolGroup00-LogVol01是swap分区,VolGroup00-LogVol00是逻辑分区,因此挂载VolGroup00-LogVol00.

# mount /dev/mapper/VolGroup00-LogVol00 $mnt

 

 

 

原文链接:https://blog.csdn.net/u011364612/article/details/53486306

李 锋

这个人很懒,什么都没留下

文章评论