FSx for NetApp ONTAP のスナップショット自動削除設定をする(volume snapshot autodelete modify)

スナップショットの自動削除は、スナップショットが必要以上に取得されボリュームを圧迫しないよう、しきい値を超えたら自動的に削除する設定です。
2024.03.18

コーヒーが好きな emi です。

FSx for NetApp ONTAP(以下 FSxN と省略)ではスナップショットを自動削除する設定があります。本記事ではスナップショット自動削除設定をおこないます。

スナップショットの自動削除とは

スナップショットの自動削除は、「ボリュームサイズに応じたしきい値」または「Snapshot Reserve」を超過した場合に、取得済みのスナップショットを自動で削除する機能です。

データの変更が激しいシステムにおいてスナップショットを短い間隔で取得している場合、大きなスナップショットが大量に作成され、ボリュームを圧迫する可能性があります。この時スナップショットは予約された Snapshot Reserve という領域からあふれ(spill)、使用可能な空き領域を侵食していきます。
ボリュームの使用可能な空き領域が少なくなると、バックアップが失敗したり、iSCSI マウントしたボリュームがオフラインになったり、階層化が止まり書き込み不可になったりします。

スナップショットの自動削除は、スナップショットが必要以上に取得されボリュームを圧迫しないよう、しきい値を超えたら自動的に削除する設定です。

保持世代数の設定とは違う

カスタムスナップショットポリシーでは、-count1 などのオプションでスナップショットを保持する世代数を設定できます。これはあくまで「取得世代数」分だけスナップショットを保持する設定であり、ボリュームサイズに応じて削除されるようなものではありません。

事前準備

FSxN ボリュームサイズは 5GiB で作成しておきます。LUN を 4GiB で設定し、Windows Server に iSCSI 接続しました。

また、今回はあらかじめ Snapshot Reserve を 1% に設定しておきました。Snapshot Reserve の変更方法は以下ブログを参照ください。

ボリュームの空き容量は 18.67% です。

volume show-space で確認したボリュームの内訳(クリックで展開)
FsxId00d1bd3ff74723825::> volume show-space -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1

                          Vserver: emiki-fsxn-svm
                      Volume Name: emiki_fsxn_vol1
                      Volume MSID: 2155477438
                      Volume DSID: 1026
                     Vserver UUID: a292aaa0-e422-11ee-bbde-43b9b7eb70fb
                   Aggregate Name: aggr1
                   Aggregate UUID: f81e95e6-e421-11ee-bbde-43b9b7eb70fb
                         Hostname: FsxId00d1bd3ff74723825-01
                        User Data: 4.02GB
                User Data Percent: 80%
                    Deduplication: 4KB
            Deduplication Percent: 0%
          Temporary Deduplication: -
  Temporary Deduplication Percent: -
              Filesystem Metadata: 356KB
      Filesystem Metadata Percent: 0%
              SnapMirror Metadata: -
      SnapMirror Metadata Percent: -
             Tape Backup Metadata: -
     Tape Backup Metadata Percent: -
                   Quota Metadata: -
           Quota Metadata Percent: -
                           Inodes: 20KB
                   Inodes Percent: 0%
                   Inodes Upgrade: -
           Inodes Upgrade Percent: -
                 Snapshot Reserve: 51.20MB
         Snapshot Reserve Percent: 1%
        Snapshot Reserve Unusable: -
Snapshot Reserve Unusable Percent: -
                   Snapshot Spill: -
           Snapshot Spill Percent: -
             Performance Metadata: 420KB
     Performance Metadata Percent: 0%
                       Total Used: 4.07GB
               Total Used Percent: 81%
         Total Physical Used Size: 17.23MB
         Physical Used Percentage: 0%
                Logical Used Size: 4.07GB
             Logical Used Percent: 81%
                Logical Available: -

FsxId00d1bd3ff74723825::>

Snapshot Reserve: 51.20MBSnapshot Reserve Percent: 1% となっています。

スナップショット自動削除設定

変更前確認

volume snapshot autodelete show コマンドで、変更前の状態を確認します。

実行コマンド

volume snapshot autodelete show -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1

▼実行結果

FsxId00d1bd3ff74723825::> volume snapshot autodelete show -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1

         Vserver Name: emiki-fsxn-svm
          Volume Name: emiki_fsxn_vol1
              Enabled: false
           Commitment: try
         Defer Delete: user_created
         Delete Order: oldest_first
  Defer Delete Prefix: (not specified)
    Target Free Space: 20%
              Trigger: volume
         Destroy List: none
Is Constituent Volume: false

FsxId00d1bd3ff74723825::>

デフォルトでは Enabled: falseTarget Free Space: 20%Trigger: volume になっています。
Delete Order: oldest_first は、スナップショットが自動削除される際古い順から削除するという設定です。

