Last active
October 19, 2022 02:05
-
-
Save stralytic/317c00c6cb51634bc3a2e2ffd42f28af to your computer and use it in GitHub Desktop.
Clones snapper / btrfs snapshots from main filesystem to backups.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/zsh | |
if mountpoint -q /backup | |
then | |
echo "Backup already mounted" | |
else | |
echo "Mounting Backup" | |
mount /backup | |
if mountpoint -q /backup | |
then | |
echo "Backup now mounted" | |
else | |
echo "Still can't find Backup" | |
exit | |
fi | |
fi | |
snapper -c root list --disable-used-space --columns number | tr -d " " | grep "^[0-9]" >/tmp/root.list | |
snapper -c backup-root list --disable-used-space --columns number | tr -d " " | grep "^[0-9]" >/tmp/backup-root.list | |
echo -n "Snapshots in /: " | |
cat /tmp/root.list | wc -l | |
echo -n "Snapshots in /backup/: " | |
cat /tmp/backup-root.list | wc -l | |
y=0 | |
for x in $(diff -u /tmp/root.list /tmp/backup-root.list | grep -B 1 -E "^-[0-9]" | tr -d "-") | |
do | |
if [[ $y -gt 0 ]] | |
then | |
mkdir -p /backup/.snapshots/$x | |
cp /.snapshots/$x/info.xml /backup/.snapshots/$x/ | |
btrfs send -p /.snapshots/$y/snapshot /.snapshots/$x/snapshot | btrfs receive /backup/.snapshots/$x | |
fi | |
y=$x | |
done | |
rm /tmp/root.list /tmp/backup-root.list | |
snapper -c home list --disable-used-space --columns number | tr -d " " | grep "^[0-9]" >/tmp/home.list | |
snapper -c backup-home list --disable-used-space --columns number | tr -d " " | grep "^[0-9]" >/tmp/backup-home.list | |
echo -n "Snapshots in /home: " | |
cat /tmp/home.list | wc -l | |
echo -n "Snapshots in /backup/home: " | |
cat /tmp/backup-home.list | wc -l | |
y=0 | |
for x in $(diff -u /tmp/home.list /tmp/backup-home.list | grep -B 1 -E "^-[0-9]" | tr -d "-") | |
do | |
if [[ $y -gt 0 ]] | |
then | |
mkdir -p /backup/home/.snapshots/$x | |
cp /home/.snapshots/$x/info.xml /backup/home/.snapshots/$x/ | |
btrfs send -p /home/.snapshots/$y/snapshot /home/.snapshots/$x/snapshot | btrfs receive /backup/home/.snapshots/$x | |
fi | |
y=$x | |
done | |
rm /tmp/home.list /tmp/backup-home.list |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment