はじめに
SnapVaultは、NetApp社の提供するStorageであるONTAPのデータ保護技術の一部で、バックアップとアーカイブ機能で、データを二次ストレージに効率的にバックアップし、長期間保持することができます。

操作自体は全てsnapmirrorコマンドで実施しているので、分かり難いのですが、端的な違いとしては、Source側よりも多くの世代のVolume Snapshot世代をReplication先に保持できるのがSnapVaultになります。
本記事では、オンプレミス環境でSnapMirrorによるReplication関係をSnapVaultに変換する手順について記載します。
なお、SnapMirror利用時のベストプラクティスはSnapMirror configuration and best practices guide for ONTAP 9を参照下さい。
何をしたい?できる?
- SnapMirrorの挙動を再確認
- SnapMirrorのPolicy変更とラベル定義を行い、SnapVaultとして利用
記事における環境情報
本記事では、以下の環境で実施した内容となります。
- ONTAP : 9.13.1
本記事では、既にSnapMirrorが構築されている環境を前提としています。
環境のイメージとしては以下の通り
Source(本番) Cluster01側 => Destination(DR) Cluster02側という方向で転送します。
SnapMirrorの挙動確認
まずは、全Snapshotが転送されているSnapMirror環境について、
Destination側(Mirror先)だけSnapshot世代が増える事が無い事を確認します。
1. Snapshot世代の比較
Mirror元とMirror先にSnapMirror用のSnapshotとは別に、
user_sanp01,user_sanp02が存在していることが確認できます。

# Cluster#1側の状態
> snapshot show -vserver svm1 -volume vol01
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
svm1 vol01
user_snap01 140KB 0% 0%
user_snap02 140KB 0% 0%
snapmirror.4e370cc6-aac3-11ee-a59c-0050569d3c7a_2154890291.2024-01-04_074524 144KB 0% 0%
3 entries were displayed.
# Cluster#2側の状態
> snapmirror show -vserver svm1_dr -fields Policy
source-path destination-path policy
----------- ---------------- ------------------
svm1:vol01 svm1_dr:vol01_dr MirrorAllSnapshots
> snapshot show -vserver svm1_dr -volume vol01_dr
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
svm1_dr vol01_dr
snapmirror.4e370cc6-aac3-11ee-a59c-0050569d3c7a_2154890291.2024-01-04_070606 188KB 0% 0%
user_snap01 184KB 0% 0%
user_snap02 184KB 0% 0%
snapmirror.4e370cc6-aac3-11ee-a59c-0050569d3c7a_2154890291.2024-01-04_074524 136KB 0% 0%
4 entries were displayed.
2. Snapshotローテーション実施後
Source側を2世代のローテーションという前提にしているので、user_snap03を作成してからuser_snap01を削除します。
(通常スケジュール利用で作成及び削除される内容、手動で実施している形です)