スナップショット自動削除設定

volume snapshot autodelete modify コマンドで、スナップショット自動削除設定を有効にします。

実行コマンド

volume snapshot autodelete modify -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1 -enabled true -target-free-space 18 -trigger snap_reserve
  • -enabled true:スナップショット自動削除設定を有効
  • -target-free-space 18:Target Free Space は「空き領域がここで指定した割合になるまで、スナップショットを削除し続ける」という設定です。今回ボリュームの空き領域が既にデフォルトの 20% を切っているので、削除され過ぎてしまうかと考え、現在の空き容量に合わせて 18% にしました。
  • -trigger snap_reserve:自動削除を開始するトリガーを、今回は Snapshot Reserve を超えた瞬間にします。

▼実行結果

FsxId00d1bd3ff74723825::> volume snapshot autodelete modify -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1 -enabled true -target-free-space 18 -trigger snap_reserve
Volume modify successful on volume emiki_fsxn_vol1 of Vserver emiki-fsxn-svm.

FsxId00d1bd3ff74723825::>

変更後確認

実行コマンド

volume snapshot autodelete show -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1

▼実行結果

FsxId00d1bd3ff74723825::> volume snapshot autodelete show -vserver emiki-fsxn-svm -volume emiki_fsxn_vol1

         Vserver Name: emiki-fsxn-svm
          Volume Name: emiki_fsxn_vol1
              Enabled: true
           Commitment: try
         Defer Delete: user_created
         Delete Order: oldest_first
  Defer Delete Prefix: (not specified)
    Target Free Space: 18%
              Trigger: snap_reserve
         Destroy List: none
Is Constituent Volume: false

FsxId00d1bd3ff74723825::>

Enabled: trueTarget Free Space: 18%Trigger: snap_reserve に変更できました。

Snapshot Reserve に設定した領域からスナップショットがあふれそうになった(spill)際にスナップショットが自動削除されるか確認

では、カスタムスナップショットポリシーを作成して割り当てて、ちゃんとスナップショットが自動削除されるのか検証します。

カスタムスナップショットポリシーは以下トグル内で作成しました。

5 分毎にスナップショットを作成するカスタムスナップショットポリシーの作成(クリックで展開)

以下のブログを参考にしてください。

5 分毎に実行するジョブスケジュール(emiki_5min)の作成

job schedule cron create -vserver emiki-fsxn-svm -name emiki_5min -minute "0,5,10,15,20,25,30,35,40,45,50,55"

▼実行結果

FsxId00d1bd3ff74723825::> job schedule cron create -vserver emiki-fsxn-svm -name emiki_5min -minute "0,5,10,15,20,25,30,35,40,45,50,55"

FsxId00d1bd3ff74723825::>

意図した値でスナップショットジョブスケジュールが作成されたか確認

job schedule cron show

▼ 実行結果

FsxId00d1bd3ff74723825::> job schedule cron show
Cluster Vserver  Name        Description
------- -------- ----------- --------------------------------------------------
FsxId00d1bd3ff74723825
        FsxId00d1bd3ff74723825
                 10min       @:00,:10,:20,:30,:40,:50
                 12-hourly   @0:15,12:15
                 5min        @:00,:05,:10,:15,:20,:25,:30,:35,:40,:45,:50,:55
                 6-hourly    @0:15,6:15,12:15,18:15
                 8hour       @2:15,10:15,18:15
                 daily       @0:10
                 hourly      @:05
                 monthly     1@0:20
                 pg-15-minutely
                             @:10,:25,:40,:55
                 pg-6-hourly @3:03,9:03,15:03,21:03
                 pg-daily    @0:10
                 pg-daily-set2
                             @6:25
                 pg-daily-set3
                             @12:40
                 pg-daily-set4
                             @18:55
                 pg-hourly   @:07
                 pg-hourly-set2
                             @:22
                 pg-hourly-set3
                             @:37
                 pg-hourly-set4
                             @:52
                 pg-remote-15-minutely
                             @:00,:15,:30,:45
                 pg-remote-6-hourly
                             @3:08,9:08,15:08,21:08
                 pg-remote-daily
                             @0:15
                 pg-remote-hourly
                             @:12
                 pg-remote-weekly
                             Sun@0:20
                 pg-weekly   Sun@0:15
                 pg-weekly-set2
                             Tue@4:30
                 pg-weekly-set3
                             Thu@10:44
                 pg-weekly-set4
                             Sat@16:59
                 weekly      Sun@0:15
FsxId00d1bd3ff74723825
        emiki-fsxn-svm
                 emiki_5min  @:00,:05,:10,:15,:20,:25,:30,:35,:40,:45,:50,:55
29 entries were displayed.

