この記事では、ファイル システムとスナップショット領域のサイズが一致しない場合の対処方法を、具体的な手順に焦点を当てて紹介します。この記事の内容はコンパクトなので、皆さんに何かを得ることができれば幸いです。
ファイル システムとスナップショットのスペース サイズが一致しないのはなぜですか?
あるユーザーから相談を受けたところ、ECS インスタンス内のファイルを削除してスナップショットを取得してもスナップショットの容量が減らないことがわかりました。この現象の理由は、スナップショットの原理と、ファイル システム、ディスク、スナップショットの関係に関係しています。つまり、データ ストレージ ブロック (Block) が書き込まれている限り、データ ブロックは削除されます。ディスク内の関連ファイルが削除されている場合でもスナップショットに記録されるため、スナップショットはディスクよりも多くのスペースを占有します。ファイル システムでのいわゆる削除は、削除する必要があるファイルのヘッダーにマークを付けて、この領域が使用可能であることをユーザーに知らせるだけであり、ディスク自体が占有する領域は減少しません。
ファイル システムとスナップショットのスペース サイズが一致しないのはなぜですか?
ユーザーがインスタンス内で見るのはディスク (EBS) であり、ディスク パーティション上に作成されるのはファイル システム (ファイル システム) です。ファイル システムはディスク領域の管理を担当し、その操作は最終的にディスク I/O 要求に変換されます。 EBS は、ブロックのステータス (ディスクの論理ブロック アドレスがブロック ストレージによって同じサイズのブロックに分割されていることを指します) を記録し、ダーティ データをオンデマンドで OSS にコピーします。これは、スナップショットを作成するプロセスです。
次の理由により、ファイル システムの領域がスナップショットのサイズと一致しない可能性があります。
ファイル システム自体のメタデータがディスク領域を占有します。
ファイル システムを作成するプロセスでは、大量のブロックが書き込まれます。特に、Windows の低速フォーマットでは大量のダーティ ブロックが書き込まれますが、高速フォーマットを使用すると、書き込まれるブロックの数を減らすことができます。
オーバーヘッドを削減するために、ファイル システムは削除時にファイルを内部的にマークするだけですが、EBS はこの削除命令を認識せず、ブロックはまだ割り当てられているため、この部分は引き続きスナップショットに含まれます。 、その結果、「スナップショットはファイル システムよりも大きいです」という結果になります。
Virtio-block、Xen の Block-front、およびその他のモジュールは、TRIM 命令 (LBA 上の特定のデータを使用しなくなり削除できるように促す IO 命令) をサポートしていないため、ディスクはデータを削除できることを認識できません。
スナップショット作成の原理
スナップショット作成の原理を次の図に示します。
手順:
ディスク LBA (論理ブロック アドレス) をブロックに分割します。割り当てられていないものは空ブロックと呼ばれ、図の小さな白いボックスで表されます。
ブロックが書き込まれている限り(割り当てられ、空のブロックではなくなる)、ブロックは測定に参加します。
ディスクの最初のスナップショットはボリューム全体であり、空のブロックはコピーされません。
ディスクの後続のスナップショットは増分スナップショットであり、前のスナップショット以降の増分ダーティ データをコピーするため、同じブロックの異なるスナップショットに複数のバージョンが存在する可能性があります (図では異なる色で示されています)。
#スナップショットの測定方法
上図に示すように、スナップショットには 11 個のブロックがあります。ディスク T2 には 9 ブロックのうちさらに 2 ブロックがあります。 単一ディスクのすべてのスナップショットを全体として測定します。 割り当てられたブロックのみが測定されます。異なる時点の同じバージョンのブロックは 1 回だけカウントされます。 ブロックの異なるバージョンは N 倍のスペースを占有します。スナップショット削除の原理
スナップショット削除の原理を次の図に示します。 説明: 削除されたスナップショットのすべてのブロックをオフラインで分析し、他のスナップショットによって参照されていないデータを削除します。 S1 を削除した後、残りのスナップショットには 8 ブロック (S0 から 6 つ、S2 から 2 つ) ではなく、合計 10 ブロック (S0 から 6 つ、S1 によって生成されたダーティ データ 2 つ、S2 から 2 つを含む) が含まれます。 )。「データ書き込み操作」の正確な定義
まず概念、基礎となる分布を明確にします。従来のストレージ システムでは、「データ書き込み操作」とは、ユーザーが書き込むビジネス データを意味するだけでなく、ディスクのフォーマットなどの一連の I/O 操作も含まれます。 ユーザーがディスクを入手した後、通常に使用できるようにするには、フォーマットする必要があります。フォーマットの本質は、ファイル システムを確立するプロセスです。パーティションまたはディスクをファイル システムとして使用する前に、パーティションまたはディスクを初期化し、データ構造をディスクに記録する必要があります。このプロセスはファイル システムの確立と呼ばれます。 したがって、ディスク上にファイル システムを確立するということは、ディスクにデータを書き込むことを意味します。ファイル システムが異なれば、フォーマット時のファイル サイズも異なります。詳細は次のとおりです。 Windows システムのフォーマットは、高速フォーマットと通常フォーマットに分かれています。クイック フォーマットは、ファイル システムをパーティションに割り当て、ディレクトリ テーブルを書き換えるだけです。
通常のフォーマットは、上記の作業を実行するだけでなく、パーティションをセクタごとにスキャンして不良セクタを特定し、マークします。
したがって、通常のフォーマット操作はディスクの空のブロックを埋めることになり、これはディスク全体に書き込むことと同じになります。この場合、最初の完全なスナップショットのサイズはほぼディスク容量になります。クイック フォーマットが占有する実際のスペースは比較的小さいです。
Linux システムのフォーマットは、ファイル システムを確立するプロセスでもあります。したがって、ディスクがフォーマットされたばかりで、ユーザーがビジネス データを書き込んでいない場合、最初のスナップショットにも、さまざまなファイル システム形式に応じて一定の容量が含まれます。
以上がファイル システムとスナップショット領域のサイズの不一致に対処する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。