# Cluster#1から実施
> snapshot create -vserver svm1 -volume vol01 -snapshot user_snap03
> snapshot delete -vserver svm1 -volume vol01 -snapshot user_snap01
Warning: Deleting a Snapshot copy permanently removes data that is stored only in that Snapshot copy. Are you sure you want to
delete Snapshot copy "user_snap01" for volume "vol01" in Vserver "svm1" ?
{y|n}: y
> snapshot show -vserver svm1 -volume vol01
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
svm1 vol01
user_snap02 140KB 0% 0%
snapmirror.4e370cc6-aac3-11ee-a59c-0050569d3c7a_2154890291.2024-01-04_074524 144KB 0% 0%
user_snap03 144KB 0% 0%
3 entries were displayed.
3. SnapMirrorの差分転送を行い、転送されたSnapshotの確認
Destination側のVolumeを所有する為のSVM作成を実施します。
Source側と同じSnapshotが存在する事を確認します。
# Cluster#2側で実施
> snapmirror update -destination-path svm1_dr:vol01_dr
Operation is queued: snapmirror update of destination "svm1_dr:vol01_dr".
> snapshot show -vserver svm1_dr -volume vol01_dr
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
svm1_dr vol01_dr
user_snap02 184KB 0% 0%
snapmirror.4e370cc6-aac3-11ee-a59c-0050569d3c7a_2154890291.2024-01-04_074524 188KB 0% 0%
user_snap03 184KB 0% 0%
snapmirror.4e370cc6-aac3-11ee-a59c-0050569d3c7a_2154890291.2024-01-04_082907 136KB 0% 0%
4 entries were displayed.
SnapVaultへの変更手順
変更前にはスケジュール転送は一旦停止しておきます。
DefaultでVault用のPolicyは用意されていますが、本記事では手動でタイプvaultのPolicy作成する方法を説明します。
なお、Source側のSnapshot保持世代数によっては、Snapshot作成のスケジュールローテーションとSnapMirror転送スケジュールをスクリプトやAPIを使わずにONTAP内で完結させることも可能です。
その場合、タイプをmirror-vaultとして設定することで、管理作業がより簡単になります。
Policy名 | バックアップ側で保持するSnapshot | タイプ |
---|---|---|
XDPDefault | 日次7+週次52の計59世代 | vault |
DailyBackup | 日次7世代 | vault |
MirrorAndVault | 日次7+週次52+Mirror用の計60世代 | mirror-vault |
タイプvaultとmirror-vaultの端的な違いは、Replication(SnapMirror転送)に利用されるBaseとなる
Snapshotを専用のものを別途用意するか、手動や日時作成されるSnapshotをBaseにするかの違いになります。

以下のvault利用を例にすると、転送する際に以下の操作がなされた後の図となってます。
- Source側でSnapshot(vault_sanp03)を作成
- SnapMirror Updateによる転送実施
- SourceでSnapshot(vault_sanp02)を削除
つまり、Source側を日時の1世代でローテーションする事を考えた場合に
スケジュール作成のSnapshotでは古い世代の削除がDestination側のClusterに転送が終わるまで削除できないという意味合いになります。(差分転送出来なくなるので)

1. SnapVault用のSnapMirror Policy作成
バックアップ側で保持するSnapshotを5世代で、test_vaultというラベルの付いたSnapshotのみ転送するようにPolicyの作成とルールの追加をバックアップ側のClusterで実施します。
また、バックアップ側クラスタへ転送する際に、基準となるSnapshotはSnapmirror.XXXというSnapshotから、test_labelというラベルの付いたSnapshotに変更されます。

# Cluster#2側で実施
> snapmirror policy create -vserver svm1_dr -policy test_vault -tries 8 -transfer-priority normal -ignore-atime false -restart always -type vault
> snapmirror policy add-rule -vserver svm1_dr -policy test_vault -snapmirror-label test_label -keep 5
2. SnapMirror用のPolicyを変更
Mirror用のPolicyで作成したSnapMirror関係を上記のVault用のPolicyに変更します。
# Cluster#2側で実施
> snapmirror modify -destination-path svm1_dr:vol01_dr -policy test_vault
Operation succeeded: snapmirror modify for the relationship with destination "svm1_dr:vol01_dr".
> snapmirror show -destination-path svm1_dr:vol01_dr -fields policy
source-path destination-path policy
----------- ---------------- ----------
svm1:vol01 svm1_dr:vol01_dr test_vault
3. snapmirror-labelの付いたSnapshotの作成
Cluster#1側(Source側)で、snapshotの作成を実施します。
本記事では、snapmirror-labelの付いたSnapshotのみ転送される事を確認する為、
snapmirror-labelの無いSnapshotの作成も合わせて実施しています。

