Как автоматически удалить самый старый снимок BTRFS?

Как автоматически удалить самый старый снимок BTRFS?

Мне кажется странным, что нет простого скрипта, который удаляет самые старые снимки BTRFS после достижения квоты диска. Он был частью семейства инструментов BTRFS, но больше им не является.

Поскольку я не очень хороший программист на bash - кто-нибудь знает, как проверить свободное место на диске и, если оно достигает определенного порога, найти самый старый снимок BTRFS и удалить его? Большое спасибо!

решение1

Ладно, ответа нет, поэтому надеюсь, что мое собственное решение поможет:

#!/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

Связанный контент