TL; DR
Fitur defrag Btrfs khusus untuk memperbaiki fragmentasi dalam metadata folder dan konten file, sementara fitur keseimbangan dibuat untuk " menyeimbangkan " (karenanya namanya) jumlah data yang dibagikan antara drive setiap kali drive ditambahkan atau dihapus. Meskipun mereka memiliki beberapa tumpang tindih teoritis dalam apa yang mereka lakukan, mereka tidak terkait langsung, sehingga dokumentasi tidak menghubungkan kedua fitur tersebut.
Verbose jawaban di bawah ini. Perhatikan tentu saja bahwa jawaban panjang saya adalah dengan harapan akan membantu orang lain yang tidak memiliki konteks penuh masalah yang dihadapi.
Alokasi Potongan
Konsep penting dengan btrfs adalah alokasi chunk. Ketika Anda menulis data ke btrfs, ia menulis data itu menjadi potongan "saat ini", biasanya berukuran 1GB dalam ukuran 1 . Jika potongan "saat ini" menjadi penuh, itu akan mengalokasikan potongan baru. Jika potongan yang ada dikosongkan, ruang penyimpanannya tersedia untuk dialokasikan kembali ketika potongan baru diperlukan.
Jika filesystem menggunakan lebih dari satu drive dengan profil penyimpanan "dup", "single", atau "raid1" , pengalokasi chunk selalu lebih suka menempatkan chunk baru berikutnya pada drive dengan ruang paling kosong yang tersedia. Ini memastikan, secara umum, bahwa drive digunakan sama.
Bagaimana Saldo Melakukan Masalahnya
Fitur keseimbangan bekerja dengan mengambil potongan data yang ada dan menuliskannya kembali ke dalam potongan "saat ini". Ketika potongan yang ada dikosongkan dengan cara ini, maka secara otomatis disediakan untuk pengalokasi. Jika potongan yang ada dikosongkan tidak penuh untuk memulai dengan (mungkin data lama dalam potongan dihapus), hasil bersihnya adalah membebaskan ruang disk karena potongan yang lebih baru "lebih padat" dengan data yang relevan.
Ini adalah bagian yang bisa, secara teori, digunakan sebagai bagian dari strategi de-fragmentasi , yang saya rasa adalah alasan mengapa banyak orang menganggapnya sudah. Namun, tentu saja, fitur keseimbangan dibangun dengan tujuan tertentu, jadi mengapa tidak melihat konten file. Ini hanya memeriksa apakah data yang diambil dari potongan yang ada relevan 2 sebelum menyalin data itu ke potongan baru.
Di mana bagian Saldo masuk?
Ketika Anda menambahkan drive baru ke sistem file, pengalokasi awalnya akan cenderung menulis semua data baru ke drive baru, terutama karena memiliki lebih banyak ruang kosong yang tersedia daripada drive yang ada. Dengan menulis ulang semua chunks, semua chunks yang awalnya seimbang hanya ditulis ke drive baru. Setelah disamakan (menjadi seimbang), sisa data akan dialokasikan ulang secara merata di antara drive.
Skenario Saldo Umum:
Saya memiliki drive 2x 500GB dengan 240GB digunakan pada masing-masing; Saya menambahkan drive 500GB lain. Saya biasanya memiliki:
- drive a: 240GB digunakan
- drive b: 240GB digunakan
- drive c: 0GB digunakan
Saya mulai menyeimbangkan semua data. Sekitar seperempat melalui saldo, saya cenderung melihat situasi yang mirip dengan yang berikut:
- drive a: 180GB digunakan
- drive b: 180GB digunakan
- drive c: 120GB digunakan
Pada sekitar sepertiga tanda, tampaknya menjadi seimbang:
- drive a: 160GB digunakan
- drive b: 160GB digunakan
- drive c: 160GB digunakan
Anda tentu saja dapat menghentikan operasi keseimbangan pada titik ini, meskipun ada alasan (baik dan buruk) mengapa Anda ingin membiarkannya selesai 3 .
Bagaimana Fragmentasi Terjadi pada btrfs
Btrfs adalah sistem file CoW ( Copy on Write ), yang berarti bahwa data tidak pernah ditulis berlebihan 4 . Jika Anda memiliki file 100MB yang ada dan menulis lebih dari 1MB sebagian file, porsi 1MB itu tidak dituliskan di atas data yang ada di drive. Sebaliknya itu ditulis di tempat lain dalam potongan "saat ini". Btrf melacak di mana "fragmen" data baru ini disimpan. Ini paling berguna untuk menjaga snapshot data karena itu berarti data lama dipertahankan secara default. Karena SSD, dengan cara yang sangat mirip, juga tidak pernah menimpa data, mekanisme Kontrak Karya ini cocok untuk memungkinkan SSD mempertahankan umur dan kinerjanya.
Di mana Defrag Datang
Terlepas dari kelebihannya, beberapa file sering ditulis berlebihan (biasanya file basis data), sehingga akhirnya memiliki ratusan fragmen ini. Dengan SSD, ada sedikit penalti kinerja dalam jangka pendek. Tetapi dengan spindle drive, penalti kinerja sangat berat.
Salah satu solusinya tentu saja adalah dengan menggunakan fitur defrag btrfs. Operasi defrag menulis ulang konten file dalam potongan saat ini dalam urutan logis dari kondisi saat ini, sehingga mengurangi fragmen menjadi satu set data besar 100MB, bukan banyak potongan terpisah.
Solusi alternatif adalah dengan menggunakan fitur "nocow" khusus untuk file seperti ini. Fitur nocow menyebabkan file ditimpa di tempat. Waspadalah bahwa ada peringatan untuk nocow 5 6 .
Ringkasan Lagi
Saldo melihat potongan dan garis - dan sebenarnya tidak mengetahui konten file kecuali apakah data dalam potongan tersebut masih relevan.
Operasi defrag melihat data folder dan konten file individual dan menulis ulang data dengan cara yang berdekatan. Sisi buruknya adalah dengan snapshot di mana defrag menyebabkan duplikasi dan penggunaan drive ekstra.
Catatan:
Meskipun potongan biasanya berukuran 1GB, mereka bisa lebih besar atau lebih kecil. Saat menggunakan tipe raid, potongan biasanya dilewati beberapa drive dalam kelipatan 1GB. Misalnya, 5 drive dengan raid0 biasanya menghasilkan strip 5GB yang terdiri dari potongan 1GB yang ditulis untuk setiap drive.
Btrfs menggunakan "referensi" ke file konten. Ketika bagian dari file ditimpa, sistem file langsung "referensi" lokasi di mana data itu ditulis. Namun snapshot mungkin masih "merujuk" lokasi lama. Jika tidak ada snapshot - atau snapshot lama dihapus, ini tidak menghasilkan sisa "referensi" yang merujuk pada konten asli yang ditimpa. Konten ini kemudian dianggap tidak relevan dan tidak akan disalin dengan data relevan lainnya dalam operasi keseimbangan.
Pada titik ini, dengan asumsi penyimpanan menggunakan profil "tunggal" 7 yang sederhana , keseimbangan 160GB pertama semuanya akan dipindahkan ke drive baru - tetapi juga pada saat ini, masih memiliki sekitar 320GB yang tersisa untuk diseimbangkan. Sisanya akan seimbang di seluruh drive. Dengan spindle, idealnya Anda ingin menyeimbangkan hanya 160 chunks sebelum meminta btrf menyeimbangkan kembali ketiga drive untuk "penyebaran" data yang lebih baik. Dengan SSD, upaya mempertahankan "penyebaran" data yang merata menjadi sangat rumit, mungkin tidak ada gunanya, dan jauh lebih mungkin sangat buruk untuk masa pakai SSD.
Pengecualian adalah fitur "nocow".
Jika ada snapshots, defragmenting file "live" menyebabkan snapshots dan "live" file merujuk ke lokasi data yang berbeda pada disk, menyebabkan data diduplikasi dan dengan demikian mengambil ruang disk tambahan. Ketika fitur de-duplikasi tujuan umum tersedia, ini tidak akan menjadi masalah.
Menggunakan nocow berarti btrfs tidak memelihara checksum untuk konten file.
Dengan sebagian besar tipe raid (pengecualian raid1), "sebaran" di seluruh drive dapat diperdebatkan karena garis-garis tersebut biasanya ditulis di semua drive.