新しい会話を開始

未解決

Community Manager

 • 

3.1K メッセージ

485

2021年12月19日 17:00

スナップショット書ける書けない問題終結?!

*こちらの記事は2021年12月に開催された[AskTheExperts]PowerScaleコーデ 2021冬からの内容になります。

スナップショット書ける書けない問題終結?!

 

「この世には、書けるスナップショットと書けないスナップショットの2つが存在する」ー そんな言葉を残した偉人がいたかどうかは知りませんが(笑)、本日は、OneFS 9.3の目玉新機能の一つである「書き込み可能スナップショット」についてご紹介します。

 

スナップショットって書けるの?

photo_omoide.pngスナップショットは、ある一瞬を切り取るスナップ写真から来ており、ストレージ視点では「ある対象領域のある時点の状態(データ)をそのまま保持する」機能を指しています。スナップショットは、そのままの状態を保つためにRead Onlyが常です。簡易的な一時バックアップのような使い方では、Read Onlyが最適でした。一瞬で取得できるスナップショットは非常に便利で、他の用途でも使える場面が色々考えられるのですが、Read Onlyがネックとなるケースもあります。

アプリケーションの動作確認は、その一例です。アプリケーションの動作確認では、本番データが使えるのが理想です。とは言え、本当に本番データをそのまま使うわけにはいきません。テスト用に本番データをコピーすることが考えられますが、コピーするには時間と容量が必要となり簡単にはできないことが多々あります。

スナップショットが使えたらと考えたくなりますよね。一瞬で本番データのイメージを取得でき、容量も必要ない点は申し分ありません。データがRead Onlyで動作確認できるアプリケーションであればよいのですが、書き込みが必要なケースがほとんどだと思います。残念ながら、Read Onlyのスナップショットでは目的とする動作確認ができません。

このような場面で、書き込み可能なスナップショットを取ることができれば、一石二鳥、いや一石三鳥(一瞬で本番データのイメージを取得、容量も消費しない、書き込み可能)となるわけです。他にも災対サイトへの切り替え試験は、書き込みスナップショットが活用できる代表例の一つです。

この書き込み可能スナップショット機能が、OneFS 9.3で新たに追加されました。

 

Writable Snapshotの仕組み 

OneFS 9.3の書き込み可能スナップショット(以降、Writable Snapshot)について、詳しく見ていきたいと思います。

図1.png

 

Writable Snapshotは、ベースとなるスナップショットが必要となります。例えば、本番環境で/ifs/prodというディレクトリがあり、そのディレクトリのWritable Snapshotを作成したい場合は、まず/ifs/prodのスナップショット(図中のSnap_prod_1)を取得します。そのスナップショットをベースにWritable Snapshotを作成するのですが、その際に指定した任意のディレクトリ(図中の/ifs/wsnap)に紐付けます。Writable Snapshotは通常のディレクトリと同じようにアクセスして利用でき、利用ユーザがアクセスする分には、通常のディレクトリとWritable Snapshotの区別は付きません。

内部的には、以下のような仕組みになっています。

図2-1.png

例えば、/ifs/prodというディレクトリにファイルが4つ(A、B、C、D)あったとします。

図2-2.png

この状態でベースとなるスナップショット(Snap_prod_1)を取得、その後ファイルBが上書きされてファイルBがスナップショットで保持され、新しB1が/ifs/prodに保存された状態に変わったとします。ここまでは通常のスナップショットの動きですね。新しいのは次からです。

図2-3.png

このスナップショットをベースとしてWritable Snapshotを/ifs/wsnapディレクトリに紐付けて作成します。この状態で/ifs/wsnapにアクセスするとファイルA、B、C、Dが見え、実体としてはファイルBはスナップショット(Snap_prod_1)に保持されたものを参照し、それ以外は/ifs/prodのファイルA、C、Dを参照しています。

図2-4.png

 /ifs/wsnap配下は書き込み可能ですので、例えばファイルCを上書きしてファイルC1を保存することができます。

ふと疑問に思う方もいるのではないでしょうか。「書き込み可能であるということはメタデータを個別で持っているのか?」と。答えは、「Yes」です。すると、さらに疑問が湧くかもしれません。「ディレクトリやファイルが大量にある場合、Writable Snapshotの作成に時間が掛かるのか?」と。答えは、「No」です。