FsxId00d1bd3ff74723825::>

スナップショットポリシーの作成

項目
policy_name(スナップショットポリシー名) emiki_snapshot_policy_200_5min
schedule1_name(スケジュール 1) emiki_5min
copies_to_retain1(保持するコピー数) 200
snapshot_prefix1(スナップショット保存時につけるプレフィックス) emiki_5min
volume snapshot policy create -vserver emiki-fsxn-svm -policy emiki_snapshot_policy_200_5min -enabled true -schedule1 emiki_5min -count1 200 -prefix1 emiki_5min

▼ 実行結果例

FsxId00d1bd3ff74723825::> volume snapshot policy create -vserver emiki-fsxn-svm -policy emiki_snapshot_policy_200_5min -enabled true -schedule1 emiki_5min -count1 200 -prefix1 emiki_5min

FsxId00d1bd3ff74723825::>

意図した値でスナップショットポリシーが作成されたか確認

volume snapshot policy show

▼ 実行結果例

FsxId00d1bd3ff74723825::> volume snapshot policy show
Vserver: FsxId00d1bd3ff74723825
                         Number of Is
Policy Name              Schedules Enabled Comment
------------------------ --------- ------- ----------------------------------
default                          3 true    Default policy with hourly, daily & weekly schedules.
    Schedule       Count  Prefix        SnapMirror Label    Retention Period
    -------------- -----  ------------- ------------------  ------------------
    hourly             6  hourly        -                   0 seconds
    daily              2  daily         daily               0 seconds
    weekly             2  weekly        weekly              0 seconds

default-1weekly                  3 true    Default policy with 6 hourly, 2 daily & 1 weekly schedule.
    Schedule       Count  Prefix        SnapMirror Label    Retention Period
    -------------- -----  ------------- ------------------  ------------------
    hourly             6  hourly        -                   0 seconds
    daily              2  daily         -                   0 seconds
    weekly             1  weekly        -                   0 seconds

none                             0 false   Policy for no automatic snapshots.
    Schedule       Count  Prefix        SnapMirror Label    Retention Period
    -------------- -----  ------------- ------------------  ------------------
    -                  -  -             -                   -

Vserver: emiki-fsxn-svm
                         Number of Is
Policy Name              Schedules Enabled Comment
------------------------ --------- ------- ----------------------------------
emiki_snapshot_policy_200_5min   1 true    -
    Schedule       Count  Prefix        SnapMirror Label    Retention Period
    -------------- -----  ------------- ------------------  ------------------
    emiki_5min       200  emiki_5min    -                   0 seconds

4 entries were displayed.

FsxId00d1bd3ff74723825::>

ここでこちらのスクリプトを使用してボリューム内で常にファイルの変更が発生している状態を再現します。

作成したスナップショットポリシーをボリュームに設定します。(途中 y 入力)

実行コマンド

volume modify -volume emiki_fsxn_vol1 -snapshot-policy emiki_snapshot_policy_200_5min

▼実行結果

FsxId00d1bd3ff74723825::> volume modify -volume emiki_fsxn_vol1 -snapshot-policy emiki_snapshot_policy_200_5min

Warning: You are changing the Snapshot policy on volume "emiki_fsxn_vol1" to "emiki_snapshot_policy_200_5min".
         Snapshot copies on this volume that do not match any of the prefixes of the new Snapshot policy will not
         be deleted. However, when the new Snapshot policy takes effect, depending on the new retention count,
         any existing Snapshot copies that continue to use the same prefixes might be deleted. See the 'volume
         modify' man page for more information.
Do you want to continue? {y|n}: y
Volume modify successful on volume emiki_fsxn_vol1 of Vserver emiki-fsxn-svm.

FsxId00d1bd3ff74723825::>

スナップショットポリシーが変更できたか確認します。

実行コマンド

volume show -volume emiki_fsxn_vol1 -fields snapshot-policy

▼実行結果

FsxId00d1bd3ff74723825::> volume show -volume emiki_fsxn_vol1 -fields snapshot-policy
vserver        volume          snapshot-policy
-------------- --------------- ------------------------------
emiki-fsxn-svm emiki_fsxn_vol1 emiki_snapshot_policy_200_5min

FsxId00d1bd3ff74723825::>

スナップショットの取得状況を確認します。Snapshot Reserve: 51.20MBSnapshot Reserve Percent: 1% なので、取得したスナップショットの大きさの合計が 51.20MB を大幅に超えることなく古い順に削除されていくような挙動をしてくれれば成功です。

実行コマンド

volume snapshot show -volume emiki_fsxn_vol1

▼ 実行結果

FsxId00d1bd3ff74723825::> volume snapshot show -volume emiki_fsxn_vol1
                                                                 ---Blocks---
