Earlier I merged my @home subvolume with the @ subvolume, which makes snapshotting and incremental backup up 1/2 the work, since I am creating a snapshot only for @.  This also increases the number of snapshots I can have on my SSD without running into balance problems as quicklly.
I wrote a script to make the snapshot process faster and less error prone, given my shaky typing. It worked well but one weakness became apparent. I listed the existing snapshots and chose which snapshot I wanted to use as the parent for the incremental backup. It became apparent that 99.99999999% of the time is was the snapshot I made previously. By chance today I happened upon this website. It had the answer to the problem of how to pick out the first and second to last snapshot. With that information in hand I rewrote my script, which I saved as:
make_snapshot.sh
	You may want to comment out the DELSNAP commands until your number of archive snapshots hits somewhere between 5 and 10.  Then, the script will maintain the number when you remove the comment flag.
If you see any errors or ways of improving it let me know.
					I wrote a script to make the snapshot process faster and less error prone, given my shaky typing. It worked well but one weakness became apparent. I listed the existing snapshots and chose which snapshot I wanted to use as the parent for the incremental backup. It became apparent that 99.99999999% of the time is was the snapshot I made previously. By chance today I happened upon this website. It had the answer to the problem of how to pick out the first and second to last snapshot. With that information in hand I rewrote my script, which I saved as:
make_snapshot.sh
Code:
	
	#!/bin/bash
#
# script to create backup snapshots to /mnt/snapshots and a differential backup to /backup
# To be run as root from /
#
echo "Mounting drives"
eval "mount /dev/disk/by-uuid/ce2b5741-c01e-4b3d-b6ba-401ad7f7fcdf /mnt"
eval "mount /dev/disk/by-uuid/e84e2cdf-d635-41c5-9f6f-1d0235322f48 /backup"
NOW=$(date +%Y%m%d%H%M)
echo "Making today's snapshot"
MKSNAP='btrfs su snapshot -r /mnt/@ /mnt/snapshots/@'$NOW
eval $MKSNAP
eval 'sync'
eval 'sync'
echo "Finding previous snapshot as parent "
PREVSNAP=""
list=($(ls /mnt/snapshots/))
PREVSNAP=${list[-2]}
NOW=${list[-1]}
echo "Attempting incremental backup"
if [[ -s "/mnt/snapshots/"$PREVSNAP ]]; 
then
    MKINC='btrfs send -p /mnt/snapshots/'$PREVSNAP
    MKINC=$MKINC' /mnt/snapshots/'$NOW
    MKINC=$MKINC' | btrfs receive /backup'
    echo $MKINC
    eval $MKINC
    eval 'sync'
    eval 'sync'
    eval "sync"
    DELSNAP='btrfs subvol delete -C /mnt/snapshots/'${list[0]}
    eval $DELSNAP
    eval 'sync'
    eval 'sync'
    eval 'sync'
    list=''
    list=($(ls /backup))
    DELSNAP='btrfs subvol delete -C /backup/'${list[0]}
    eval $DELSNAP
    eval 'sync'
    eval 'sync'
    eval 'sync'
    echo "Snapshots completed, oldest snapshots deleted"
    eval 'umount /backup'
    eval 'umount /mnt'
    echo "Drives unmounted"
else
    echo 'Incremental backup failed using '$PREVSNAP' and '$NOW
    echo 'Drives still mounted, ready to clean up'
fi
If you see any errors or ways of improving it let me know.




Comment