最も古い 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

関連情報