
Me parece extraño que no exista un script simple que elimine las instantáneas BTRFS más antiguas una vez que se alcanza la cuota de disco. Era parte de la familia de herramientas BTRFS pero ya no lo es.
Dado que no soy tan buen programador en bash, ¿alguien sabe cómo verificar el espacio libre en el disco y, si alcanza cierto umbral, encontrar cuál es la instantánea BTRFS más antigua y eliminarla? ¡Muchas gracias!
Respuesta1
Bien, no hay respuesta, así que espero que mi propia solución ayude:
#!/bin/bash
value=80 #Disk % threshold - if disk full above, then oldest snapshots will be deleted until disk is below threshold
for i in 1 2 3 4 5 6 7 8 9
do
echo Attempt: $i of 9
echo Getting snapshot list...
to=$(sudo btrfs subvol list /mnt/timeshift/backup/timeshift-btrfs/snapshots)
search="snapshots"
prefix=${to%%$search*}
position=$(awk -v a="$to" -v b=$search 'BEGIN{print index(a,b)}')
fn=$(echo $to | cut -c $(($position+10))-$(($position+28)))
echo Oldest snapshot name: $fn
diskfull=$(df -hP / | awk '{print $5}' |tail -1|sed 's/%$//g')
if [ $value -gt $diskfull ]; then
echo Threshold $value% greater than Used disk $diskfull%
echo should not delete any more snapshots
echo Creating one more snapshot
sudo timeshift --create --comments "automatic"
exit 1
else
echo Threshold $value% is less than Used disk $diskfull%
echo Deleting snapshot $fn...
sudo timeshift --delete --snapshot "$fn"
echo Waiting for changes to be written...
sudo btrfs subvolume sync /
echo Checking if disk space resolved...
fi
done