Amazon FSx for NetApp ONTAPのスナップショット機能を試してみた

ボリューム単位じゃなくてファイル単位のリストアしたい? Amazon FSx for NetApp ONTAPならスナップショット機能で簡単に実現できます
2022.05.28

Amazon FSx for NetApp ONTAPでボリューム丸ごとリストアじゃなくてファイル単位でリストアしたいな

こんにちは、のんピ(@non____97)です。

皆さんはAmazon FSx for NetApp ONTAP(以降、FSx for ONTAP)でボリューム丸ごとリストアじゃなくてファイル単位でリストアしたいなと思ったことはありますか? 私はあります。

以下記事でFSx for ONTAPのボリュームのバックアップ・リストアを紹介しました。

バックアップ・リストアが簡単にできるのは大変ありがたいですが、バックアップの単位はボリューム単位なので当然リストアする際もボリューム単位で行います。

FSx for ONTAPの一般利用者からすると、「このファイルをリストアしたいだけなのに、ボリュームごとリストアするのはちょっと大袈裟だなぁ...」と思われることもあると考えます。

FSx for ONTAPには、そんな時のためにスナップショット機能があります。

今回は、FSx for ONTAPのスナップショット機能について紹介します。

FSx for ONTAPのスナップショット機能とは

FSx for ONTAPのスナップショット機能とは、定期的にボリューム内の状態をキャプチャする機能です。

[Snapshot] (スナップショット) は、ある時点における Amazon FSx for NetApp ONTAP ボリュームの読み取り専用イメージです。スナップショットは、ボリューム内のファイルの間違った削除や変更からの保護を提供します。スナップショットで、ユーザーは以前のスナップショットから個々のファイルやフォルダを簡単に表示および復元できます。これにより、ユーザーは簡単に変更を元に戻し、ファイルバージョンを比較できます。

(中略)

Amazon FSx ファイルシステム上のスナップショットを使用して、ユーザーは個々のファイルまたはフォルダーの以前のバージョンをすばやく復元できます。これにより、共有ファイルシステムに保存されている削除または変更されたファイルをリカバリできます。管理者の手を借りずに、デスクトップ上で直接セルフサービス方式で行うことができます。このセルフサービスアプローチにより、生産性が向上し、管理のワークロードが軽減されます。

スナップショットの使用 - FSx for ONTAP

一般利用者が個々のファイルやディレクトリを簡単にリストアすることができるので、ファイルを間違えて削除してしまった時もリストアをシステム管理者にお願いする必要はなく、自分で出来てしまうのが最高にありがたいですね。イメージとしてはVolume Shadow Copy Services(VSS)に近いです。

NetAppのスナップショットはパフォーマンスへの影響がなく、スナップショットを作成しても性能劣化はありません。詳細な仕組みについては以下サイトをご覧ください。

FSx for ONTAPの各ボリュームは以下のdefaultというスナップショットポリシーが適用されており、定期的にスナップショットが作成されています。

  • hh:05に1時間単位で作成され、最大6世代保持する毎時スナップショット
  • 月曜日から土曜日の00:10に作成され、最大2世代保持する日次スナップショット
  • 毎週日曜日の00:15に作成され、最大2世代保持する週次スナップショット

スナップショットポリシーは自分で作成することもできます。そのため、ユースケースに合わせて「10分毎にスナップショットを作成し、最大6世代保持」などのスナップショットポリシーを運用することができます。

スナップショットの作成とリストアを試してみた

Amazon Linux 2

早速、スナップショットの作成とリストアを試してます。

まず、Amazon Linux 2からです。

NFSとiSCSIでFSx for ONTAPのボリュームをマウントしています。

$ df -hT
Filesystem                                                                       Type      Size  Used Avail Use% Mounted on
devtmpfs                                                                         devtmpfs  462M     0  462M   0% /dev
tmpfs                                                                            tmpfs     470M     0  470M   0% /dev/shm
tmpfs                                                                            tmpfs     470M  456K  470M   1% /run
tmpfs                                                                            tmpfs     470M     0  470M   0% /sys/fs/cgroup
/dev/nvme0n1p1                                                                   xfs       8.0G  1.7G  6.4G  21% /
/dev/mapper/3600a09806c574231752b53784865462f2                                   ext4      2.9G  9.1M  2.8G   1% /lun/part2
/dev/mapper/3600a09806c574231752b537848654672p1                                  ext4      2.0G  6.1M  1.8G   1% /lun/part1
svm-0a3a78e7c64ff2c5d.fs-0967312eff2f5f5e1.fsx.ap-northeast-1.amazonaws.com:/nfs nfs4      973M  576K  973M   1% /nfs

