Apa sebenarnya yang dilakukan scrub btrf? Menurut halaman buku panduan, yang sama sekali tidak jelas, ia melakukan beberapa pengecekan kesalahan. Pengecekan seperti apa? Seberapa andal itu? Apakah dapat memulihkan beberapa kesalahan? Bagaimana cara kerjanya? Apakah ini berfungsi pada setiap disk btrfs?
19
Jawaban:
Saya tidak tahu apakah itu melakukan hal lain, tetapi saya tahu bahwa minimal
btrfs scrub
melakukan penggosokan data disk penuh. Pada dasarnya, ia membaca semua data * pada disk, mengkomputasi ulang checksum-nya, dan membandingkan checksum yang dikomputasi dengan yang tersimpan. Ketika checksum yang disimpan dan dihitung ulang tidak cocok, sistem tahu ada korupsi.Setelah korupsi terdeteksi, perilaku tergantung pada pengaturan disk Anda. Misalnya, jika Anda memiliki RAID 1 (mirroring), maka
btrfs scrub
dapat memperbaiki data yang rusak dengan menyalin versi yang tidak rusak dari disk lain. Jika semua salinan dari beberapa data rusak (misalnya, kerusakan multi-disk atau tidak memiliki salinan berlebihan di tempat pertama), maka tidak ada banyak yangbtrfs scrub
bisa dilakukan selain memperingatkan Anda.Alasan ini penting adalah bahwa hard drive hanya sekitar 99,999999999999% dapat diandalkan dalam membaca dan menulis bit. Jadi, setiap beberapa terabyte data I / O, kemungkinan ada kesalahan. Meskipun kesalahan dapat dan terdeteksi (dan diperbaiki, dengan asumsi salinan yang berlebihan masih valid) selama akses disk normal, penggosokan diska penuh secara rutin dapat menemukan dan memperbaiki kesalahan sebelum cukup mengakumulasikan bahwa semua salinan dari data yang sama rusak.
* Saya menggunakan "data" bukan "file" untuk memasukkan metadata juga. Btrfs menyimpan file dan metadata yang sesuai (termasuk checksum) dalam blok data, yang semuanya checksummed dan diperiksa oleh
btrfs scrub
.Lihat juga:
sumber
100-1/10^14
memiliki 16 sembilan dan posting hanya memiliki 14 (sesuai dengan 10 ^ 12).1-10^n
, yang kemudian dikonversi menjadi persen karena manusia tidak suka desimal terdepan. Juga, saya lalai menyebutkan dalam komentar saya sebelumnya bahwa drive berada di RAID 1 (maka data 270-300 GiB yang sama ada di masing-masing), yang memperbaiki kesalahan perhitungan lain yang jelas.Memperluas jawaban Mark Haferkamp yang luar biasa,
btrfs scrub
membaca semua data, bukan semua file, adalah properti yang sangat penting dan sebenarnya yang membuatnya sangat berguna. Ingat, btrfs telah membangun dukungan RAID. Katakanlah Anda memiliki sistem file btrf yang mencakup dua drive yang telah Anda konfigurasikan untuk menggunakan RAID1. Dalam hal ini, ketika Anda menulis ke file, tulisan itu direplikasi ke kedua disk. (Ini menjadi lebih rumit dengan contoh yang lebih kompleks, tetapi untuk kasus sederhana ini, ini selalu terjadi.) Namun ketika Anda membaca dari file itu, membaca hanya akan mencapai satu disk (karena itu adalah pemborosan untuk membaca file dalam dua kali kecuali salinan pertama tidak dapat digunakan karena alasan tertentu).Sekarang katakanlah drive btrfs kedua Anda merosot dan mulai merusak data di sistem file Anda. Ketika Anda membaca blok dari disk ini, btrfs akan melihat bahwa checksum tidak cocok dan akan mengembalikan blok in-band dari salinan yang dikenal baik - salinan pada drive pertama. Ini akan mengembalikan data ke pemanggilan aplikasi
read()
(atau apa pun) seolah-olah tidak ada yang terjadi.Tetapi bagaimana jika btrfs tidak memutuskan untuk membaca dari disk kedua? Ingat, ada dua salinan, sehingga dapat membaca dari disk pertama atau kedua. Jika itu dibaca dari disk pertama, itu tidak akan melihat ada yang salah. Satu-satunya waktu ia akan melihat ada yang salah adalah ketika disk pertama terdegradasi juga. Sekarang Anda benar-benar disembunyikan karena sudah terlambat untuk memulihkan data - salinan disk kedua telah rusak untuk sementara waktu, dan salinan pertama (yang akan digunakan untuk memulihkan disk kedua) sekarang juga rusak!
Di sinilah
btrfs scrub
masuk. Ini membaca semua data , tidak semua file. Ini termasuk metadata, tetapi juga salinan sekunder file yang biasanya tidak ada di jalur baca. Ketika membaca salinan sekunder ini, itu menciptakan peluang untuk koreksi kesalahan in-band btrf untuk menendang dan mengembalikan data dari salinan yang berlebihan.sumber