LoginSignup
1
2

More than 5 years have passed since last update.

ZFS on Linuxでスナップショットを作成し一定期間経過後破棄

Last updated at Posted at 2016-04-21

はじめに

ZFS on LinuxでZFSを使い始めたのですが、自動的にスナップショットを作成し、一定期間経過したら削除したくなりました。cronで自動運用する方法を公開します。

ファイル作成

$ touch /etc/cron.daily/zfs-snapshot
$ chmod u=rwx,g=rx,o=rx /etc/cron.daily/zfs-snapshot #実行属性を付ける

ファイル内容

#!/bin/bash
snapshot () {
    #第1引数: ファイルシステムまたはボリュームを指定
    #第2引数: スナップショットの先頭に付ける文字列を指定
    date=$(date -u +'%Y%m%dT%H%M%SZ') #20151231T235959Z形式
    zfs snapshot ${1}@${2}${date}
}
snapshot_destroy () {
    #第1引数: ファイルシステムまたはボリュームを指定
    #第2引数: スナップショットの先頭に付ける文字列を指定
    #第3引数: 保存期間を指定(この場合30日間保存)
    date=$(date -u -d "${3}" +%Y%m%dT%H%M%SZ)
    for snapshot in $(zfs list -H -o name -t snapshot -r ${1}); do #スナップショットの一覧を取得
        snapshot_date=${snapshot#*@${2}} #日付部分を切り出し
        if [[ ${snapshot_date} =~ ^[0-9]{8}T[0-9]{6}Z$ ]]; then #日付の形式を正規表現で確認
            if [[ ${snapshot_date} < ${date} ]]; then #保存期間を過ぎていたら
                echo "destroy ${snapshot}"
                zfs destroy ${snapshot} #破棄
            fi
        fi
    done
}

snapshot 'tank/home' 'auto'

snapshot_destroy 'tank/home' 'auto' '30 days ago'

SambaからWindowsのエクスプローラーでスナップショットを開いていると cannot destroy snapshot tank/home@20151231T235959Z: dataset is busy と表示され破棄できませんでしたが、エクスプローラーを閉じれば破棄できました。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2