Latest revision |
Your text |
Line 1: |
Line 1: |
− | [[File:Ploop-backup.png|300px|right|thumb|How backup via snapshot is done]]
| + | This article explains how to do consistent file-based backups for [[ploop]] containers, using ploop snapshot feature. |
− | 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.
| |
− | | |
− | {| class="wikitable"
| |
− | ! Characteristic
| |
− | ! Image
| |
− | ! File
| |
− | |-
| |
− | || Incremental backups
| |
− | | {{Yes}} || {{Yes-No}}{{H:title|Requires tools such as rsnapshot|<sup>*</sup>}}
| |
− | |-
| |
− | || Selective backups
| |
− | | {{No}} || {{Yes}}
| |
− | |-
| |
− | || Faster full backup and restore
| |
− | | {{Yes}} || {{No}}
| |
− | |-
| |
− | | Preserve filesystem properties
| |
− | | {{Yes}} || {{No}}
| |
− | |-
| |
− | || Compatible with pre-ploop backups
| |
− | | {{Yes-No}}{{H:title|It's always possible to create a new, same-size ploop device and then restore the files into the mounted ploop partition|<sup>*</sup>}} || {{Yes}}
| |
− | |-
| |
− | || Restore individual files
| |
− | | {{Yes}} || {{Yes}}
| |
− | |}
| |
− | | |
− | == Image-based backup ==
| |
− | | |
− | Assuming you have a running container identified by <code>$CTID</code>. The following needs to be done:
| |
− | | |
− | <source lang="bash">
| |
− | # Known snapshot ID
| |
− | ID=$(uuidgen)
| |
− | VE_PRIVATE=$(vzlist -H -o private $CTID)
| |
− | | |
− | # 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
| |
− | </source>
| |
− | | |
− | The following script implements the commands above and allows - when stored as <code>vzbackup</code> - to backup your container by executing the script in the following way:
| |
− | | |
− | <code>./vzbackup 101 /backup/destination/</code>
| |
− | | |
− | 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 <code>head -n-4</code> to the number of backups you would like to keep.
| |
− | | |
− | <source lang="bash">
| |
− | #!/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=$(vzlist -H -o private $CTID)
| |
− |
| |
− | # 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."
| |
− | </source>
| |
− | | |
− | == File-based backup ==
| |
| | | |
| Assuming you have a running container identified by <code>$CTID</code>. The following needs to be done: | | Assuming you have a running container identified by <code>$CTID</code>. The following needs to be done: |
Line 116: |
Line 19: |
| # Perform a backup using your favorite backup tool | | # Perform a backup using your favorite backup tool |
| # (tar is just an example) | | # (tar is just an example) |
− | tar cf backup.tar $MNTDIR | + | tar cf backup.tar.xz $MNTDIR |
− | | |
− | # tar with compression examples, see man page of tar for more options
| |
− | # tar cfJ backup.tar.xz $MNTDIR
| |
− | # tar cfz backup.tar.gz $MNTDIR
| |
| | | |
| # Unmount the snapshot | | # Unmount the snapshot |
Line 129: |
Line 28: |
| </source> | | </source> |
| | | |
− | == See also ==
| + | For more information, see [[Man/vzctl.8#Snapshotting|vzctl(8), section Snapshotting]]. |
− | | |
− | * [[Ploop]]
| |
− | * [[Man/vzctl.8#Snapshotting|vzctl(8), section Snapshotting]].
| |
| | | |
− | [[Category: Storage]] | + | [[Category:ploop]] |
− | [[Category: HOWTO]] | + | [[Category:HOWTO]] |