ディレクトリやファイルの数に関わらず、Writable Snapshotは瞬時に作成できます。これは、Copy on Readという仕組みで実現されています。では、Readした時に何がコピーされるのでしょうか? ファイルに最初にアクセスするタイミングで、そのファイルのメタデータが作成されます。Copyという表現にはなっていますが、実際は必要な情報を引き継いで新しく作成されます。ファイルの実体がコピーされるわけではなく、あくまでもメタデータだけが作成されます。このメタデータが指し示すファイルの実体はスナップショット内のファイルを参照しています。Writable Snapshot内のディレクトリやファイルに対するメタデータをオンデマンドに作成するCopy on Readによって、Writable Snapshot作成が瞬時に完了できるのです。

一方、最初のアクセス時にメタデータを作成するので、応答が少し遅くなります。2回目以降は通常ファイルのアクセスと遜色ない応答になりますが、このことからも性能が必要となるようなケースではWritable Snapshotを使わないようにしてください。

 

Writable Snapshotの操作

では、実際にWritable Snapshotを作成してみましょう。なお、Writable Snapshotの操作は、CLIもしくはPAPIからのみ可能です。WebUIは提供されていません。
※Writable Snapshotは、SnapshotIQのライセンスが必要となります。

① ベースとなるスナップショットを作成します。(/ifs/prodのスナップショットをSnap_prod_1という名前で作成する例)

# isi snapshot snapshots create /ifs/prod --name=Snap_prod_1
# isi snapshot snapshots list
ID Name Path
--------------------------
10 Snap_prod_1 /ifs/prod
--------------------------
Total: 1






② Writable Snapshotを作成します。(Snap_prod_1をベースに/ifs/wsnapディレクトリに紐付ける例)

# isi snapshot writable create Snap_prod_1 /ifs/wsnap ※既に/ifs/wsnapが存在しているとコマンドが失敗します
# isi snapshot writable list
Path       Src Path  Src Snapshot
----------------------------------
/ifs/wsnap /ifs/prod Snap_prod_1
----------------------------------
Total: 1





非常に簡単ですね。
一つのスナップショットをベースとして複数のWritable Snapshotを作成できるので、複数条件でのテストが必要な場合でも、それらの環境をWritable Snapshotで簡単に用意できます。なんとも簡単かつ便利ですね。

実は、Writable Snapshotを作成すると、Quotaエントリも自動作成されます。Writable Snapshotでどれぐらい容量を消費したかをQuotaの機能で確認することができるようになっています。

# isi quota quotas list
Type      AppliesTo Path       Snap Hard Soft Adv Used  Reduction Efficiency
-----------------------------------------------------------------------------------
directory DEFAULT   /ifs/wsnap No   -    -    -   76.00 -         0.04 : 1
-----------------------------------------------------------------------------------
Total: 1




 

さらに、前述したメタデータがどのようになっているのか確認してみましょう。メタデータは"isi get"コマンドで確認することができます。

# isi get -D /ifs/prod/a |grep LIN:
* LIN: 1:01a9:0002
# isi get -D /ifs/wsnap/a |grep LIN:
* LIN: 1:01bc:000b


Writable Snapshot取得直後でファイル"a"は編集されていない状態です。大元のファイルとWritable SnapshotのファイルとではLINが異なっていることがわかります。これは、Writable Snapshot内のファイル"a"用にメタデータが割り当てられていることを表しています。

# isi get -D /ifs/prod/a |grep -e "Physical Blocks" -e "Logical Size"
* Physical Blocks: 2190
* Logical Size: 11862016
# isi get -D /ifs/wsnap/a |grep -e "Physical Blocks" -e "Logical Size"
* Physical Blocks: 0
* Logical Size: 0




ファイル"a"のサイズを見てみると、期待通りにWritable Snapshotの方は物理も論理もサイズがゼロとなっており容量が一切消費されていないことがわかります。

この状態からファイル"a"に文字列を追記してみましょう。

# echo "Update writable snapshot" >> /ifs/wsnap/a
# isi get -D /ifs/wsnap/a |grep -e "Physical Blocks" -e "Logical Size"
* Physical Blocks: 3
* Logical Size: 8192


pose_kandou_woman.pngまず、Writable Snapshotのファイルに対して書き込みができましたね。感動。
サイズを見ると、追記された分だけの容量が消費されていることがわかります。わずかな文字列だったので、論理サイズはファイルシステムのブロックサイズである8KB(8192バイト)となり、保護レベルが+2d:1nの実行環境だったので物理的には3面ミラー分の3ブロックが消費された状態となっています。
こういったところもスナップショットの特長ですね。echoコマンドで追記書きしたのでこのようになりましたが、アプリケーションによっては一部の変更でもファイルを丸ごと置き換えることもあります。部分的な消費で済むかどうかはアプリケーションに依存するという点は、意外と落とし穴ですので覚えておいてください。

