btrfsの概念化 - スナップショットと使用スペースの理解

btrfsの概念化 - スナップショットと使用スペースの理解

btrfsについて学び始め、移行を検討しています。

btrfsに対する私の現在のコメントは、それがgitと非常によく似て動作し、すべてが追跡され、変更後30秒ごとにコミットが行われることです。しかし、私の直感は、私が誤解しているに違いないと言います。そうしないと、ハードドライブの容量がより早く消費されます。したがって、すべてを追跡し、変更領域の後30秒ごとにステージングにファイルを追加するgitに似ているかどうか疑問に思います。スナップショットでのみコミットされます。

  1. スナップショットを撮らない場合は、単一のファイルをいくつかの変更前にロールバックできますか?それとも、スナップショットを撮ったときにのみ保存されますか?つまり、forループを10,000回実行し、その間に31秒の休止時間を置いてファイルに追加すると、そのファイルの10,000項目の祖先ツリーが表示され、各項目に戻ることができますか?

  2. ルートのbtrfsスナップショットを使用し、VMware / VirtualBoxスナップショットのように考えることはできますか?分岐を閉じ、その状態を保存し、別の分岐に移動し、開始し、分岐するスナップショット分岐を持つように変更し、ツリーに沿って目的の場所に移動できる場所はどこですか?それでは、スナップショットツリーノードを選択できるブートローダはありますか? (各スナップショットに対してgrub.cfgメニュー項目を作成する必要はありません。)

  3. スナップショットAにタグを付け、変更した後、Bにタグを付けます。スナップショットAに戻って変更する場合(ブートで/ var / logを変更するだけでも)、その変更は「切り離された」または「タグなし」のスナップショットで適用されるため、Bに戻るとその変更は適用されません。ではありません。目立つ?もしそうなら、この「表示されていない」スナップショットを変更し、それを表示する前に誤って他のスナップショットへの変更を要求した場合はどうなりますか?

  4. ファイルが削除されると、「このファイルが削除されました」メタデータが記録され、ファイルのすべてのバージョンがまだスペースを占有しますか?それともまだそれを指すスナップショットがないと仮定すると、以前のバージョンはすべて削除されますか?

  5. たとえば、ソースからgccをビルドすると、ビルドディレクトリが5〜8GBになると思います。定期的にソースからビルドすると、多くのハードドライブスペースを「消費」します。そうですか? (削除が削除されたファイルのすべての内容を削除すると仮定しても、make cleanなしでビルドプロセス中にどのくらいのファイルが削除されるかはわかりません。既存のオブジェクトファイルが技術的に削除されたか、そこにありますか?「再作成」。)

ベストアンサー1

Btrfsでは、スナップショットは特別なものではなく、Btrfsサブボリュームにすぎないことを覚えておけば、ほとんどの質問に答えることができると思います。結局のところ、作成時には空ではなく初期コンテンツがあり、その初期コンテンツのストレージスペースはスナップショットのあるサブボリュームと共有されました。

スナップショットは(フル)コピーと似ていますが、共有ストレージのためにより経済的です。

  1. スナップショットを撮らない場合は、単一のファイルをいくつかの変更前にロールバックできますか?

習慣。通常のファイルシステムと同様に、ファイルの変更は破壊的です。魔法のように古いバージョンに戻ることはできません。

  1. ルートのbtrfsスナップショットを使用し、VMware / VirtualBoxスナップショットのように考えることはできますか?

VMディスクイメージは通常、ファイルシステムまたはファイルシステムのファイルではなくブロックデバイスであるため、若干異なると仮定する。

私の考えでは、BtrfsファイルをVM仮想ブロックデバイスのバックアップストアとして使用できるようです。この場合、この質問に対する答えは「はい」です。 NOCOWオプションを使用しない限り(実際にはディスクイメージに推奨)、おそらくそうではありません。これは、記録中にコピーがスナップショットを機能させる魔法であるためです。

  1. スナップショットAにタグを付け、変更した後、Bにタグを付けます。スナップショットAに戻って変更する場合(ブートで/ var / logを変更するだけでも)、その変更は「切り離された」または「タグなし」のスナップショットで適用されるため、Bに戻るとその変更は適用されません。ではありません。目立つ?

Btrfsのすべてのサブボリューム(スナップショットを含む)には名前があるため、「タグなし」スナップショットを持つことはできません。

通常、あるBtrfsサブボリュームで行われた変更(スナップショットとして作成されたかどうか)は、他のBtrfsサブボリュームではまったく見えません。スナップショットはコピーに似ていますが、より経済的であることを覚えておいてください。

  1. ファイルが削除されると、「このファイルが削除されました」メタデータが記録され、ファイルのすべてのバージョンがまだスペースを占有しますか?

ファイルが削除されると、対応するディレクトリエントリも削除されます。これはディレクトリに対する変更であり、すべての変更と同様に、変更が発生したサブボリュームにのみ適用されます。その後、ファイルシステムの他の部分でストレージスペースを使用しない場合にのみファイルが解放されます。

複数のスナップショット間で共有され保存されたファイルを削除することは、通常のファイルシステムから複数の(ハード)リンクを持つファイルを削除するのと非常によく似ています。リポジトリ[inode]が参照されなくなった場合は解放されます。

  1. たとえば、ソースからgccをビルドすると、ビルドディレクトリが5〜8GBになると思います。定期的にソースからビルドすると、多くのハードドライブスペースを「消費」します。そうですか?

複数の異なるディレクトリに複数回ビルドすると、ますます多くのgccスペースが消費されます。ビルド間のコピーを削除したり、毎回同じビルドディレクトリを上書きしたりする場合は、さらに多くのスペースを使用する特別な理由はありません。

おすすめ記事