summaryrefslogtreecommitdiff
path: root/share/hydractl/sync-backups
diff options
context:
space:
mode:
Diffstat (limited to 'share/hydractl/sync-backups')
-rwxr-xr-xshare/hydractl/sync-backups74
1 files changed, 74 insertions, 0 deletions
diff --git a/share/hydractl/sync-backups b/share/hydractl/sync-backups
new file mode 100755
index 0000000..aa92754
--- /dev/null
+++ b/share/hydractl/sync-backups
@@ -0,0 +1,74 @@
+#!/bin/bash
+#
+# sync a removable volume with system backups.
+#
+
+# Parameters.
+BASENAME="`basename $0`"
+VOLUME="$1"
+MEDIA="/media/$VOLUME"
+BWLIMIT=${BWLIMIT:=32000}
+IMAGES="/var/data/crypt/"
+RSYNC="ionice -c 3 nice -n 19 rsync -avH --delete --bwlimit=$BWLIMIT"
+CP="ionice -c 3 nice -n 19 cp"
+
+# Sync backups for a node.
+function sync_backups_node {
+ if [ ! -z "$NODE" ]; then
+ # Get full node hostname.
+ NODE_HOSTNAME="`cat /var/vservers/$NODE/etc/hostname`"
+ if [ -z "$NODE_HOSTNAME" ]; then
+ NODE_HOSTNAME="$NODE"
+ fi
+
+ # Sync local encrypted backup.
+ echo "Syncing /var/vservers/$NODE/var/backups/duplicity/..."
+ mkdir -p /$MEDIA/$NODE_HOSTNAME/duplicity
+ $RSYNC /var/vservers/$NODE/var/backups/duplicity/ /$MEDIA/$NODE_HOSTNAME/duplicity/
+
+ # Sync remote backups.
+ for node in `ls /var/vservers/$NODE/var/backups/remote/`; do
+ echo "Syncing /var/vservers/$NODE/var/backups/remote/$node/..."
+ mkdir -p /$MEDIA/$NODE_HOSTNAME/remote/$node
+ $RSYNC /var/vservers/$NODE/var/backups/remote/$node/ /$MEDIA/$NODE_HOSTNAME/remote/$node/
+ done
+ else
+ # Sync local encrypted backup.
+ echo "Syncing /var/backups/duplicity/..."
+ mkdir -p /$MEDIA/$HOSTNAME/duplicity
+ $RSYNC /var/backups/duplicity/ /$MEDIA/$HOSTNAME/duplicity/
+
+ # Sync remote backups.
+ for node in `ls /var/backups/remote/`; do
+ echo "Syncing /var/backups/remote/$node/..."
+ mkdir -p /$MEDIA/$HOSTNAME/remote/$node/
+ $RSYNC /var/backups/remote/$node/ /$MEDIA/$HOSTNAME/remote/$node/
+ done
+
+ # Copy encrypted images.
+ if [ -d "$IMAGES" ]; then
+ for image in `find $IMAGES -name '*.img' -type f`; do
+ echo "Copying image to /$MEDIA/$HOSTNAME/images/`dirname $image`"
+ mkdir -p /$MEDIA/$HOSTNAME/images/`dirname $image`
+ $CP $image /$MEDIA/$HOSTNAME/images/`dirname $image`
+ done
+ fi
+ fi
+}
+
+# Parsing.
+if [ -z "$VOLUME" ]; then
+ echo "usage: $BASENAME <media> [nodes]"
+ exit 1
+else
+ shift
+fi
+
+# Sync backups for each node.
+if [ ! -z "$*" ]; then
+ for NODE in $*; do
+ sync_backups_node
+ done
+else
+ sync_backups_node
+fi