¿Cómo eliminar automáticamente la instantánea BTRFS más antigua?

¿Cómo eliminar automáticamente la instantánea BTRFS más antigua?

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

información relacionada