Vserver  Volume   Snapshot                                  Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
emiki-fsxn-svm
         emiki_fsxn_vol1
                  emiki_5min.2024-03-17_1335              9.26MB     0%   36%
                  emiki_5min.2024-03-17_1340              8.99MB     0%   35%
                  emiki_5min.2024-03-17_1345              9.47MB     0%   36%
                  emiki_5min.2024-03-17_1350              8.72MB     0%   34%
4 entries were displayed.

FsxId00d1bd3ff74723825::>
FsxId00d1bd3ff74723825::> volume snapshot show -volume emiki_fsxn_vol1
                                                                 ---Blocks---
Vserver  Volume   Snapshot                                  Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
emiki-fsxn-svm
         emiki_fsxn_vol1
                  emiki_5min.2024-03-17_1340              8.99MB     0%   35%
                  emiki_5min.2024-03-17_1345              9.47MB     0%   36%
                  emiki_5min.2024-03-17_1350              9.13MB     0%   35%
                  emiki_5min.2024-03-17_1355              9.14MB     0%   35%
4 entries were displayed.

FsxId00d1bd3ff74723825::>
FsxId00d1bd3ff74723825::> volume snapshot show -volume emiki_fsxn_vol1
                                                                 ---Blocks---
Vserver  Volume   Snapshot                                  Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
emiki-fsxn-svm
         emiki_fsxn_vol1
                  emiki_5min.2024-03-17_1345              9.47MB     0%   36%
                  emiki_5min.2024-03-17_1350              9.13MB     0%   36%
                  emiki_5min.2024-03-17_1355              9.14MB     0%   36%
                  emiki_5min.2024-03-17_1400              9.50MB     0%   37%
                  emiki_5min.2024-03-17_1405              3.50MB     0%   18%
5 entries were displayed.

FsxId00d1bd3ff74723825::>

スナップショットの保持世代数は 200 にしていますが、大体 4~5 つスナップショットを取得した時点で古いスナップショットが削除されているのが分かります。意図した挙動であることが確認できました。

スナップショットの自動削除設定によりバックアップのためのスナップショット取得が失敗すると、それに伴いバックアップも失敗する

2024/3/21 追記

FSxN のバックアップは内部的に SnapMirror という ONTAP 独自のスナップショットを利用したブロックレベルコピーを使っているので、バックアップ時に差分を見るためのスナップショットが取得されています。

また、スナップショットの自動削除設定では、SnapMirror によってロックされているスナップショットは削除されません。

削除されないスナップショット
デフォルトでは 、Snapshotの自動削除では、SnapMirrorによってロックされているSnapshot、ボリューム、 LUN、NVMeネームスペース、 ファイルのクローンは削除されません。
Snapshot の自動削除の使用方法 - NetApp

つまり、スナップショットの自動削除設定を有効化した状態で、バックアップにより Snapshot Reserve を超えるような巨大なスナップショットが一発で取得された場合、SnapMirror でロックされているため削除することができず、スナップショットは残っているもののバックアップには失敗しているという状態になります。

Amazon FSx was unable to create your backup because the volume's Snapshot autodelete policy is deleting the backup snapshot before the backup can be created. To continue taking Amazon FSx backups, please modify your Snapshot autodelete policy to ensure there's sufficient space in the Snapshot reserve for the backup snapshot. For more information, see https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/snapshots-ontap.html#snapshot-autodelete-policy.
(機械翻訳)ボリュームのスナップショット自動削除ポリシーが、バックアップを作成する前にバックアップスナップショットを削除しているため、Amazon FSxはバックアップを作成できませんでした。Amazon FSxのバックアップを取り続けるには、スナップショットの自動削除ポリシーを変更して、スナップショットリザーブにバックアップスナップショット用の十分なスペースがあることを確認してください。詳細については、https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/snapshots-ontap.html#snapshot-autodelete-policy を参照してください。

バックアップのために取得された(SnapMirror でロックされた)スナップショットも自動削除設定で削除したい場合、volume snapshot autodelete modify-commitment オプションで削除するように設定することもできるようです。

ただし、そうすると失敗したバックアップが残る形になると思われます。

データ移行中など、データの差分が大きく発生しスナップショットが巨大になることが考えられる場合はスナップショットの取得やバックアップを止めておき、安定稼働が確認できてから余裕をもったボリュームサイジングのうえスナップショットの取得やバックアップ取得をすると良さそうです。

また、FSxN でサポートされているバックアップではなく、同じ大きさの FSxN ファイルシステムを構築し、SnapMirror でデータを同期することでバックアップとする方法もあります。以下ブログをご参照ください。

おわりに

スナップショットの自動削除設定を有効化し、挙動を確認しました。どなたかのお役に立てば幸いです。

参考