Restore all Proxmox OpenVZ Containers From The command Line
Category : How-to
I use Proxmox to host a development environment using OpenVZ containers. I take frequent backups of all OpenVZ containers in the event I need to roll back any development work.
The below script restores all OpenVZ containers which are available in the backup folder, but not available in the Proxmox GUI. Using this script, you can remove the containers in Proxmox which you would like to restore and run the script to restore the latest backup.
The script iterates through all of your backup files and only restores the latest based on the date in the file name.
You will need to set the BACKUP_PATH variable to the location of your backup folder with no trailing slash, and BACKUP_EXT with the extension used for your chosen backup format.
If you save this script in the /bin then you can call the script from the terminal without having to move to the scripts directory. Create the file and paste the below script into it.
vi /bin/restore_all
#!/bin/bash # # Filename : restore_all # Description : Restores all missing OpenVZ containers in Proxmox to the latest version available in the dump folder. # Author : James Coyle # # Version: # -Date -Author -Description # 01-11-2013 James Coyle Initial # # BACKUP_PATH=/var/lib/vz/dump BACKUP_EXT=tar.lzo # Do not change SEARCH_PATH=$BACKUP_PATH/vzdump-openvz-*.$BACKUP_EXT # Check dir exists if [ ! -d $BACKUP_PATH ]; then echo "The directory $BACKUP_PATH does not exist" exit 99 fi # Get unique VMIDs for F in $SEARCH_PATH do FILENAME=${F##*/} FILE_DATE=${FILENAME:18:19} FILE_DATE=${FILE_DATE//[_\-]/} VMID=${FILENAME:14:3} if [ -n $FILE_VIMS[$VMID] ]; then FILE_VIMS[$VMID]=$F fi TEST_FILENAME=${FILE_VIMS[$VMID]##*/} TEST_FILE_DATE=${TEST_FILENAME:18:19} TEST_FILE_DATE=${TEST_FILE_DATE//[_\-]/} if [ "$FILE_DATE" -gt "$TEST_FILE_DATE" ]; then FILE_VIMS[$VMID]=F fi done # Restore VM for I in ${!FILE_VIMS[*]} do echo "Restoring $I with ${FILE_VIMS[$I]}..." vzrestore ${FILE_VIMS[$I]} $I done
Make the script executable using chmod.
chmod +x /bin/restore_all
Use the below command to run the script and restore all containers which are missing from backup.
restore_all