ProxMox Config Backups
I recently set up a ProxMox virtual host and was quite impressed with the features one can get in an open source virtualization tool. The feature list for ProxMox is long and impressive, but one thing oddly missing is a way to back up its own configuration. For those long versed in the ways of Linux administration, the solution is probably obvious, but in case it isn't, here's one way to do it.
Like just about every other Linux app in existence, most configuration is stored in the "/etc" sub-directory. My approach was to basically to archive that, and dump it to a mounted share on another server. And set up a cron job to do it without me having to worry about it.
To start off, create a text file where ever it makes sense for you and add this to it:
# set vars _now=$(date +%Y-%m-%d.%H.%M.%S) # temporary storage directory _tdir="/var/tmp" # permanent backups directory _bdir="/mnt/backups/proxmox/config"
This is just setting the table, creating a time stamp and setting local and remote directories for the process. You'll set the directories to what works for you.
Next, stop the services and give them a moment to finish:
# stop host services /etc/init.d/pve-cluster stop /etc/init.d/pvedaemon stop /etc/init.d/vz stop /etc/init.d/qemu-server stop # give them a moment to finish sleep 10s
The meat of the script comes next, where the key folders are archived:
# copy key system files _filename1="$_tdir/proxmoxetc.$_now.tar" _filename2="$_tdir/proxmoxpve.$_now.tar" _filename3="$_tdir/proxmoxconfig.$_now.tar" tar -cvf "$_filename1" /etc/* tar -cvf "$_filename2" /var/lib/pve-cluster/*
Now, restart everything before you start the file moves:
# restart services /etc/init.d/qemu-server start /etc/init.d/vz start /etc/init.d/pvedaemon start /etc/init.d/pve-cluster start # qm startall
- if they don't start otherwise
Finally, tar up the results, clean up the leftovers, and move everything to your backups folder.
# archive the moved system file tar cvf "$_filename3" $_tdir/*.tar && rm "$_filename1" && rm "$_filename2" gzip "$_filename3" # Move config archive to backup folder mv "$_filename3.gz" "$_bdir/proxmoxconfig.$_now.tar.gz"
And that's the whole script. I dropped mine in the home folder and kicked it off in crontab with:
On my machine, you end up with a GZipped file of about 2 megs with a name like "proxmoxconfig.2015-01-04.23.59.01.tar.gz". Depending upon how you schedule it and the size of your server, that could eventually become a space issue so don't forget to set up some kind of archive maintenance.
To restore, move the file back to proxmox with cp, scp, webmin, a thumb drive, whatever. I place it back into the /var/tmp directory from whence it came. To unpack:
# Unpack the original backup tar -zxvf proxmoxconfig.2015-01-02.14.38.08.tar.gz # unpack the tared contents tar -xvf proxmoxpve.2015-01-02.14.38.08.tar tar -xvf proxmoxetc.2015-01-02.14.38.08.tar
If the services are running, stop them:
etc/init.d/pve-cluster stop /etc/init.d/pvedaemon stop /etc/init.d/vz stop /etc/init.d/qemu-server stop
Copy the old content to the original directory:
cp -avr /var/tmp/var/tmp/etc /etc cp -avr /var/tmp/var/tmp/var /var
And, finally, restart services:
/etc/init.d/qemu-server start /etc/init.d/vz start /etc/init.d/pvedaemon start /etc/init.d/pve-cluster start
If nothing goes wrong, and you have separately restored the VM images using the default ProxMox process, you should be back where you started.
Let's hope it never comes to that.