AWS公式ドキュメントを確認すると、.snapshotという隠しディレクトリ内にスナップショットがあるようです。

  1. 元のファイルがまだ存在し、スナップショット内のファイルによって上書きしたくない場合は、Linux または macOS クライアントを使用して元のファイルの名前を変更するか、別のディレクトリに移動します。
  2. .snapshot ディレクトリで、復元するファイルのバージョンを含むスナップショットを見つけます。
  3. .snapshot ディレクトリからファイルが元々存在していたディレクトリにファイルをコピーします。

スナップショットの使用 - 個々のファイルとフォルダの復元

ls -la /nfsでNFSでボリュームをマウントしているディレクトリ/nfsを確認しても.snapshotという隠しディレクトリはありませんでした。

$ ls -la /nfs
total 8
drwxr-xr-x  3 ssm-user ssm-user 4096 May 27 03:52 .
dr-xr-xr-x 23 root     root      333 May 28 02:24 ..
drwxr-xr-x  2 ssm-user ssm-user 4096 May 25 00:32 aws-backup-test

試しにls -la /nfs/.snapshotで直接ディレクトリを指定してみると、確かにいくつかスナップショットがありました。

$ ls -l /nfs/.snapshot
total 36
drwxr-xr-x 3 ssm-user ssm-user 4096 May 27 03:52 backup-01d01a810dc374e80
drwxr-xr-x 3 ssm-user ssm-user 4096 May 25 00:31 daily.2022-05-27_0010
drwxr-xr-x 3 ssm-user ssm-user 4096 May 27 03:52 daily.2022-05-28_0010
drwxr-xr-x 3 ssm-user ssm-user 4096 May 27 03:52 hourly.2022-05-27_2305
drwxr-xr-x 3 ssm-user ssm-user 4096 May 27 03:52 hourly.2022-05-28_0005
drwxr-xr-x 3 ssm-user ssm-user 4096 May 27 03:52 hourly.2022-05-28_0105
drwxr-xr-x 3 ssm-user ssm-user 4096 May 27 03:52 hourly.2022-05-28_0205
drwxr-xr-x 3 ssm-user ssm-user 4096 May 27 03:52 hourly.2022-05-28_0305
drwxr-xr-x 3 ssm-user ssm-user 4096 May 27 03:52 hourly.2022-05-28_0405

スナップショットのディレクトリを確認してみると、前回の記事で使用したテストファイルが保存されていました。

$ ls -l /nfs/.snapshot/hourly.2022-05-28_0405
total 4
drwxr-xr-x 2 ssm-user ssm-user 4096 May 25 00:32 aws-backup-test

$ ls -l /nfs/.snapshot/hourly.2022-05-28_0405/aws-backup-test/
total 0
-rw-r--r-- 1 ssm-user ssm-user 35 May 25 00:32 aws-backup-test.txt

$ cat /nfs/.snapshot/hourly.2022-05-28_0405/aws-backup-test/aws-backup-test.txt
This is a test file of AWS Backup.

一方、iSCSIでマウントしているボリュームのディレクトリ/nfsを確認しても.snapshotという隠しディレクトリはありませんでした。iSCSIの場合、パーティションを切っていることもあり、こちらからは参照できないかもしれません。

$ ls -l /lun/part1/.snapshot
ls: cannot access /lun/part1/.snapshot: No such file or directory

$ sudo ls -l /lun/part1/.snapshot
ls: cannot access /lun/part1/.snapshot: No such file or directory

それでは、NFSでマウントしているボリュームのスナップショットを使ってリストアしてみます。

まず、/nfs/aws-backup-test/を削除します。

# ディレクトリの削除
$ rm -rf /nfs/aws-backup-test/

# ディレクトリが削除されたことを確認
$ ls -l /nfs/aws-backup-test/
ls: cannot access /nfs/aws-backup-test/: No such file or directory

$ ls -l /nfs/
total 0

あとは.snapshot内にあるリストアしたいディレクトリを削除したディレクトリにコピーします。

