Skip to content

Instantly share code, notes, and snippets.

@stralytic
Last active October 19, 2022 02:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stralytic/317c00c6cb51634bc3a2e2ffd42f28af to your computer and use it in GitHub Desktop.
Save stralytic/317c00c6cb51634bc3a2e2ffd42f28af to your computer and use it in GitHub Desktop.
Clones snapper / btrfs snapshots from main filesystem to backups.
#!/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