summaryrefslogtreecommitdiffstats
path: root/local/bin/laptop-backup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'local/bin/laptop-backup.sh')
-rwxr-xr-xlocal/bin/laptop-backup.sh38
1 files changed, 38 insertions, 0 deletions
diff --git a/local/bin/laptop-backup.sh b/local/bin/laptop-backup.sh
new file mode 100755
index 0000000..dffaf96
--- /dev/null
+++ b/local/bin/laptop-backup.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+# Fast backup using rsync
+
+if [ $# -ne 2 ]; then
+ echo "Usage: $(basename "$0") /dev/sdX backup"
+ exit 1
+fi
+
+if [ "$(id -u)" -ne 0 ]; then
+ echo "This script must be run as root."
+ exit 1
+fi
+
+rsync_options="-auvP --delete"
+device=$1
+name=$2
+
+# Note: `name` (nor `device`) should not contain spaces
+
+cryptsetup open --type luks $device $name
+if [ $? -ne 0 ]; then
+ # bad device
+ exit 1
+fi
+mount /dev/mapper/$name /mnt/$name
+# TODO: stop backing up /var. Backup is just for Postgres and Mediawiki.
+# `/var` is used by too many applications. Specialy pacman that clutters it
+# with cached binaries.
+rsync $rsync_options /var /mnt/$name # <10G
+rsync $rsync_options /home /mnt/$name # <900G
+rsync $rsync_options /etc /mnt/$name # <20M
+echo "Backup complete."
+df -h | grep -E "${name}|var|home|etc"
+umount /mnt/$name
+cryptsetup close $name
+
+echo "All done. Check \`$ lsblk\` before unplugging the storage device."