Apakah ada cara untuk menghitung berapa banyak ruang yang akan saya bebaskan jika saya akan menghapus satu (atau beberapa) subvolume pada disk Btrfs (tanpa benar-benar menghapusnya)? Saya tahu bahwa "saat ini tidak ada kode yang akan melakukan perhitungan untuk Anda" , tetapi bagaimana Anda melakukannya?
Saya juga bertanya-tanya mengapa mereka mengatakan bahwa ini akan sangat lambat? Keduanya benar-benar menghapus subvolume dan bertanya tentang ruang kosong sangat cepat dalam pengalaman saya, mengapa melakukan hal yang sama secara hipotesis jauh lebih lambat?
Jawaban:
Anda harus melihat
btrfs quota
danbtrfs qgroups
(grup kuota).Pada dasarnya
qgroups
melakukan persis apa yang Anda minta, mereka melacak berapa banyak ruang yang dialokasikan oleh subvolume. Untuk mengaktifkanqgroup
fungsionalitas untukbtrfs
sistem file, Anda harus melakukannyaNamun, 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 statusqgroups
denganIni akan memberi Anda beberapa output seperti ini:
(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 tingkatqgroup
. Setiap subvolumeqgroup
ada di level 0. Selain itu ada khususqgroup
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 denganKemudian tetapkan yang baru dibuat
qgroup
sebagai induk keqgroups
subvolume yang ingin Anda hapusIni akan memicu pemindaian ulang lain dari informasi kuota yang mungkin memakan waktu cukup lama. Jika sudah selesai dan Anda sekarang masalah
Anda mendapatkan output seperti ini:
(Saya menambahkan
-p
bendera untuk menambahkanparent
kolom ke output yang menunjukkan hubungan induk / anak dariqgroups
.)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.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.
sumber