Date: 2020-10-18
Update: 2021-01-18
Script: backup.sh, which can also be found at https://github.com/grencez/s/blob/trunk/backup.sh
It’s very important to back up data, and yet I haven’t done it in a while.
My plan is to create an encrypted partition and just rsync everything to it.
I took this approach before and successfully recovered from it after doing something akin to rm -fr /.
This article uses a nonexistent disk named /dev/sdbbq instead of /dev/sdb to prevent you, dear reader, from copy-pasting these commands and hosing your system.
Be confident about what your actual disk is named before proceeding.
I ran fdisk:
sudo fdisk /dev/sdbbq
It has a menu that takes letter commands. I did the following:
g to create GPT partition table. Skip this if the disk already has partitions on it.n to create new partition.1 (default) is the partition number.2048 (default) is the first sector.+460G to allocate 460 GiB for the partition.w to write it.sudo cryptsetup -q --cipher aes-xts-plain64 --key-size 512 --label backup-trinidad luksFormat /dev/sdbbq1
sudo cryptsetup luksOpen /dev/sdbbq1 backupdev
sudo mkfs.ext4 /dev/mapper/backupdev
sudo cryptsetup luksClose backupdev
The actual copying is done with rsync -a --delete /path/to/mounted/root/ /path/to/mounted/backup/.
I use a /path/to/mounted/root/ instead of just / to avoid copying /dev/ and /proc/.
The steps to mount everything are somewhat tedious, so I wrap them in a backup.sh script that just needs to be told what the backup device is:
sudo sh ~/s/backup.sh /dev/sdbbq1
It decrypts /dev/sdbbq1, mounts it as /root/backmnt/, mounts the root directory (and the /boot/ partition) in /dev/rootmnt/, then backs up the data.
It actually backs up to a directory called trinidad (this computer’s hostname) to avoid conflicts with other backups (if there were others).
Explicitly, the commands it runs (as root) are:
mkdir -p /root/backmnt /root/rootmnt
cryptsetup luksOpen /dev/sdbbq1 backupimage
mount /dev/mapper/backupimage /root/backmnt
mount /dev/sda3 /root/rootmnt
mount /dev/sda1 /root/rootmnt/boot
mkdir -p /root/backmnt/trinidad
rsync -a --delete /root/rootmnt/ /root/backmnt/trinidad/
umount /root/rootmnt/boot /root/rootmnt /root/backmnt
cryptsetup luksClose backupimage
rmdir /root/rootmnt /root/backmnt
Sometimes you actually need data from your backup. Be sure to mount it read-only to avoid changing anything!
sudo cryptsetup luksOpen /dev/sdbbq robackup
mkdir -p ~/Desktop/robackup
sudo mount -o ro /dev/mapper/robackup ~/Desktop/robackup
And unmount later:
sudo umount ~/Desktop/robackup
sudo cryptsetup luksClose robackup