In my latest post I did mention the new setup and since I am a litte narcissistic I did tweet this post right away. And a good friend and fellow software craftsman Mark Paluch (@mp911de) instantly claimed the question about data protection (aka backup).
Over the years I did try out several simple backup systems (eg. backup-manager), but it never felt right.
Therefore I started to create some very simple script and by now I am still using it:
#!/bin/bash
SSHFS_MOUNT_SOURCE=sshfs-server.domain:/
SSHFS_MOUNT_TARGET=/mnt/local-backup-mount
BACKUP_PATH="${SSHFS_MOUNT_TARGET}/backup/"
BASE_PATH=/basepath-to-be-used
PUB_KEY_EMAIL=email@some.domain
sshfs "${SSHFS_MOUNT_SOURCE}" "${SSHFS_MOUNT_TARGET}"
cutoff=$(date -d '7 days ago' +"%s")
for BACKUP_ITEM in {all,sub,paths}; do
TMP_TARGET="/tmp-storage/backup-${BACKUP_ITEM}-$(date +"%Y-%m-%d").tar.gz"
GPG_TARGET="${TMP_TARGET}.gpg"
tar -czf "${TMP_TARGET}" "${BASE_PATH}/${BACKUP_ITEM}"
gpg -e -r "${PUB_KEY_EMAIL}" -o "${GPG_TARGET}" "${TMP_TARGET}"
cp "${GPG_TARGET}" "${BACKUP_PATH}"
cutoff=$(date -d '7 days ago' +"%s")
find "${BACKUP_PATH}" -type f | while read fileName; do
fileDate=$(echo $fileName | sed 's/.*-\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\).*/\1/')
fileDateInSeconds=$(date -d "${fileDate}" +%s)
if [ ${fileDateInSeconds} -lt ${cutoff} ]; then
rm ${fileName}
fi
done
rm "${TMP_TARGET}" "${GPG_TARGET}"
done
umount "${SSHFS_MOUNT_TARGET}"It works out quite nicely – but this is far from being a enterprise backup solution 😉