Difference between revisions of "Ploop/Backup"

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search
(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"
+
echo "Usage: vzbackup CTID BACKUP-PATH"
        exit 1
+
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

How backup via snapshot is done

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

See also