Jesus saves. Buddha does incremental backups.
In celebration of World Backup Day, I hereby release my backup strategy.
Features
- daily backup, fully accessible
- compressed storage
- block device encryption
- speed
Requirements
- external harddrive
- modern linux kernel (use Arch Linux!)
- current version of btrfs-progs (I have 0.19.20120110-2)
- a strong password (you may follow this guide or similar)
Daily Routine
- Wake up
- Drink tea
- Go shit
- Exercise Yoga
- Eat breakfast
- Backup ALL the files (during hygiene)
- Leave home
My external harddrive is totally occupied by a LUKS container. After connecting the drive to my laptop, I start like this:
cryptsetup luksOpen /dev/sdb backup
Inside, there is btrfs filesystem, I mount using compression.
mount -o compress -t btrfs /dev/sdb /mnt/backup
For may backups, I use rsync (with delete) to copy my files to an external hard drive. Vanished files will be deleted.
rsync -aPv --delete --exclude downloads --exclude music --exclude .cache /home/nomaster/ /mnt/backup/nomaster/
After each sync, I make a snapshot of this state of my files.
sudo btrfs subvolume snapshot /mnt/backup/nomaster /mnt/backup/nomaster120331
Lastly, I unmount the filesystem and close the container.
sudo umount /mnt sudo cryptsetup luksClose backup
Then, I disconnect the drive.
When my drive will be full at some point in the future, I’m going to remove old snapshots to free space occupied by large files deleted a long time ago.
Initial Setup
I assume the external drive is /dev/sdb. If you have no idea about this, stop right now and come back when you know.
First, make sure, the external drive is clear to use. So mount it and have a look at the files if present.
Overwrite everything with zeroes.
sudo dd if=/dev/zero of=/dev/sdb bs=1024
Format the drive
sudo cryptsetup luksFormat /dev/sdb
(follow the instructions)
Open the crypto container
sudo cryptsetup luksOpen /dev/sdb backup
Create a BTRFS file system
sudo mkfs.btrfs /dev/mapper/backup
Mount it (with compression)
sudo mount -o compress /dev/mapper/backup /mnt
Create a subvolume
sudo btrfs subvolume create /mnt/nomaster # <- insert username here
Unmount, close and continue with daily routine.
sudo umount /mnt sudo cryptsetup luksClose backup