Snapshotリザーブの仕組み
環境
- ONTAP 9
回答
スナップショットリザーブはどのように機能しますか
スナップショットがディスク容量を消費する仕組みを考えると、なぜスナップショット用に容量を予約する必要があるのでしょうか?必要な容量を自由に使わせてはいけないのはなぜでしょうか?答えを理解するには、ディスクがいっぱいの状態でファイラーがスナップショットを作成した場合に何が起こるかを考えてみましょう。アクティブファイルシステムからファイルを削除しても空き容量は生まれません。なぜなら、アクティブファイルシステム内のすべてのファイルは、新しく作成されたスナップショットによっても参照されるからです。ファイラーは新しいファイルを作成する前に、スナップショットを削除する必要があります。
デフォルトでは、スナップショットリザーブはディスク容量の20%です。スナップショットリザーブの容量を調整する方法については、 「スナップショットリザーブの変更」を参照してください。
アクティブファイルシステムがいっぱいで、スナップショットリザーブにまだスペースが残っている場合に、ファイラーがスナップショットを作成した場合どうなるか考えてみましょう。dfの出力には次のように表示されます。
Filesystem kbytes used avail capacity
/ 3000000 3000000 0 100%
/.snapshot 1000000 500000 500000 50%
100MBのファイルを削除すると、これらのファイルに属するデータはアクティブなファイルシステムから削除されるため、そのスペースはスナップショットに充てられることになります。新しいdfの出力は以下のとおりです。
Filesystem kbytes used avail capacity
/ 3000000 2900000 100000 97%
/.snapshot 1000000 600000 400000 60%
ファイラーはアクティブファイルシステムから100MBのスペースをスナップショットリザーブに再割り当てすることに注意してください。スナップショット用のリザーブスペースがあったため、アクティブファイルシステムからファイルを削除することで、新しいファイル用のスペースが解放されました。
スナップショット予約機能があっても、スナップショットのディスク容量消費量を管理することは重要です。スナップショットが予約された容量を超えるディスク容量を消費するのを防ぐ方法はありません。例のファイルシステムで、アクティブファイルシステム内のすべてのファイルを削除した場合に何が起こるか考えてみましょう。削除前のdf出力は次のようになります。
Filesystem kbytes used avail capacity
/ 3000000 3000000 0 100%
/.snapshot 1000000 500000 500000 50%
ファイルシステム内のすべてのデータを削除した後、df コマンドは以下を生成します。
Filesystem kbytes used avail capacity
/ 3000000 2500000 500000 83%
/.snapshot 1000000 3500000 0 350%
アクティブファイルシステムの3GBすべてがスナップショットに移行し、それ以前にスナップショットに含まれていた500MBも合わせて、合計3.5GBのスナップショットデータになりました。これは、スナップショット用に予約されている領域より2.5GB多いです。アクティブファイルシステムはこの領域を使用できないため、実際にはファイルが存在しないにもかかわらず、その領域はアクティブファイルシステムによって使用されているように表示されます。
スナップショットがスナップショットリザーブの100%以上を消費すると、システムが満杯になる危険性があります。この場合、十分な数のスナップショットを削除した後にのみファイルを作成できます。例えば、上記の例でアクティブファイルシステムに500MBのデータが追加された場合、df
コマンドは次の情報を生成します。
Filesystem kbytes used avail capacity
/ 3000000 3000000 0 100%
/.snapshot 1000000 3500000 0 350%
ファイラーが新しいスナップショットを作成するとすぐに、システム内のすべてのブロックが何らかのスナップショットによって参照されるようになります。そのため、アクティブなファイルシステムからファイルをいくつ削除しても、追加するスペースが確保できなくなります。この状況から回復する唯一の方法は、十分な数のスナップショットを削除してディスク容量を増やすことです。snaplistコマンドを使用して削除するスナップショットを特定する方法については、「スナップショット統計の表示」を参照してください。
複数の同一スナップショットによるディスク消費
例:スナップショットには、ファイラーがスナップショットを作成してから変更されていない1MBのファイルが含まれています。このファイルがアクティブファイルシステムから削除されると、スナップショットは1MBのディスク容量を消費します。
同じ1MBのファイルが、複数の異なるスナップショット(hourly.0、hourly.1、hourly.2)から参照されている場合があります。これらのスナップショットすべてに、ファイラーがスナップショットを作成してから変更されていない1MBのファイルが含まれている場合、3つのスナップショットすべてにファイルが含まれているにもかかわらず、スナップショットによって消費されるディスク容量は1MBのみです。
dfコマンドはどのようにスナップショットを表示するのか
スナップショットディスクの使用率に関する情報を提供するには、df
ファイラーのコマンドは、スナップショットをアクティブファイルシステムとは別のパーティションとして扱います。以下は、df
指示:
toaster> df
Filesystem kbytes used avail capacity
/ 3000000 2000000 1000000 65%
/.snapshot 1000000 500000 500000 50%
注:この例では、分かりやすくするために数値が切り捨てられています。
ファイラーには4ギガバイト(GB)のディスク容量があり、そのうち1GB(25%)はスナップショット用に予約されています(スナップショット用のスペース予約については後ほど詳しく説明します)。の3GBはアクティブなファイルシステム用で、2GBは使用中です。/.snapshot
この行はスナップショットにのみ存在するデータをカウントしています。アクティブファイルシステムにも存在するデータはいずれにせよディスクに保存する必要があるため、ファイラーがスナップショットにスペースを課金すると誤解を招く可能性があります。この例では、スナップショット用に予約された1GBのうち半分が実際に使用されています。
追加情報
該当なし