こんにちは、キクです。
最近、NetAppのSnapMirror関連で新たな学びがありました。
具体的には、SnapMirrorのベーススナップショット削除に関することです。
本記事では、その辺りを整理していこうと思います。
本記事の内容
それでは、よろしくお願いします。
ベーススナップショット削除の背景
まずは「ベーススナップショット削除」の背景について触れておこうと思います。
ちなみに、ベーススナップショットについては以前書いた記事でも触れているので、気になる方は合わせて確認してみてください。
関連記事:【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という自動削除機能がありますが、この「依存関係」があることで自動削除対象から除外されます。
1-1. ONTAP9.3の場合
それでは実際にスナップショットの依存関係を確認していきましょう。
ONTAP9.3の場合はGUIから確認できるので簡単です。
- 左ペインにて「ストレージ -> ボリューム」を展開
- 右ペインにて対象ボリュームをクリック
- Snapshotコピータブをクリックして確認
なお、上記は参考のため「依存関係あり」の場合の表示例となりますが、実際に残存したベーススナップショットを削除する場合には「依存関係なし」の状態であることを確認します。
1-2. ONTAP9.8の場合
続いて、ONTAP9.8でも確認してみます。
同じようにGUIから確認してみると・・・
残念ながらONTAP9.8のGUIではスナップショットの依存関係が表示されません。
実は本記事を書くきっかけは「ONTAP9.8で依存関係が確認できない」という壁にぶち当たったからだったりします。
でも心配ありません。
以下のコマンドを実施することで、ONTAP9.8でも依存関係を確認することが可能です。
::> volume snapshot - volume ボリューム名 show -fields dependency
本コマンドを実行すると、以下のような結果が得れます
vserver volume snapshot dependency
-------- ------- --------------------------------------- ----------
svm1 srcvol snapmirror.xx~xx.2023-07-24_001000 snapmirror
svm2 testvol testsnapshot
dependencyは「依存関係の有無」「SnapMirrorのソース側/ターゲット側」によって以下のように表示されます。
上記コマンドでは、分かりやすく「依存関係あり / ソース側」で確認しているので「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でのスナップショット依存関係の確認方法」をメインで書こうとしていました。
しかし、それを書くにあたって「ベーススナップショット削除の部分から触れた方が良くないか?」と思ったこともあり、今回のような記事構成になりました。
結果としては依存関係を確認する背景もきちんと説明できたので良かったのかなと思います。
なかなかベーススナップショットを手動で削除することはないと思いますが、もしそのような機会が訪れたときに少しでも参考になれば嬉しいです。
本記事を最後までお読みいただきありがとうございました。
ではでは!