【NetApp】SnapMirrorベーススナップショットの手動削除方法

2023年7月30日

こんにちは、キクです。

最近、NetAppのSnapMirror関連で新たな学びがありました。
具体的には、SnapMirrorのベーススナップショット削除に関することです。
本記事では、その辺りを整理していこうと思います。

それでは、よろしくお願いします。

動作環境

本記事の内容は、下記の環境で実施したものになります。
・ONTAP 9.3
・ONTAP 9.8

注意事項

本記事は僕が経験した内容をもとに記載しておりますが、実行環境や設定内容によっては動作が異なる場合があります。
そのため『参考程度』にお読みいただけますと幸いです。

ベーススナップショット削除の背景

まずは「ベーススナップショット削除」の背景について触れておこうと思います。

ちなみに、ベーススナップショットについては以前書いた記事でも触れているので、気になる方は合わせて確認してみてください。
関連記事:【NetApp】SnapMirrorが突如転送できなくなった原因と対応

SnapMirrorで利用されるベーススナップショットは、必要なもの以外は基本的に蓄積されません。
ベーススナップショットはSnapMirror実施毎に前回の情報を引継いで新規作成されるので、前回以前の古いものについては役目を終えたタイミングで自動削除されます。

しかし、SnapMirror中の一時的な不具合(ネットワーク不安定など)により、古いベーススナップショットが削除されずに残存するケースがあります

この「残存したベーススナップショット」は基本的に次回のSnapMirrorのタイミングで削除されます。
しかし、ボリュームの利用方法によってはスナップショットサイズが1TBなど大きくなることもあり、「すぐ消しておきたい」というケースもあります
そのような場合に「手動でのベーススナップショット削除」を実施したりします。

ちなみに、上記のように「ネットワーク不安定」が原因でベーススナップショットが残存した場合には、『Transfer failed due to a network error』というイベントが発生しています。
そして、SnapMirrorのaudit.logには以下のようなログが残っているかと思います。

action=Info Detected an incomplete transfer of snapshot snapmirror.

ベーススナップショットの手動削除方法

本項では、残存してしまったベーススナップショットを手動で削除する方法について触れていきます。

1. スナップショット依存関係の確認

よし、じゃあ早速削除しよう!

とは当然なりません。
念のため事前に確認しておきたいことがあります。
それはスナップショットとアプリケーションとの依存関係についてです。
今回の場合、アプリケーションはSnapMirrorを指します。
SnapMirrorによって取得されたスナップショットは、SnapMirrorと依存関係を持つ状態となります。
スナップショットにはAutoDeleteという自動削除機能がありますが、この「依存関係」があることで自動削除対象から除外されます

補足事項

除外するかどうかは設定によって調整可能です。

スナップショットのAutoDeleteに関する設定項目には「Commitment」という項目があります。
本項目のデフォルト値「try」の場合、SnapMirrorなどのアプリケーションとの依存関係があるスナップショットは「ロック状態」として扱い、自動削除の対象からは除外されます。

一方で、本項目を「disrupt(中断モード)」に設定すると、SnapMirrorやVolume moveなどの「データ保護機能」によりロックされたスナップショットを自動削除の対象として含めることができるようになります。
ただし、同スナップショットは本来ロックされているもので「削除されるべきものではない」とも言えるので、むやみに削除対象に含めてしまわない方がいいと思われます。

何を優先するかによって設定値を調整しましょう。

1-1. ONTAP9.3の場合

それでは実際にスナップショットの依存関係を確認していきましょう。
ONTAP9.3の場合はGUIから確認できるので簡単です。

  1. 左ペインにて「ストレージ -> ボリューム」を展開
  2. 右ペインにて対象ボリュームをクリック
  3. Snapshotコピータブをクリックして確認

なお、上記は参考のため「依存関係あり」の場合の表示例となりますが、実際に残存したベーススナップショットを削除する場合には「依存関係なし」の状態であることを確認します。

1-2. ONTAP9.8の場合

続いて、ONTAP9.8でも確認してみます。

同じようにGUIから確認してみると・・・

残念ながらONTAP9.8のGUIではスナップショットの依存関係が表示されません
実は本記事を書くきっかけは「ONTAP9.8で依存関係が確認できない」という壁にぶち当たったからだったりします。

