Vzdump is the tool used to back up virtual machines in Proxmox.
A few weeks ago, I wrote an entry describing how to do a dump with an specified name, rather than using the default naming for this backups in Creating Kvm backups with an specific name, but now, I’m comming with a much more elegant solution using a hook for vzdump. In Proxmox 2.x, you can back up machines from the web interface very easily and using a hook all is done transparently.
This tool has an option “-script” to be able to call an script during its execution.
-script string Use specified hook script.
You can configure an script to do what ever you want in diferent states during vzdump execution. In this case, I only want to rename default file to a more representative one so I’ve only used the backup-end state to do it at the end of the dump process. My script located in /root/scripts/vzdump-hook-script.pl:
#!/usr/bin/perl -w # example hook script for vzdump (--script option) use strict; use File::Copy qw(move); my $basedir="/mnt/pve/pve-backups/dump"; print "HOOK: " . join (' ', @ARGV) . "\n"; my $phase = shift; if ($phase eq 'backup-end' ){ my $mode = shift; # stop/suspend/snapshot my $vmid = shift; my $vmtype = $ENV{VMTYPE} if defined ($ENV{VMTYPE}); # openvz/qemu my $dumpdir = $ENV{DUMPDIR} if defined ($ENV{DUMPDIR}); my $hostname = $ENV{HOSTNAME} if defined ($ENV{HOSTNAME}); # tarfile is only available in phase 'backup-end' my $tarfile = $ENV{TARFILE} if defined ($ENV{TARFILE}); # logfile is only available in phase 'log-end' my $logfile = $ENV{LOGFILE} if defined ($ENV{LOGFILE}); print "HOOK-ENV: vmtype=$vmtype;dumpdir=$dumpdir;hostname=$hostname;tarfile=$tarfile;logfile=$logfile\n"; if ($phase eq 'backup-end' and defined ($tarfile) and defined ($hostname)) { if ( $tarfile=~/($basedir\/vzdump-(qemu|openvz)-\d+-)(\d\d\d\d_.+)/ ){ my $tarfile2=$1.$hostname."-".$3; print "HOOK: Renaming file $tarfile to $tarfile2\n"; move $tarfile, $tarfile2; } } } exit (0);
With this script you get a file name like vzdump-qemu-106-HOSTNAME-2012_06_22-14_35_59.tar.gz and this files are correctly listed by Proxmox interface. You can check the sample script /usr/share/doc/pve-manager/examples/vzdump-hook-script.pl to view all available states.
Configure the script in /etc/vzdump.conf
# vzdump default settings #tmpdir: DIR #dumpdir: DIR #storage: STORAGE_ID #mode: snapshot|suspend|stop #bwlimit: KBPS #ionice: PRI #lockwait: MINUTES #stopwait: MINUTES #size: MB #maxfiles: N script: /root/scripts/vzdump-hook-script.pl #exclude-path: PATHLIST
Now, every vzdump execution will call our script to rename the dump file name.
To finish you only have to apply this changes to all nodes in the Proxmox cluster.