====== Virt-backup.pl: backup and restore ====== The “[[http://repo.firewall-services.com/misc/virt/virt-backup.pl|virt-backup.pl]]” script from Daniel Berteaud. # wget http://repo.firewall-services.com/misc/virt/virt-backup.pl # chmod +x virt-backup.pl # nano -w virt-backup.pl # lvcreate path - $opts{lvcreate} = '/usr/sbin/lvcreate -c 512'; + $opts{lvcreate} = '/sbin/lvcreate -c 512'; # lvremove path - $opts{lvremove} = '/usr/sbin/lvremove'; + $opts{lvremove} = '/sbin/lvremove'; # apt-get install libxml-simple-perl libsys-virt-perl libfile-which-perl Prepare partition for backup # lvcreate -l 3000 -n backup iscsi2 # mkfs.ext4 /dev/iscsi2/backup # mount /dev/mapper/iscsi2-backup /var/lib/libvirt/backup To mount iscsi partition at boot: # blkid ... /dev/mapper/iscsi2-backup: UUID="0a413f6c-50cd-45c7-ba1c-0a413f6c1ac6" TYPE="ext4" # nano -w /etc/fstab + UUID=0a413f6c-50cd-45c7-ba1c-0a413f6c1ac6 /var/lib/libvirt/backup ext4 defaults,auto,_netdev 0 0 **Live backup of LVM virtual machine by snapshot** # ./virt-backup.pl --dump --vm=tubu1-clone --state --debug Connecting to libvirt daemon using qemu:///system as URI Checking tubu1-clone status Running dump routine for tubu1-clone Locking tubu1-clone Saving XML description for tubu1-clone to /var/lib/libvirt/backup/tubu1-clone/tubu1-clone.xml tubu1-clone is running, saving state.... tubu1-clone state saved as /var/lib/libvirt/backup/tubu1-clone/tubu1-clone.state Analysing disk /dev/iscsi2/tubu1-clone connected on tubu1-clone as vda Running: /sbin/lvcreate -c 512 -p r -s -n /dev/iscsi2/tubu1-clone_1344612236 -L 5G /dev/iscsi2/tubu1-clone > /dev/null 2>&1 /dev/iscsi2/tubu1-clone seems to be a valid logical volume (LVM), a snapshot has been taken as /dev/iscsi2/tubu1-clone_1344612236 Adding /dev/iscsi2/tubu1-clone_1344612236 to the list of disks to be backed up The following disks will be dumped: Source: /dev/iscsi2/tubu1-clone_1344612236 Dest: /var/lib/libvirt/backup/tubu1-clone/tubu1-clone_vda.img We can run a live backup Trying to restore tubu1-clone from /var/lib/libvirt/backup/tubu1-clone/tubu1-clone.state Waiting for restoration to complete Starting dump of /dev/iscsi2/tubu1-clone_1344612236 to /var/lib/libvirt/backup/tubu1-clone/tubu1-clone_vda.img 32000+0 records in 32000+0 records out 8388608000 bytes (8.4 GB) copied, 244.731 s, 34.3 MB/s Removing snapshot /dev/iscsi2/tubu1-clone_1344612236 Cannot start domain restoration, tubu1-clone is running (maybe already restored after a live backup ?) Removing lock file for tubu1-clone Result: # ls -l /var/lib/libvirt/backup/tubu1-clone -rw------- 1 root root 284363322 Aug 10 17:23 tubu1-clone.state -rw-r--r-- 1 root root 8388608000 Aug 10 17:28 tubu1-clone_vda.img -rw-r--r-- 1 root root 2453 Aug 10 17:23 tubu1-clone.xml **Restore to same virtual machine (LVM)** # virsh shutdown tubu1-clone # dd if=/var/lib/libvirt/backup/tubu1-clone/tubu1-clone_vda.img | pv -s 8G | dd of=/dev/iscsi2/tubu1-clone # virsh restore tubu1-clone.state **Restore to different name/UUID (LVM)** Check original disk size # qemu-img info /var/lib/libvirt/backup/tubu1-clone/tubu1-clone_vda.img image: /var/lib/libvirt/backup/tubu1-clone/tubu1-clone_vda.img file format: raw virtual size: 7.8G (8388608000 bytes) disk size: 7.8G Create new volume same size as original lvcreate -L 8388608000B -n tubu1-restore kvm2 Restore disk # dd if=/var/lib/libvirt/backup/tubu1-clone/tubu1-clone_vda.img | pv -s 8G | dd of=/dev/kvm2/tubu1-restore Edit metadata with new name and UUID # cp /var/lib/libvirt/backup/tubu1-clone/tubu1-clone.xml ./tubu1r.xml # uuidgen 6702d0ee-0775-4ff9-bb75-d4a62ebc82b7 # nano -w tubu1r.xml # diff tubu1r.xml /var/lib/libvirt/backup/tubu1-clone/tubu1-clone.xml 1,3c1,3 < < tubu1r < 6702d0ee-0775-4ff9-bb75-d4a62ebc82b7 --- > > tubu1-clone > 4d9fad50-7206-3117-18f3-dd620c402b9b 31c31 < --- > Define new virtual machine from metadata # virsh define tubu1r.xml [[hypervisor:fromesxi|Migrate from esxi 4.1]] ⇒ ⇐ [[hypervisor:clone|VM clone]] ⇑ [[hypervisor:start|Hypervisor]]