でも心配ありません。

以下のコマンドを実施することで、ONTAP9.8でも依存関係を確認することが可能です。

::> volume snapshot - volume ボリューム名 show -fields dependency

注意事項

オプション「fields」で指定している「dependency」はTAB補完では表示されません。
そのため、手打ち入力が必要です。

ちなみに、オプション「instance」で詳細情報を確認すると以下の項目が表示されるのですが、ここにも「dependency」は含まれていません。

VserverVolumeSnapshot
Snapshot Data Set IDSnapshot Master Data set IDCreation Time
Snapshot BusyList of OwnersSnapshot Size
Percentage of Total BlocksPercentage of Used BlocksConsistency PointCount
CommentFile System VersionLogical Snap ID
7-Mode SnapshotLabel for SnapMirror OperationsSnapshot State
Constituent SnapshotNodeSnapshot Inofile Version
Expiry TimeCompression TypeSnapLock Expiry Time
Application IO SizeIs Qtree Caching Support Enabled-

だいぶ隠れキャラのようですね!

本コマンドを実行すると、以下のような結果が得れます

vserver   volume   snapshot                                 dependency 
--------  -------  ---------------------------------------  ---------- 
svm1      srcvol   snapmirror.xx~xx.2023-07-24_001000       snapmirror 
svm2      testvol  testsnapshot

dependencyは「依存関係の有無」「SnapMirrorのソース側/ターゲット側」によって以下のように表示されます。

dependencyの表示パターン

依存あり(ソース)  :snapmirror
依存あり(ターゲット):busy
依存なし       :空欄

上記コマンドでは、分かりやすく「依存関係あり / ソース側」で確認しているので「snapmirror」と表示されています。
しかし、ONTAP9.3の説明にも記載したように、実際に残存したベーススナップショットを削除する場合には「依存関係なし」の状態であることを確認するようにしましょう。

2. 手動削除の実施

ベーススナップショットの依存関係がないことを確認したところで、いよいよ削除を実施していきます。
作業自体は至ってシンプルで、以下のようなコマンドを実行するだけ完了です。

::> set advanced
::*> volume snapshot delete -vserver xx -volume xx -snapshot snapmirror.xxxx.YYYY-MM-DD -force true -ignore-owners true

ポイントはコマンドの最後に付与している2つのオプションです。
以前、ONTAP9.8でSnapMirror関係を解除(切断)したボリューム上のベーススナップショットを上記オプションがない状態で削除しようとした際に、以下のようなエラーが出ました。

Error: command failed: This Snapshot copy is currently used as a reference Snapshot copy by one or more SnapMirror relationships. Deleting the Snapshot copy can cause future SnapMirror operations to fail

エラー: コマンドが失敗しました: この Snapshot コピーは現在、1 つ以上の SnapMirror 関係によって参照 Snapshot コピーとして使用されています。
Snapshot コピーを削除すると、今後の SnapMirror 操作が失敗する可能性があります

もう少し突っ込むと、後者の「-ignore-owners true」を付与しなかった場合に上記のエラーが出てしまっていました。
当時は本記事で紹介している「-fields dependency」の存在も知らなかったので、上記コマンド実行時にベーススナップショットの依存関係があるかどうかまでは確認できていませんでした。

しかし、SnapMirror関係を解除した状態でもエラーが出てしまっていたので、上記オプションは付与しておいた方が良さげかなとは個人的に思っています。
ちなみに、依存関係のある状態でベーススナップショットを削除しても上記のエラーにより失敗します。
これはGUIで操作した場合も同様です。

おわりに

いかがだったでしょうか。

今回はSnapMirrorのベーススナップショット削除についての内容でした。 本記事は最初「ONTAP9.8でのスナップショット依存関係の確認方法」をメインで書こうとしていました。
しかし、それを書くにあたって「ベーススナップショット削除の部分から触れた方が良くないか?」と思ったこともあり、今回のような記事構成になりました。
結果としては依存関係を確認する背景もきちんと説明できたので良かったのかなと思います。

なかなかベーススナップショットを手動で削除することはないと思いますが、もしそのような機会が訪れたときに少しでも参考になれば嬉しいです。

本記事を最後までお読みいただきありがとうございました。
ではでは!

-NetApp
-