【ONTAP管理操作】SnapMirrorからのSnapVaultへの変換について

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

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/b797d18a-2ab8-9308-171a-226dc0515419.png>


操作自体は全てsnapmirrorコマンドで実施しているので、分かり難いのですが、端的な違いとしては、**Source側よりも多くの世代のVolume Snapshot世代をReplication先に保持できるのがSnapVault**になります。

本記事では、**オンプレミス環境でSnapMirrorによるReplication関係をSnapVaultに変換する手順について記載**します。

なお、SnapMirror利用時のベストプラクティスは[SnapMirror configuration and best practices guide for ONTAP 9](https://www.netapp.com/pdf.html?item=/media/17229-tr4015pdf.pdf)を参照下さい。
<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/00fee111-c5ca-184f-efc1-b5b666e76458.png>


## 何をしたい？できる？
- SnapMirrorの挙動を再確認
- SnapMirrorのPolicy変更とラベル定義を行い、SnapVaultとして利用

## 記事における環境情報
本記事では、以下の環境で実施した内容となります。
- ONTAP  : 9.13.1

**本記事では、既にSnapMirrorが構築されている環境を前提としています。**

環境のイメージとしては以下の通り
Source(本番) Cluster01側 => Destination(DR) Cluster02側という方向で転送します。
<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/4fe3777a-0c26-758a-2d28-4e6bc95f0de7.png>


## SnapMirrorの挙動確認
まずは、全Snapshotが転送されているSnapMirror環境について、
**Destination側(Mirror先)だけSnapshot世代が増える事が無い事を確認**します。

### 1. Snapshot世代の比較

Mirror元とMirror先にSnapMirror用のSnapshotとは別に、
**user_sanp01,user_sanp02が存在していることが確認できます。**

<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/05971bd6-67ac-4b1d-ff11-98aecaed9d92.png>


```bash:
# 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を削除します。
(通常スケジュール利用で作成及び削除される内容を、手動で実施している形です)

<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/8458938d-4516-2caf-c0e1-fd70ca2388aa.png>

```bash:
# 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をSnapMirror構成を更新します。
Source側と同じSnapshotが存在する事を確認します。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/7c1767de-f8ad-7eb0-50ad-035b9fc5a4df.png>

```bash:
# 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にするかの違いになります。

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/13245953-84fc-ba40-8e69-2f888abd954a.png>

以下のvault利用を例にすると、転送する際に以下の操作がなされた後の図となってます。
 1. Source側でSnapshot(vault_sanp03)を作成
 2. SnapMirror Updateによる転送実施
 3. SourceでSnapshot(vault_sanp02)を削除

つまり、Source側を日時の1世代でローテーションする事を考えた場合に
スケジュール作成のSnapshotでは古い世代の削除がDestination側のClusterに転送が終わるまで削除できないという意味合いになります。(差分転送出来なくなるので)

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/3e493a77-4f30-3c5c-14ad-436dae828748.png>






### 1. SnapVault用のSnapMirror Policy作成

バックアップ側で保持するSnapshotを5世代で、test_vaultというラベルの付いたSnapshotのみ転送するようにPolicyの作成とルールの追加をバックアップ側のClusterで実施します。

また、**バックアップ側クラスタへ転送する際に、基準となるSnapshotはSnapmirror.XXXというSnapshotから、test_labelというラベルの付いたSnapshotに変更**されます。

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/2afd3931-0c33-d363-d241-7144567f2c42.png>

```bash:
# 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に変更します。
```bash:
# 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の作成も合わせて実施しています。**

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/3dcea008-af8c-af9d-a536-5186074b2a40.png>


```bash:
# 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に変更前から転送されていたもの)

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/8590c6cf-edc5-ebd5-494c-82935202b92d.png>

```bash:
# 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には複数世代保持されている事が確認できます。
<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/e3fb1ffb-6f16-0b29-a495-00e5bd807095.png>

```bash:
# 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を削除)
<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/4a35a073-0a43-20c3-6455-cd149c584582.png>


```bash:
# 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サイズを拡張しておきます。
(手順的には最後である必要は無いです)

<img width="600" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/6fedaf46-9254-ae01-0e91-f106f91af277.png>

```bash:
# 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](https://www.netapp.com/pdf.html?item=/media/17229-tr4015pdf.pdf)

[SnapMirror 関係に対応した ONTAP バージョン](https://docs.netapp.com/ja-jp/ontap/data-protection/compatible-ontap-versions-snapmirror-concept.html#%E3%83%A6%E3%83%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%89%E3%83%AC%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%A2%E4%BF%82)

[SnapMirror レプリケーションのワークフロー](https://docs.netapp.com/ja-jp/ontap/data-protection/snapmirror-replication-workflow-concept.html)

[SnapMirrorテクノロジを使用したバックアップのアーカイブ](https://docs.netapp.com/ja-jp/ontap/data-protection/vault-archive-snapmirror-technology-concept.html#%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%82%BF%E4%BF%9D%E8%AD%B7%E9%96%A2%E4%BF%82%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%952)