web-dev-qa-db-ja.com

ZFSスナップショットのいずれかが本当に冗長であり、データを失うことなく安全に削除できるかどうかを判断するにはどうすればよいですか?

FreeBSD 11.1を使用していますが、zfs list -t snap -r poolnameの出力には、「USED」の下に「0」が付いた多数のスナップショットが表示されます。 ZFSがスペースをどのように占めるかを読んだので、基本を理解しました。

  1. 「0」は、スナップショットを削除してもディスクスペースが回復しないという意味で、スナップショットがディスクスペースを使用しないことを意味します。
  2. ファイルが2つのスナップショットに存在する場合、そのファイルへの複数のポインター(参照)が存在する(より正確には、そのファイルを構成する一連のブロックへの)ため、余分なコピーではないため、そのファイルの冗長性は向上しません。存在します。

したがって、ロジックは、USED = 0のスナップショットは、rhatオブジェクトの前のスナップショットと同一のコピーである可能性が高く、前のスナップショットから何も変更されていないスナップショットを保持したくない場合は削除しても安全であることを示していますそうすることで冗長性が失われることはありません

私は古いデータを削除しないこと、またはデータの安全性が低下する場合は冗長性を低下させることに非常に執着しています。少なくともいくつかの考えられる理由は、それほど単純ではないかもしれないと考えることができます。

  • スナップショットのUSED値は、他のスナップショットが破棄されると変更される可能性がありますが、同様に、ゼロサイズの存在は、ほとんどすべての通常の使用法で、同じであるゼロ以外のサイズの別のスナップが存在することを強く示唆するはずです。ただし、「強く示唆する」とは、「そうではないことを理解できない」という意味ではありません。ゼロは、すべてのブロックが同じように編成され、ファイルが同じであるとは限らないことを意味します。ゼロサイズのスナップをすべて「手に負えない」状態で削除することが必ずしも安全ではない場合はありますか?

  • この例として、(1)100MBファイルを作成してプールのスナップショットを作成し、(2)100MBファイルの最初と最後の75%をそれぞれ含む他の2つの75MBファイルを作成し、100MBファイルを削除してからスナップショットを作成するとします。再び。 2番目のスナップショットには、前のスナップにすべてのブロックが存在するため、使用されたスペースが0と表示されますが、そのスナップショットのファイルは実際には一意です。 ZFSのスペースアカウンティングはファイルベースではなくブロックであるため、これを検出する方法を考えることはできません。おそらく、重複排除が使用されており、一部のタイプのファイルが追加または「テール」される場合、これは、病的なエッジの場合だけでなく、まれな場合でも一般的です。

ですから、よくわかりません。おそらくスナップサイズは赤いニシンであり、代わりに他のプロパティを確認する必要があります。

ZFSスナップショットが冗長であるかどうか(私がこの用語を使用しているという意味で)を安全かつ迅速に判断できるanyの重要な状況はありますか?それを削除しても安全ですか?

または、他のプロパティやZFSの違いなどから、2つの連続するスナップが実際にプールの履歴内の同じ時点/プール書き込みシーケンス番号を指しているかどうかを判断するための別のより良い(迅速で効果的な)方法があります(これにより、それらが分類的に確認されます)同一のデータを参照)?

5
Stilez

USED=0は、スナップショットがその前のスナップショットと重複していることを示す妥当な指標です。ただし、実際にはゼロであることを確認する必要があります。ゼロの丸められたバージョン(0.1KBなど、最も近いKBに丸められたもの)ではありません。 -p(「解析可能」)フラグを使用して、バイト単位で測定された正確な数値を取得できます。また、スナップショットを作成した後、スペースアカウンティング番号が更新されるまでに数秒かかる場合があることにも注意してください。

あなたが提案するように、同じことを達成するためにzfs diffを使用することもできます。これには、whatが変更されたことを通知するという追加の利点があります。

提供した例(ブロックがファイル間で共有される場合)は、重複排除を有効にしている場合にのみ発生します。それ以外の場合、ZFSはブロックの複数のコピーを格納し、そのスペースを適切に考慮します。重複排除を使用した場合でも、上記の両方の方法で違いが示されます。2つのファイル(2つのiノードと重複排除されたブロックを指す間接ブロック)の新しいメタデータが必要になるため、スナップショットはUSEDスペースを取りません。 ;多分他のものも)、そしてzfs diffは2つの新しいファイルに対して+<filename>を表示します。

編集:これを確認するために私が考えることができる最後のユーザーに見える方法は、スナップショット間でzfs send -nv(ドライラン、冗長)を段階的に実行することです。これは完全な送信ストリームを生成しませんが、何が送信されるかを教えてくれる可能性があります。2つのスナップショットが同じである場合は何も表示されないはずです。

1
Dan