Borg
Introduction
Brief documentation on borg backup system
Setup
Assume following
- <machine>
- is the machine to backup
- <host>
- is the backup host
- /opt/backup
- is the backup location on the backup host <host>
- <user>
- is the ssh user with permission to write into /opt/backup
- <device>
- is the volume group
- <volume>
- is the logical volume
Configure LVM
Based on this howto edit
/etc/lvm/lvm.conf
Search for the word autoextend. By default, the value will be similar to below. Change the 100 to 75 here, if so auto extend threshold is 75 and the auto-extend percent is 20, it will expand the size by 20 Percent
If the snapshot volume reaches 75% it will automatically expand the size of the snap volume by 20% more. Thus, we can expand automatically. Save and exit.
This will save snapshots from overflow drop. This will also help you to save more time. LVM is the only Partition method in which we can expand more and have many features such as thin Provisioning, Striping, Virtual volume, and more Using thin-pool, let us see them in the next topic.
Initialize backup
borg init --encryption=repokey <user>@<host>:/opt/backup/<machine>
or for local backup
borg init --encryption=repokey /opt/backup/<machine>
Export the key
borg key export /opt/backup/<machine> /root/borgbackup-key-<machine>.export
Create LVM snapshot
lvcreate -L 1GB -s -n <volume>-snap /dev/<device>/<volume>
Mount LVM snapshot
mkdir -p /backup/<volume> mount /dev/<device>/<volume>-snap /backup/<volume>
Moiunting XFS volumes
XFS volumes use UUID and it can not be mounted twice with the same UUID
Based on this howto there are 2 things that you can do:
[1] Mount the filesystem without using its UUID
mount -o nouuid /dev/<device>/<volume>-snap /backup/<volume>
or:
[2] Change the UUID of the snapshot LVM
xfs_repair -L /dev/<device>/<volume>-snap xfs_admin -U $(uuidgen) /dev/<device>/<volume>-snap mount /dev/<device>/<volume>-snap /backup/<volume>
Create backup
borg create --progress --stats --compression zstd,10 \ -e 'pp:/backup/root/sys' \ -e 'pp:/backup/root/proc' \ -e 'pp:/backup/root/dev' \ -e 'pp:/backup/root/run' \ -e 'pp:/backup/root/tmp' \ -e 'pp:/backup/root/var/tmp' \ -e 'pp:/backup/root/var/log' \ -e 'pp:/backup/root/home' \ -e 'pp:/backup/root/media' \ /opt/backup/<machine>::{now:%Y-%m-%dT%H:%M:%S} \ /boot /boot/EFI /backup/root
Unmount and remove snapshot==
umount /dev/<device>/<volume>-snap && \ lvremove -y /dev/<device>/<volume>-snap
List archives
borg list /opt/backup/<machine>
List backup
borg list /opt/backup/<machine>::<backup>
Restoring Snapshot or Merging
Unmount first
umount /dev/<device>/<volume>-snap
Merge
lvconvert --merge /dev/<device>/<volume>-snap
Monitor borg process activity
strace -fp $(ps -faxuww | grep borg | grep -v grep | awk '{print $2}') 2>&1| grep openat
On errors
[1] check and verify the backup to ensure the data is consistent
borg check --verify-data /opt/backup/<machine>
[2] remove cache if above does not help
ls ~/.cache/borg/ 96d1fb3386b0a247a4ae6baa44095deac75a839a3fedaf77237663a1b72dc81b CACHEDIR.TAG
mv ~/.cache/borg/ /tmp/ rm -rf ~/.cache/borg/