ZFS で、際限なく延々と snapshot をとるのではなく、古い snapshot は自動で消したいよね、というモチベーション。
そこで、こんな script を書いてみた。(自己の責任にてご利用ください。)
以下のように crontab に書いておくと…
@daily /root/bin/zfs_snapshot.sh tank days_later 7 recursive
@weekly /root/bin/zfs_snapshot.sh tank weeks_later 5 recursive
@monthly /root/bin/zfs_snapshot.sh tank months_later 12 recursive
@yearly /root/bin/zfs_snapshot.sh tank years_later 10 recursive
このような感じで、今日 0days_later だった snapshot が明日には 1days_later … というふうにローテーションしていきます。
tank/usr 5.23G 137G 2.64G /usr
tank/usr@0weeks_later 0 - 2.57G -
tank/usr@0months_later 0 - 2.57G -
tank/usr@3days_later 29.5K - 2.57G -
tank/usr@2days_later 6.22M - 2.59G -
tank/usr@1days_later 6.16M - 2.59G -
tank/usr@0days_later 6.16M - 2.59G -
既知の問題
- snapshot が規定数に達していない場合は、zfs destroy, zfs rename がエラーになる
- コメントの英語が変