Anda harus melihat btrfs quotadan btrfs qgroups(grup kuota).
Pada dasarnya qgroupsmelakukan persis apa yang Anda minta, mereka melacak berapa banyak ruang yang dialokasikan oleh subvolume. Untuk mengaktifkan qgroupfungsionalitas untuk btrfssistem file, Anda harus melakukannya
# btrfs quota enable /path/to/btrfs/filesystem
Namun, sebelum Anda melakukan ini, diperingatkan bahwa ini memicu komputasi ulang qgroupdata yang lengkap yang akan memakan waktu terutama untuk sistem file besar dengan banyak subvolume. Proses ini berjalan secara tidak sinkron di latar belakang. Anda sudah dapat memeriksa status qgroupsdengan
# btrfs qgroup show /path/to/btrfs/filesystem
Ini akan memberi Anda beberapa output seperti ini:
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
(Peringatan di baris pertama ada selama proses pemindaian ulang masih berjalan.)
Btrfs secara otomatis membuat qgroupuntuk setiap subvolume. Dalam hal ini ada tiga subvolume dengan ID subvolume 4881, 7990, dan 8400. Bagian sebelum garis miring adalah tingkat qgroup. Setiap subvolume qgroupada di level 0. Selain itu ada khusus qgroupdi level 0 yang selalu memiliki ID 5 dan sesuai dengan root dari sistem file btrfs.
Untuk setiap qgroupoutput di atas menunjukkan berapa banyak ruang yang dirujuk olehnya. Itu berarti bahwa subvolume yang sesuai berisi file yang ukuran totalnya sama dengan angka yang ditunjukkan.
Namun, karena snapshot dan sifat copy-on-write subvolume btrfs dapat berbagi file. Ini berarti bahwa konten (atau sebenarnya luasan) file dapat dirujuk oleh lebih dari satu subvolume. Ini diungkapkan oleh angka kedua yang menunjukkan seberapa banyak ruang yang dialokasikan secara eksklusif oleh setiap subvolume dan tidak dibagi dengan subvolume lainnya. Jika Anda menghapus subvolume ini adalah ruang yang benar-benar akan dibebaskan.
Jika Anda ingin mengetahui berapa banyak ruang yang akan dibebaskan jika Anda menghapus beberapa subvolume, Anda dapat menggunakan level yang disebutkan di atas. qgroupsyang diselenggarakan dalam hirarki dan kelompok pada tingkat atas (lebih tinggi dari 0) mengumpulkan informasi dari tingkat yang lebih rendah.
Jadi, untuk mengetahui berapa banyak ruang yang akan dibebaskan jika subvolume 4881 dan 7990 (dalam contoh di atas) akan dihapus buat yang baru qgroup(sewenang-wenang dengan ID 0, tetapi Anda dapat memilih apa pun yang Anda suka di sini) pada level 1 dengan
# btrfs qgroup create 1/0 /path/to/btrfs/filesystem
Kemudian tetapkan yang baru dibuat qgroupsebagai induk ke qgroupssubvolume yang ingin Anda hapus
# btrfs qgroup assign 0/4881 1/0 /path/to/btrfs/filesystem
# btrfs qgroup assign 0/7990 1/0 /path/to/btrfs/filesystem
Ini akan memicu pemindaian ulang lain dari informasi kuota yang mungkin memakan waktu cukup lama. Jika sudah selesai dan Anda sekarang masalah
# btrfs qgroup show -p /path/to/btrfs/filesystem
Anda mendapatkan output seperti ini:
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 ---
(Saya menambahkan -pbendera untuk menambahkan parentkolom ke output yang menunjukkan hubungan induk / anak dari qgroups.)
Sekarang baris dengan qgroup 1/0memberi tahu Anda berapa banyak ruang yang direferensikan oleh kedua subvolume yang ingin Anda hapus dan, yang lebih penting, ia memberi tahu Anda berapa banyak ruang yang dialokasikan oleh mereka secara eksklusif . Ini adalah jumlah ruang yang akan dibebaskan jika Anda menghapus kedua subvolume.
Saya juga bertanya-tanya mengapa mereka mengatakan itu akan sangat lambat?
Ini karena sifat copy-on-write dari btrf bersama dengan snapshot. Jika Anda membuat snapshot dalam btrfs (biasanya) semua data aktual dalam subvolume yang baru dibuat yang berisi snapshot dibagi dengan sumber snapshot. Hanya ketika sebuah file diubah atau diganti dalam sumber yang menunjukkan konten yang berbeda (luasan). Ini membuatnya sangat sulit untuk menilai berapa banyak ruang sebenarnya akan dibebaskan jika subvolume dihapus karena Anda harus memperhitungkan semua ruang yang dibagi dengan subvolume lainnya.