btrfsサブボリュームを削除すると、どのくらいのスペースが確保されますか?

btrfsサブボリュームを削除すると、どのくらいのスペースが確保されますか?

Btrfsディスクから1つ(またはそれ以上)のサブボリュームを削除する場合(実際には削除せず)、どのくらいのスペースを確保できるかを計算する方法はありますか?私はそこにいることを知っています「現在の計算を代わりに実行できるコードはありません。」しかし、あなたはどうしたいですか?

私は彼らがなぜそんなに遅いと言うのか知りたいです。私の経験によれば、実際にサブボリュームを削除して空き容量を要求することはすべて非常に高速です。なぜ同じことをするのがはるかに遅いと思いますか?

答え1

btrfs quotaそしてbtrfs qgroups(割り当て量グループ)を見てください。

デフォルトでは、要求どおりにqgroups正確に実行すると、サブボリュームに割り当てられているスペースがどれだけあるかを追跡できます。ファイルシステムqgroup機能を有効にするには、btrfs次の手順を実行する必要があります。

# btrfs quota enable /path/to/btrfs/filesystem

ただし、これを行う前に警告を受けるこれにより、データの完全な再計算がトリガーされます。qgroup特に、サブボリュームが多い大規模ファイルシステムでは時間がかかります。このプロセスはバックグラウンドで非同期に実行されます。すでにqgroupsステータスを確認できます。

# btrfs qgroup show /path/to/btrfs/filesystem

これにより、次の出力が提供されます。

WARNING: rescan is running, qgroup data may be incorrect
qgroupid         rfer         excl
--------         ----         ----
0/5         843.69GiB     61.91MiB
0/4881      811.06GiB      9.34GiB
0/7990      867.32GiB    329.91MiB
0/8400      867.17GiB     37.64MiB

(再スキャンの実行中は、最初の行の警告が表示されます。)

Btrfs はqgroupサブボリュームごとに自動的に 1 つを生成します。この例には、サブボリュームIDが4881、7990、8400の3つのサブボリュームがあります。スラッシュの前の部分はですqgroup。各サブボリュームqgroupはレベル0です。さらに、qgroupレベル 0 には ID が常に 5 で、btrfs ファイルシステムのルートに対応する特殊なサブボリュームがあります。

それぞれについて、qgroup上記の出力は参照する空間の量を示しています。これは、そのサブボリュームに表示されている数字と同じフルサイズのファイルが含まれていることを意味します。

ただし、スナップショットとbtrfsサブボリュームの書き込み時のコピー属性によってファイルが共有されることがあります。これは、ファイルの内容(または実際には範囲)が複数のサブボリュームで参照できることを意味します。これは、スペースがどのくらいになるかを示す2番目の数字で表されます。ただ各サブボリュームに割り当てられ、他のサブボリュームと共有されません。サブボリュームを削除すると、実際に解放されるスペースです。

複数のサブボリュームを削除してどのくらいのスペースがあるかを知りたい場合は、上記のレベルを使用できます。qgroupsはい階層的に構成上位レベル(0より大きい)のグループは、下位レベルの情報を集計します。

したがって、上記の例でサブボリューム4881と7990を削除すると、どのくらいのスペースが確保されるかを確認するには、qgroupレベル1に新しいボリュームを作成します(任意のID 0ですが、ここで必要なものを選択できます)。

# btrfs qgroup create 1/0 /path/to/btrfs/filesystem

次に、新しく作成されたサブボリュームを削除するサブボリュームのqgroup親ボリュームとして指定します。qgroups

# btrfs qgroup assign 0/4881 1/0 /path/to/btrfs/filesystem
# btrfs qgroup assign 0/7990 1/0 /path/to/btrfs/filesystem

これにより、クォータ情報の別の再スキャンが開始され、時間がかかる可能性があります。完了して今発行する場合

# btrfs qgroup show -p /path/to/btrfs/filesystem

次のような出力が得られます。

qgroupid         rfer         excl parent
--------         ----         ---- ------
0/5           1.38TiB      2.51GiB ---
0/4881        1.11TiB     10.86GiB 1/0
0/7990        1.23TiB    502.41MiB 1/0
0/8400        1.34TiB      1.69GiB 1/0
1/0           1.51TiB    132.23GiB ---

(親/子関係を示す出力に列を追加するための-pフラグを追加しました。)parentqgroups

この行は、qgroup 1/0削除したい2つのサブボリュームが参照するスペースの量を示し、さらに重要なのは、割り当てられたスペースの量を示します。ただ。これは、両方のサブボリュームを削除した後に確保されるスペースの量です。

私は彼らがなぜそんなに遅いと言うのか知りたいです。

これは、btrfsとスナップショットの記録中のコピー属性によるものです。 btrfsでスナップショットを作成すると(通常)、スナップショットを含む新しく作成されたサブボリュームのすべての物理データがスナップショットソースと共有されます。ソースのファイルが変更または置換されている場合にのみ、他のコンテンツ(範囲)を指します。これにより、他のサブボリュームと共有されるすべてのスペースを考慮する必要があるため、サブボリュームを削除して実際にどのくらいのスペースが確保されるかを評価するのは非常に困難です。

関連情報