我的设置如下:ubuntu 14.04 运行带有 libvirt 的 KVM,有一个运行的 HW-Raid (/dev/sda) 和另一个 HW-RAID (/dev/sdb),它是名为“datavg”的 LVM VG 的 PV,虚拟机安装在未格式化的 LV 中。然后我像这样备份了 VM:
- 保存 libvirt/virsh 配置
- 保存 lv 大小
- 使用 dd 保存前 512 字节(MBR 和 GPT)
- 创建 LV 的 LVM 快照
- 映射分区(使用 kpartx)并挂载虚拟机的根分区
- 保存该分区的 fs 类型和 uuid
- 使用 duplicity 对所有内容进行增量备份(排除 /proc)
- 卸载和取消映射
- 移除快照
这是我在“返回途中”运行的操作,将其恢复到 LV“vm-test-lv”中名为“test-vm”的虚拟机:
创建相同大小的 LV(来自备份)
lvcreate --name vm-test-lv --size 400.00G datavg
将 MBR 和 GPT 放回到 LV 开头的第一个 512b 中
dd if=/data/backup/test/MBR-20141126T104236Z.raw of=/dev/datavg/vm-test-lv
映射 LV 分区
kpartx -av /dev/datavg/vm-test-lv
使用相同的 UUID 在相同的 FS 中格式化它(均来自备份)
mkfs.ext4 -U a5943cc4-6421-47a4-9613-30efd4dc44d4 /dev/mapper/datavg-vm--test--lv1
挂载新格式化的分区
mount /dev/mapper/datavg-vm--test--lv1 /data/mnt/
恢复重复备份
duplicity restore --progress --restore-time 20141126T104236Z file:///data/backup/test /data/mnt
卸载它
umount /data/mnt
删除映射
kpartx -d /dev/mapper/datavg-vm--test--lv
创建虚拟机(在这种情况下使用不同的名称和 uuid,因为原始虚拟机仍然存在但已关闭)
virsh create /data/backup/test/virsh-20141126T104236Z.xml
尝试启动
这不起作用并且挂了,通过 SSH 隧道通过 VNC 查看它,它显示“从硬盘启动...”(截屏因为我不允许发布内嵌图片)
然后我尝试再次映射它,并 chroot 到它里面尝试执行,grub-install
但是也不起作用:
root@kvm-host:~# mkdir /data/mnt/proc
root@kvm-host:~# mount --bind /proc /data/mnt/proc
root@kvm-host:~# mount --bind /dev /data/mnt/dev
root@kvm-host:~# mount --bind /sys /data/mnt/sys
root@kvm-host:~# chroot /data/mnt
root@kvm-host:/# grub-install /dev/mapper/datavg-vm--test--lv
Installing for i386-pc platform.
grub-install: error: disk `lvmid/eLefkO-MKtH-kOcq-pt0b-4zzO-31xg-XIqDpY/AcNuFk-JY2r-V8x5-gNoV-UCoi-uQug-8R0ZWZ' not found.
它显示了 VG 和 LV 的正确 UUID,但我担心我使用错了...有人能帮帮我吗?