Anda harus melihat btrfs quota
dan btrfs qgroups
(grup kuota).
Pada dasarnya qgroups
melakukan persis apa yang Anda minta, mereka melacak berapa banyak ruang yang dialokasikan oleh subvolume. Untuk mengaktifkan qgroup
fungsionalitas untuk btrfs
sistem file, Anda harus melakukannya
# btrfs quota enable /path/to/btrfs/filesystem
Namun, sebelum Anda melakukan ini, diperingatkan bahwa ini memicu komputasi ulang qgroup
data 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 qgroups
dengan
# 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 qgroup
untuk setiap subvolume. Dalam hal ini ada tiga subvolume dengan ID subvolume 4881, 7990, dan 8400. Bagian sebelum garis miring adalah tingkat qgroup
. Setiap subvolume qgroup
ada di level 0. Selain itu ada khusus qgroup
di level 0 yang selalu memiliki ID 5 dan sesuai dengan root dari sistem file btrfs.
Untuk setiap qgroup
output 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. qgroups
yang 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 qgroup
sebagai induk ke qgroups
subvolume 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 -p
bendera untuk menambahkan parent
kolom ke output yang menunjukkan hubungan induk / anak dari qgroups
.)
Sekarang baris dengan qgroup
1/0
memberi 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.