Difference between revisions of "Ploop/Backup"
(→Image-based backup: I added a new script.) |
(→Image-based backup: The sorting of files was wrong. Now it lists the folders by date not by name.) |
||
Line 65: | Line 65: | ||
if [ -z $1 -o -z $2 ] | if [ -z $1 -o -z $2 ] | ||
then | then | ||
− | + | echo "Usage: vzbackup CTID BACKUP-PATH" | |
− | + | exit 1 | |
fi | fi | ||
Line 79: | Line 79: | ||
ID=$(uuidgen) | ID=$(uuidgen) | ||
VE_PRIVATE=$(VEID=$CTID; source /etc/vz/vz.conf; source /etc/vz/conf/$CTID.conf; echo $VE_PRIVATE) | VE_PRIVATE=$(VEID=$CTID; source /etc/vz/vz.conf; source /etc/vz/conf/$CTID.conf; echo $VE_PRIVATE) | ||
− | + | ||
# Take a snapshot without suspending a CT and saving its config | # Take a snapshot without suspending a CT and saving its config | ||
vzctl snapshot $CTID --id $ID --skip-suspend --skip-config | vzctl snapshot $CTID --id $ID --skip-suspend --skip-config | ||
− | + | ||
# Perform a backup using your favorite backup tool | # Perform a backup using your favorite backup tool | ||
# (cp is just an example) | # (cp is just an example) | ||
cp $VE_PRIVATE/root.hdd/* $BACKUPPATH/ | cp $VE_PRIVATE/root.hdd/* $BACKUPPATH/ | ||
− | + | ||
# Delete (merge) the snapshot | # Delete (merge) the snapshot | ||
vzctl snapshot-delete $CTID --id $ID | vzctl snapshot-delete $CTID --id $ID | ||
# remove old backups | # remove old backups | ||
− | rm -rf $( find $FOLDER -type d -name "$CTID*" | head -n-4 ) | + | rm -rf $( find $FOLDER -type d -name "$CTID*" -exec ls -d1rt "{}" + | head -n-4 ) |
echo "BACKUP FINISHED." | echo "BACKUP FINISHED." |
Revision as of 09:16, 9 October 2013
This article explains how to do consistent backups for ploop containers, using ploop snapshot feature.
Backup types
There are two ways of doing backups, both have their pros and cons.
- When doing an image backup, one copies ploop image files directly. There can be only one big file, or maybe a few relatively big files. Copying a few big files (rather than a lot of small files) is faster because there's not too much metadata (file info) to be copied). Also, filesystem properties are fully preserving (since images containing the filesystem are copied).
- When doing a file backup, one copies individual container' files. This is more suitable if you want selective backups (such as only some directories/files).
The following table summarizes pros and cons of both approaches.
Characteristic | Image | File |
---|---|---|
Incremental backups | Yes | Yes/No* |
Selective backups | No | Yes |
Faster full backup and restore | Yes | No |
Preserve filesystem properties | Yes | No |
Compatible with pre-ploop backups | No | Yes |
Restore individual files | Yes | Yes |
Image-based backup
Assuming you have a running container identified by $CTID
. The following needs to be done:
# Known snapshot ID
ID=$(uuidgen)
VE_PRIVATE=$(VEID=$CTID; source /etc/vz/vz.conf; source /etc/vz/conf/$CTID.conf; echo $VE_PRIVATE)
# Take a snapshot without suspending a CT and saving its config
vzctl snapshot $CTID --id $ID --skip-suspend --skip-config
# Perform a backup using your favorite backup tool
# (cp is just an example)
cp $VE_PRIVATE/root.hdd/* /backup/destination
# Delete (merge) the snapshot
vzctl snapshot-delete $CTID --id $ID
The following script implements the commands above and allows - when stored as vzbackup
- to backup your container by executing the script in the following way:
./vzbackup 101 /backup/destination/
The script removes older backups and keeps only the latest four backups. You can change the number of backups kept by changing the four in head -n-4
to the number of backups you would like to keep.
#!/bin/bash
if [ -z $1 -o -z $2 ]
then
echo "Usage: vzbackup CTID BACKUP-PATH"
exit 1
fi
CTID=$1
FOLDER=$2
BACKUPPATH=$FOLDER/$CTID-$( date +%F_%H_%M )
#create BACKUP-PATH
mkdir -p $BACKUPPATH
# Known snapshot ID
ID=$(uuidgen)
VE_PRIVATE=$(VEID=$CTID; source /etc/vz/vz.conf; source /etc/vz/conf/$CTID.conf; echo $VE_PRIVATE)
# Take a snapshot without suspending a CT and saving its config
vzctl snapshot $CTID --id $ID --skip-suspend --skip-config
# Perform a backup using your favorite backup tool
# (cp is just an example)
cp $VE_PRIVATE/root.hdd/* $BACKUPPATH/
# Delete (merge) the snapshot
vzctl snapshot-delete $CTID --id $ID
# remove old backups
rm -rf $( find $FOLDER -type d -name "$CTID*" -exec ls -d1rt "{}" + | head -n-4 )
echo "BACKUP FINISHED."
File-based backup
Assuming you have a running container identified by $CTID
. The following needs to be done:
# Known snapshot ID
ID=$(uuidgen)
# Directory used to mount a snapshot
MNTDIR=./mnt
mkdir $MNTDIR
# Take a snapshot without suspending a CT and saving its config
vzctl snapshot $CTID --id $ID --skip-suspend --skip-config
# Mount the snapshot taken
vzctl snapshot-mount $CTID --id $ID --target $MNTDIR
# Perform a backup using your favorite backup tool
# (tar is just an example)
tar cf backup.tar.xz $MNTDIR
# Unmount the snapshot
vzctl snapshot-umount $CTID --id $ID
# Delete (merge) the snapshot
vzctl snapshot-delete $CTID --id $ID