# スナップショットからリストア
$ cp -pr /nfs/.snapshot/hourly.2022-05-28_0405/aws-backup-test /nfs/aws-backup-test

# リストアされたことを確認
$ ls -l /nfs
total 4
drwxr-xr-x 2 ssm-user ssm-user 4096 May 25 00:32 aws-backup-test

$ ls -l /nfs/aws-backup-test/aws-backup-test
total 0
-rw-r--r-- 1 ssm-user ssm-user 35 May 25 00:32 aws-backup-test.txt

# リストアしたディレクトリとファイルのタイムスタンプが保持されていることを確認
$ date
Sat May 28 05:06:01 UTC 2022

めちゃくちゃ簡単ですね。

Windows Server

Windows Serverも試してみます。

SMBでマウントしているZドライブを確認すると.snapshotフォルダがありました。

# Zドライブにマウントされていることを確認
> Get-PSDrive

Name           Used (GB)     Free (GB) Provider      Root                                                                        CurrentLocation
----           ---------     --------- --------      ----                                                                        ---------------
Alias                                  Alias
C                  14.41         15.59 FileSystem    C:\                                                                        Windows\system32
Cert                                   Certificate   \
D                   0.03          8.99 FileSystem    D:\
E                   0.03          8.99 FileSystem    E:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan
Z                   0.00          0.95 FileSystem    \\SINGLE-AZ-SVM.fsx-dev.classmet...

# スナップショットを確認
> dir Z:\.snapshot


    ディレクトリ: Z:\.snapshot


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022/05/25      0:21                backup-040de54495bdc719a
d-----        2022/05/25      0:21                backup-0edac0287df3bb291
d-----        2022/05/25      0:21                daily.2022-05-27_0010
d-----        2022/05/25      0:21                daily.2022-05-28_0010
d-----        2022/05/25      0:21                hourly.2022-05-28_0005
d-----        2022/05/25      0:21                hourly.2022-05-28_0105
d-----        2022/05/25      0:21                hourly.2022-05-28_0205
d-----        2022/05/25      0:21                hourly.2022-05-28_0305
d-----        2022/05/25      0:21                hourly.2022-05-28_0405
d-----        2022/05/25      0:21                hourly.2022-05-28_0505
d-----        2022/05/20      5:52                weekly.2022-05-22_0015

> dir Z:\.snapshot\hourly.2022-05-28_0505\


    ディレクトリ: Z:\.snapshot\hourly.2022-05-28_0505


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022/05/25      0:23                aws-backup-test

> dir Z:\.snapshot\hourly.2022-05-28_0505\aws-backup-test\


    ディレクトリ: Z:\.snapshot\hourly.2022-05-28_0505\aws-backup-test


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2022/05/25      0:23             36 aws-backup-test.txt

Windows Serverの場合もiSCSIでマウントしているボリュームのDドライブを確認しても.snapshotという隠しフォルダはありませんでした。