また、Quotaでも使用容量が増えていることを確認できます。

# isi quota quotas list
Type      AppliesTo Path       Snap Hard Soft Adv Used  Reduction Efficiency
-----------------------------------------------------------------------------------
directory DEFAULT /ifs/wsnap No   -    -    -   8.07k 1.01 : 1  0.25 : 1
-----------------------------------------------------------------------------------
Total: 1




 

これまでのSnapshotIQをご存知の方は、「設定した保持期限を経過したベーススナップショットが自動削除されてしまったら、Writable Snapshotはどうなるの?」、「ベーススナップショットは手動で削除できるの?」と疑問に持たれるのではないでしょうか。答えは、Writable Snapshotがある限り、そのベーススナップショットは保護されます。つまり、保持期限を迎えたタイミングでも手動でも削除できなくなっています。ベーススナップショットがなくなるとWritable Snapshotは元も子もなくなってしまいますからね。

# isi snapshot writable list
Path       Src Path  Src Snapshot
----------------------------------
/ifs/wsnap /ifs/prod Snap_prod_1 ←Writable Snapshotがある状態
----------------------------------
Total: 1
# isi snapshot snapshots delete Snap_prod_1
Are you sure? (yes/[no]): yes
Snapshot "Snap_prod_1" can't be deleted because it is locked ←削除ができませんでした







 

最後は削除ですね。以下のコマンドでWritable Snapshotの削除ができます。

# isi snapshot writable delete /ifs/wsnap
Are you sure? (yes/[no]): yes

なお、SnapshotDeleteジョブではなく、TreeDeleteジョブによりWritable Snapshotの削除処理が行われます。削除されたWritable Snapshotのトップディレクトリは、"wsnap.101a90014.deleted"のような名前に変更されてTreeDeleteジョブにより非同期で削除されます。タイミングによってはこのようなディレクトリ名が見える場合がありますが、いつかは削除されますので焦らず温かい目で見守ってください。何らかの理由でTreeDeleteジョブが失敗した場合は、もう一度削除を試みてください。その場合は、Writable Snapshotはrenameされたフォルダ名を指定してください。

# isi snapshot writable delete /ifs/wsnap.101a90014.deleted

 

Writable Snapshotの制約

最後にWritable Snapshotを活用頂く際の制約や気を付けて頂きたい点を挙げておきます。ここではいくつか主だったものの紹介となるので、詳細はWritable Snapshotのホワイトペーパーを参照してください。
PowerScale OneFS: Writable Snapshots 

  1. Writable Snapshotをネストすることはできません。
    例えば、 /ifs/wsnapに紐付けたWritable Snapshotがあった場合、/ifs/wsnap/wsnap2にWritable Snapshotを作成できません。
  2. Writable Snapshotに対して、スナップショットを取得できません。
  3. Snapshot Aliasに対して、Writable Snapshotを作成できません。
  4. SyncIQが内部的に自動作成したスナップショットに対して、Writable Snapshotを作成できません。
  5. Writable Snapshot内のファイルおよびフォルダを外のディレクトリに移動できません。
    例えば、/ifs/wsnapのWritable Snapshot配下にあるファイルやディレクトリは、/ifs/dataといったディレクトリへ移動できません。
  6. Writable Snapshotの数は、クラスタ全体で30個までが推奨となっています。
    それを超える場合には、sysctlパラメータの変更が必要となります。ただし、sysctlパラメータの変更はサポートの指示の下、実施してください。最大2,048個までサポートされていますが、同時に大量のWritable Snapshotを削除しないでください。TreeDeleteジョブが大量に実行され、ジョブのキューが一杯となり他のジョブが起動できなくなってしまいます。

 

日常的に利用する機能ではないかもしれませんが、使うと便利な場面はきっとあるはず。その時にはWritable Snapshotの存在を思い出してもらえると幸いです。
OneFS 9.3で実装されたWritable Snapshotはまだファーストステップに過ぎなく、まだまだ十分ではないかもしれません。性能や機能改善がなされていく予定ですので、今後の進化に乞うご期待!

レスポンスがありません。
イベントは見つかりませんでした!

Top