# Cluster#1側で実施
> snapshot create -vserver svm1 -volume vol01 -snapshot vault_snap01 -snapmirror-label test_label
> snapshot create -vserver svm1 -volume vol01 -snapshot no_label_snap01
> snapshot show -vserver svm1 -volume vol01 -fields snapmirror-label
vserver volume snapshot snapmirror-label
------- ------ ----------- ----------------
svm1 vol01 user_snap02 -
svm1 vol01 user_snap03 -
svm1 vol01 snapmirror.4e370cc6-aac3-11ee-a59c-0050569d3c7a_2154890291.2024-01-04_082907 -
svm1 vol01 vault_snap01 test_label
svm1 vol01 no_label_snap01 -
5 entries were displayed.
4. snapmirror updateによる差分転送の実施
Labelの付いたsnapshotのみ転送されている事を確認します。
(user_snaXXやsnapmirror.XXはvaultに変更前から転送されていたもの)

# Cluster#2側で実施
> snapmirror update -destination-path svm1_dr:vol01_dr
Operation is queued: snapmirror update of destination "svm1_dr:vol01_dr".
> snapshot show -vserver svm1_dr -volume vol01_dr
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
svm1_dr vol01_dr
user_snap02 184KB 0% 0%
snapmirror.4e370cc6-aac3-11ee-a59c-0050569d3c7a_2154890291.2024-01-04_074524 188KB 0% 0%
user_snap03 184KB 0% 0%
snapmirror.4e370cc6-aac3-11ee-a59c-0050569d3c7a_2154890291.2024-01-04_082907 184KB 0% 0%
vault_snap01 136KB 0% 0%
5 entries were displayed.
Labelの付いたsnapshotを1世代でローテーションを繰り返しても、バックアップ先Clusterには複数世代保持されている事が確認できます。
# Cluster#1側でラベルのついたSnapshot作成を実施
> snapshot create -vserver svm1 -volume vol01 -snapshot vault_snap02 -snapmirror-label test_label
# Cluster#2側で差分転送の実施
> snapmirror update -destination-path svm1_dr:vol01_dr
Operation is queued: snapmirror update of destination "svm1_dr:vol01_dr".
# Cluster#1側でラベルのついた古いSnapshot削除を実施
> snapshot delete -vserver svm1 -volume vol01 -snapshot vault_snap01
Warning: Deleting a Snapshot copy permanently removes data that is stored only in that Snapshot copy. Are you sure you want to
delete Snapshot copy "vault_snap01" for volume "vol01" in Vserver "svm1" ?
{y|n}: y
# Cluster#1側でラベルのついたSnapshot作成を実施
> snapshot create -vserver svm1 -volume vol01 -snapshot vault_snap03 -snapmirror-label test_label
# Cluster#2側で差分転送の実施
> snapmirror update -destination-path svm1_dr:vol01_dr
Operation is queued: snapmirror update of destination "svm1_dr:vol01_dr".
# Cluster#1側でラベルのついた古いSnapshot削除を実施
> snapshot delete -vserver svm1 -volume vol01 -snapshot vault_snap02
Warning: Deleting a Snapshot copy permanently removes data that is stored only in that Snapshot copy. Are you sure you want to
delete Snapshot copy "vault_snap02" for volume "vol01" in Vserver "svm1" ?
{y|n}: y
> snapshot show -vserver svm1 -volume vol01 -fields snapmirror-label
vserver volume snapshot snapmirror-label
------- ------ ----------- ----------------
svm1 vol01 user_snap02 -
svm1 vol01 user_snap03 -
svm1 vol01 no_label_snap01 -
svm1 vol01 vault_snap03 test_label
4 entries were displayed.
# Cluster#2側でSnapshot確認の実施
> snapshot show -vserver svm1_dr -volume vol01_dr
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
svm1_dr vol01_dr
user_snap02 184KB 0% 0%
snapmirror.4e370cc6-aac3-11ee-a59c-0050569d3c7a_2154890291.2024-01-04_074524 188KB 0% 0%
user_snap03 184KB 0% 0%
snapmirror.4e370cc6-aac3-11ee-a59c-0050569d3c7a_2154890291.2024-01-04_082907 184KB 0% 0%
vault_snap01 184KB 0% 0%
vault_snap02 184KB 0% 0%
vault_snap03 136KB 0% 0%
7 entries were displayed
5. 不要なSnapshotの削除
SnapVault用途では無いSnapshotの削除を実行します。
(ここでは、SnapMirror実行時に転送されたuser_snapXXやsnapmirror.XXXを削除)
# Cluster#1側で実施
> snapshot delete -vserver svm1 -volume vol01 -snapshot user_snap02
Warning: Deleting a Snapshot copy permanently removes data that is stored only in that Snapshot copy. Are you sure you want to
delete Snapshot copy "user_snap02" for volume "vol01" in Vserver "svm1" ?
{y|n}: y
> snapshot delete -vserver svm1 -volume vol01 -snapshot user_snap03
Warning: Deleting a Snapshot copy permanently removes data that is stored only in that Snapshot copy. Are you sure you want to
delete Snapshot copy "user_snap03" for volume "vol01" in Vserver "svm1" ?
{y|n}: y
> snapshot delete -vserver svm1 -volume vol01 -snapshot no_label_snap01
Warning: Deleting a Snapshot copy permanently removes data that is stored only in that Snapshot copy. Are you sure you want to
delete Snapshot copy "no_label_snap01" for volume "vol01" in Vserver "svm1" ?
{y|n}: y
> snapshot show -vserver svm1 -volume vol01 -fields snapmirror-label
vserver volume snapshot snapmirror-label
------- ------ ------------ ----------------
svm1 vol01 vault_snap03 test_label
# Cluster#2側で実施
> snapshot delete -vserver svm1_dr -volume vol01_dr -snapshot user*
Warning: Deleting a Snapshot copy permanently removes data that is stored only in that Snapshot copy. Are you sure you want to
delete Snapshot copy "user_snap02" for volume "vol01_dr" in Vserver "svm1_dr" ?
{y|n}: y
Warning: Deleting a Snapshot copy permanently removes data that is stored only in that Snapshot copy. Are you sure you want to
delete Snapshot copy "user_snap03" for volume "vol01_dr" in Vserver "svm1_dr" ?
{y|n}: y
2 entries were acted on.
> snapshot delete -vserver svm1_dr -volume vol01_dr -snapshot snapmirror*
Warning: Deleting a Snapshot copy permanently removes data that is stored only in that Snapshot copy. Are you sure you want to
delete Snapshot copy "snapmirror.4e370cc6-aac3-11ee-a59c-0050569d3c7a_2154890291.2024-01-04_074524" for volume
"vol01_dr" in Vserver "svm1_dr" ?
{y|n}: y
Warning: Deleting a Snapshot copy permanently removes data that is stored only in that Snapshot copy. Are you sure you want to
delete Snapshot copy "snapmirror.4e370cc6-aac3-11ee-a59c-0050569d3c7a_2154890291.2024-01-04_082907" for volume
"vol01_dr" in Vserver "svm1_dr" ?
{y|n}: y
2 entries were acted on.
> snapshot show -vserver svm1_dr -volume vol01_dr
---Blocks---
Vserver Volume Snapshot Size Total% Used%
-------- -------- ------------------------------------- -------- ------ -----
svm1_dr vol01_dr
vault_snap01 184KB 0% 0%
vault_snap02 184KB 0% 0%
vault_snap03 144KB 0% 0%
3 entries were displayed.
6. Destination側のVolumeサイズの拡張
SnapVault用途では、Destination側(Mirror先)のSnapshot保持世代が多くなる為、
差分を確保できるように、Volumeサイズを拡張しておきます。
(手順的には最後である必要は無いです)

# Cluster#2側で10GBから15GBに拡張の実施
> volume size -vserver svm1_dr -volume vol01_dr
vol size: Volume "svm1_dr:vol01_dr" has size 10g.
> volume size -vserver svm1_dr -volume vol01_dr -new-size 15g
vol size: Volume "svm1_dr:vol01_dr" size set to 15g.
Based on the new volume size, the system automatically adjusted the volume autosize settings as follows:
The volume is set to shrink to a minimum of 15g when the volume-used space falls below 80%.
参考及びリンク
SnapMirror configuration and best practices guide for ONTAP 9