> dir D:\.snapshot
dir : パス 'D:\.snapshot' が存在しないため検出できません。
発生場所 行:1 文字:1
+ dir D:\.snapshot
+ ~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (D:\.snapshot:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

それでは、SMBでマウントしているボリュームのスナップショットを使ってリストアしてみます。

# フォルダの削除
> Remove-Item -Recurse Z:\aws-backup-test

# フォルダが削除されたことを確認
> dir Z:\

# スナップショットがリストアされたことを確認
> Copy-Item -Container -Recurse Z:\.snapshot\hourly.2022-05-28_0505\aws-backup-test Z:\aws-backup-test

# リストアされたことを確認
> dir Z:\


    ディレクトリ: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022/05/28     12:39                aws-backup-test


> dir Z:\aws-backup-test\


    ディレクトリ: Z:\aws-backup-test


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2022/05/25      0:23             36 aws-backup-test.txt

# リストアしたフォルダとファイルのタイムスタンプが保持されていることを確認
> date

2022年5月28日 5:31:31

こちらも簡単にリストアできました。

なお、AWS公式ドキュメントに記載の、エクスプローラーの以前のバージョンの復元からリストアも試してみたのですが、利用可能な以前のバージョンはありませんと表示されてしまいました。

利用可能な以前のバージョンはありませんフォルダ

利用可能な以前のバージョンはありませんファイル

Windows クライアント上のユーザーは、使い慣れた Windows ファイルエクスプローラーインターフェイスを使用して、ファイルを以前のバージョンに復元できます。

  1. ファイルを復元するには、復元するファイルを選択し、コンテキスト (右クリック) メニューから [Restore previous versions] (以前のバージョンの復元) を選択します。 2.その後、ユーザーは [Previous Versions] (以前のバージョン) リストから以前のバージョンを表示および復元できます。

スナップショットのデータは読み取り専用です。[Previous Versions] (以前のバージョン) タブにリストされているファイルおよびフォルダに変更を加える場合、変更するファイルとフォルダのコピーを書き込み可能な場所に保存し、そのコピーを変更する必要があります。

>スナップショットの使用 - 個々のファイルとフォルダの復元

また、エクスプローラーからZ:\.snapshotにアクセスしようとしたところ、アクセスできませんでした。

Z:\.snapshotへのアクセス失敗

試しにnet use Y: \\SINGLE-AZ-SVM.fsx-dev.classmethod.jp\C$\smb_encryptionで共有smb_encryptionではなく、共有C$内のsmb_encryptionフォルダをYドライブにマウントしたところ、以前のバージョンの復元で複数のバージョンを確認することができました。

利用可能な複数のバージョンを確認

Y:\.snapshotでスナップショットを確認することもできました。

Y:\.snapshotでスナップショットを確認

こちらの挙動は仕様です。ONTAP8.3.1なので少し古いですが、NetApp公式ドキュメントに記載がありました。

SVM管理者は、showsnapshot共有プロパティを有効または無効にすることで、Windowsクライアントのユーザが共有の~snapshotディレクトリを表示してアクセスすることができるかどうかを制御します。

showsnapshot共有プロパティが無効になっている場合、SMB 2.xを使用するWindowsクライアントのユーザは、~snapshotディレクトリのパスまたはディレクトリ内の特定のSnapshotコピーのパスを手動で入力しても、~snapshotディレクトリを表示できず、~snapshotディレクトリ内のSnapshotコピーにアクセスできません。

showsnapshot共有プロパティが有効になっている場合でも、SMB 2.xを使用するWindowsクライアントのユーザは、共有のルートにある、または共有のルートより下のジャンクションまたはディレクトリ内にある~snapshotディレクトリを表示できません。 ただし、共有に接続したあと、共有パスの末尾に手動で\~snapshotを追加することで、非表示の~snapshotディレクトリにアクセスできます。 非表示の~snapshotディレクトリには、2つのエントリ ポイントからアクセスできます。

  • 共有のルート
  • 共有スペースのすべてのジャンクション ポイント 非表示の~snapshotディレクトリには、共有内のジャンクション以外のサブディレクトリからはアクセスできません。

SMB 2.xを使用するWindowsクライアントからの~snapshotディレクトリへのアクセス方法

実際、試しにvserver cifs share properties addshowsnapshotshow-previous-versionsプロパティを共有に追加しましたが、変わらずエクスプローラーからZ:\.snapshotにはアクセスできませんでした。

# 現在のボリュームのプロパティを確認
::> vserver cifs share properties show
Vserver           Share                      Properties
----------------  -------------------------  -----------------------------
classmethod-dev-fsx-netapp-ontap-single-az-svm
                                             oplocks
                  c$                         browsable
                                             changenotify
                                             encrypt-data
                                             show-previous-versions
classmethod-dev-fsx-netapp-ontap-single-az-svm
                                             browsable
                  ipc$
classmethod-dev-fsx-netapp-ontap-single-az-svm
                                             browsable
                  smb_encryption             encrypt-data
classmethod-dev-fsx-netapp-ontap-single-az-svm
                                             browsable
                  smb_encryption_restore     encrypt-data
4 entries were displayed.

# "showsnapshot" と "show-previous-versions" プロパティを追加
::> vserver cifs share properties add -share-name smb_encryption_restore -share-properties showsnapshot, show-previous-versions

# "showsnapshot" と "show-previous-versions" プロパティが追加されたことを確認
::> vserver cifs share properties show
Vserver           Share                      Properties
----------------  -------------------------  -----------------------------
classmethod-dev-fsx-netapp-ontap-single-az-svm
                                             oplocks
                  c$                         browsable
                                             changenotify
                                             encrypt-data
                                             show-previous-versions
classmethod-dev-fsx-netapp-ontap-single-az-svm
                                             browsable
                  ipc$
classmethod-dev-fsx-netapp-ontap-single-az-svm
                                             browsable
                  smb_encryption             encrypt-data
classmethod-dev-fsx-netapp-ontap-single-az-svm
                                             browsable
                  smb_encryption_restore     showsnapshot
                                             encrypt-data
                                             show-previous-versions
4 entries were displayed.

手動で作成したスナップショットからリストア

次に手動で作成したスナップショットからリストアしてみます。

Amazon Linux 2とWindows Serverとどちらも試してみましたが、特に異なる点はなかったのでAmazon Linux 2で試した内容のみ紹介します。

検証な流れとしては以下の通りです。

  1. 適当なファイルを数個作成する
  2. 手動でスナップショットを作成する
  3. 作成したファイルを削除する
  4. スナップショットから削除したファイルをリストアする

それではやっていきます。まず、以下のように適当なファイルを作成します。

# "/nfs/snapshot-test" 配下に "snapshot-test_xx.txt" というファイル10個作成
$ mkdir /nfs/snapshot-test
$ cd /nfs/snapshot-test
$ touch snapshot-test_{1..10}.txt
$ ls -1 | xargs -I {} bash -c 'echo "This is a test file of NetApp ONTAP Snapshot" > {}'

# ファイルが作成されたことを確認
$ ls -l
total 0
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_10.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_1.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_2.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_3.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_4.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_5.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_6.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_7.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_8.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_9.txt

NetApp ONTAP CLIで手動でスナップショットを作成します。

# "classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs" というボリュームのスナップショットを作成
::> volume snapshot create -volume classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs -snapshot manual_snapshot_2022-05-28_0910 -comment "Manual snapshot"

# スナップショットが作成されたことを確認
::> volume snapshot show -volume classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs
                                                                 ---Blocks---
Vserver  Volume   Snapshot                                  Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
classmethod-dev-fsx-netapp-ontap-single-az-svm
         classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs
                  daily.2022-05-27_0010                    456KB     0%   49%
                  backup-01d01a810dc374e80                 476KB     0%   50%
                  daily.2022-05-28_0010                    372KB     0%   44%
                  hourly.2022-05-28_0305                   248KB     0%   34%
                  hourly.2022-05-28_0405                   380KB     0%   45%
                  hourly.2022-05-28_0505                   304KB     0%   39%
                  hourly.2022-05-28_0605                   312KB     0%   40%
                  hourly.2022-05-28_0705                   300KB     0%   39%
                  hourly.2022-05-28_0805                   152KB     0%   24%
                  manual_snapshot_2022-05-28_0910          136KB     0%   22%
10 entries were displayed.

#
::> volume snapshot show-delta -volume classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs -snapshot1 manual_snapshot_2022-05-28_0910 -snapshot2 hourly.2022-05-28_0505
A total of 1163264 bytes (284 blocks) are different. Elapsed time between the Snapshot copies: 3h 5m 37s.

次にファイルを削除します。

# ディレクトリごとファイルを削除
$ rm -rf /nfs/snapshot-test

# ディレクトリが削除されたことを確認
$ ls -l /nfs/
total 4
drwxr-xr-x 2 ssm-user ssm-user 4096 May 25 00:32 aws-backup-test

スナップショットからリストアします。NetApp ONTAP CLIからもvolume snapshot restoreでリストアできるようなので、そちらの方法でやってみます。

::> volume snapshot restore -volume classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs -snapshot manual_snapshot_2022-05-28_0910

Warning: Quota rules currently enforced on volume "classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs" might change during this
         operation. If the currently enforced quota rules are different from those in Snapshot copy
         "manual_snapshot_2022-05-28_0910", you might have to resize or reinitialize quotas on this volume after this operation.
Do you want to continue? {y|n}: y

Warning: Export policies currently enforced on the qtrees of volume "classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs" will not
         change during this operation. If the currently enforced export policies are different from those in Snapshot copy
         "manual_snapshot_2022-05-28_0910", reassign the export policies of the qtrees on this volume after this operation.
Do you want to continue? {y|n}: y

リストア後、ディレクトリを確認すると確かにリストアできていました。

$ ls -l /nfs/
total 8
drwxr-xr-x 2 ssm-user ssm-user 4096 May 25 00:32 aws-backup-test
drwxr-xr-x 2 ssm-user ssm-user 4096 May 28 06:18 snapshot-test

$ ls -l /nfs/snapshot-test/
total 0
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_10.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_1.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_2.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_3.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_4.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_5.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_6.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_7.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_8.txt
-rw-r--r-- 1 ssm-user ssm-user 45 May 28 06:19 snapshot-test_9.txt

スナップショットポリシーの作成と割り当て

最後にスナップショットポリシーの作成と割り当てを試してみます。

今回は10分間隔で最大6世代保持するスナップショットポリシーを作成します。

job schedule cron show10分毎というジョブスケジュールがあるかどうか確認します。

::> job schedule cron show
Cluster Vserver  Name        Description
------- -------- ----------- --------------------------------------------------
FsxId0967312eff2f5f5e1
        FsxId0967312eff2f5f5e1
                 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
28 entries were displayed.

10minというズバリのジョブスケジュールがありました。

こちらの10minを指定してスナップショットポリシーを作成します。

# スナップショットポリシーの作成
::> volume snapshot policy create -policy snapshot_policy_every_10_min -enabled true -schedule1 10min -count1 6 -prefix1 every_10_min

# 意図した値でスナップショットポリシーが作成されたか確認
::> volume snapshot policy show
Vserver: classmethod-dev-fsx-netapp-ontap-single-az-svm
                         Number of Is
Policy Name              Schedules Enabled Comment
------------------------ --------- ------- ----------------------------------
default                          3 true    Default policy with hourly, daily & weekly schedules.
    Schedule               Count     Prefix                 SnapMirror Label
    ---------------------- -----     ---------------------- -------------------
    hourly                     6     hourly                 -
    daily                      2     daily                  daily
    weekly                     2     weekly                 weekly

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

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

snapshot_policy_every_10_min     1 true    -
    Schedule               Count     Prefix                 SnapMirror Label
    ---------------------- -----     ---------------------- -------------------
    10min                      6     every_10_min           -

4 entries were displayed.

作成したスナップショットポリシーをボリュームに割り当てます。

# 現在ボリュームに割り当たっているスナップショットポリシーを確認
::> volume show -volume classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs -fields snapshot-policy
vserver                                        volume                                                snapshot-policy
---------------------------------------------- ----------------------------------------------------- ---------------
classmethod-dev-fsx-netapp-ontap-single-az-svm classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs default

# 作成したスナップショットポリシーに変更
::> volume modify -volume classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs -snapshot-policy snapshot_policy_every_10_min

Warning: You are changing the Snapshot policy on volume "classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs" to
         "snapshot_policy_every_10_min". 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 classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs of Vserver classmethod-dev-fsx-netapp-ontap-single-az-svm.

# 現在ボリュームに割り当たっているスナップショットポリシーが変更されたか確認
::> volume show -volume classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs -fields snapshot-policy
vserver                                        volume                                                snapshot-policy
---------------------------------------------- ----------------------------------------------------- ----------------------------
classmethod-dev-fsx-netapp-ontap-single-az-svm classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs snapshot_policy_every_10_min

作成したスナップショットポリシーをボリュームに割り当てたことを確認したら、スナップショットが10分毎に作成されたか確認するため放置します。

# 17:52 に確認
::> volume snapshot show -volume classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs
                                                                 ---Blocks---
Vserver  Volume   Snapshot                                  Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
classmethod-dev-fsx-netapp-ontap-single-az-svm
         classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs
                  daily.2022-05-27_0010                    456KB     0%   52%
                  backup-01d01a810dc374e80                 476KB     0%   53%
                  daily.2022-05-28_0010                    372KB     0%   47%
                  hourly.2022-05-28_0305                   248KB     0%   37%
                  hourly.2022-05-28_0405                   380KB     0%   48%
                  hourly.2022-05-28_0505                   304KB     0%   42%
                  hourly.2022-05-28_0605                   312KB     0%   43%
                  hourly.2022-05-28_0705                   300KB     0%   42%
                  hourly.2022-05-28_0805                   152KB     0%   27%
                  manual_snapshot_2022-05-28_0910          352KB     0%   46%
                  every_10_min.2022-05-28_0850             136KB     0%   25%
11 entries were displayed.

# 18:23 に確認
::> volume snapshot show -volume classmethod_dev_fsx_netapp_ontap_single_az_volume_smb_encryption
                                                                 ---Blocks---
Vserver  Volume   Snapshot                                  Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
classmethod-dev-fsx-netapp-ontap-single-az-svm
         classmethod_dev_fsx_netapp_ontap_single_az_volume_smb_encryption
                  weekly.2022-05-22_0015                   484KB     0%   55%
                  backup-040de54495bdc719a                 464KB     0%   54%
                  daily.2022-05-27_0010                    428KB     0%   52%
                  backup-0edac0287df3bb291                 488KB     0%   55%
                  daily.2022-05-28_0010                    412KB     0%   51%
                  hourly.2022-05-28_0305                   316KB     0%   44%
                  hourly.2022-05-28_0405                   148KB     0%   27%
                  hourly.2022-05-28_0505                   432KB     0%   52%
                  hourly.2022-05-28_0605                   148KB     0%   27%
                  hourly.2022-05-28_0705                   332KB     0%   45%
                  hourly.2022-05-28_0805                   176KB     0%   31%
                  manual_snapshot_2022-05-28_0910          336KB     0%   46%
                  every_10_min.2022-05-28_0850             272KB     0%   40%
                  every_10_min.2022-05-28_0900             140KB     0%   26%
                  every_10_min.2022-05-28_0910             252KB     0%   39%
                  every_10_min.2022-05-28_0920             136KB     0%   25%
16 entries were displayed.

# 21:16 に確認
::> volume snapshot show -volume classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs
                                                                 ---Blocks---
Vserver  Volume   Snapshot                                  Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
classmethod-dev-fsx-netapp-ontap-single-az-svm
         classmethod_dev_fsx_netapp_ontap_single_az_volume_nfs
                  daily.2022-05-27_0010                    456KB     0%   46%
                  backup-01d01a810dc374e80                 476KB     0%   47%
                  daily.2022-05-28_0010                    372KB     0%   41%
                  hourly.2022-05-28_0305                   248KB     0%   31%
                  hourly.2022-05-28_0405                   380KB     0%   41%
                  hourly.2022-05-28_0505                   304KB     0%   36%
                  hourly.2022-05-28_0605                   312KB     0%   37%
                  hourly.2022-05-28_0705                   300KB     0%   36%
                  hourly.2022-05-28_0805                   152KB     0%   22%
                  manual_snapshot_2022-05-28_0910          360KB     0%   40%
                  every_10_min.2022-05-28_1120             284KB     0%   34%
                  every_10_min.2022-05-28_1130             144KB     0%   21%
                  every_10_min.2022-05-28_1140             144KB     0%   21%
                  every_10_min.2022-05-28_1150             144KB     0%   21%
                  every_10_min.2022-05-28_1200             280KB     0%   34%
                  every_10_min.2022-05-28_1210             144KB     0%   21%
16 entries were displayed.

確かに10分毎にスナップショットを作成し、最大6世代保持していることが分かりました。

普段使いはスナップショットからリストアするのが簡単

Amazon FSx for NetApp ONTAPでスナップショットの作成とリストアを試してみました。

普段運用していてボリューム丸ごとリストアする場面よりもファイル単位でリストアする場面の方が圧倒的に多いと思います。

そのような場面ではスナップショット機能は大変重宝しそうです。

また、スナップショットには簡単にアクセスできるので、「そういえばあの時、このファイルのどこを修正したんだっけ...」といった時にも大活躍します。

$ cat /nfs/snapshot-test/snapshot-test_1.txt
This is a test file of NetApp ONTAP Snapshot

# ファイルに一行追加
$ echo "new line" >> /nfs/snapshot-test/snapshot-test_1.txt

# スナップショットと比較
$ diff -u /nfs/.snapshot/manual_snapshot_2022-05-28_0910/snapshot-test/snapshot-test_1.txt /nfs/snapshot-test/snapshot-test_1.txt
--- /nfs/.snapshot/manual_snapshot_2022-05-28_0910/snapshot-test/snapshot-test_1.txt	2022-05-28 06:19:04.746293000 +0000
+++ /nfs/snapshot-test/snapshot-test_1.txt	2022-05-28 08:24:06.476463000 +0000
@@ -1 +1,2 @@
 This is a test file of NetApp ONTAP Snapshot
+new line

FSx for ONTAPを使うのであればスナップショット機能を使わない手はないですね。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!