Bagaimana cara kerja scrub btrf dan apa fungsinya?

19

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?

Petr
sumber
3
Konteks: BTRFS menyimpan checksum, sehingga selalu dapat mengetahui apakah suatu file (atau metadata) tidak apa-apa atau apakah telah rusak. Hampir semua sistem file lain seperti ext4 tidak memiliki checksumming, sehingga mereka tidak akan menghentikan Anda dari membaca file yang telah rusak oleh drive yang buruk (yang akan mati dan sudah mulai merusak data). Ini adalah fitur perlindungan data penting dalam BTRFS dan ini memungkinkan penggosokan.
basic6

Jawaban:

23

Saya tidak tahu apakah itu melakukan hal lain, tetapi saya tahu bahwa minimal btrfs scrubmelakukan 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 scrubdapat 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 yang btrfs scrubbisa 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:

Mark Haferkamp
sumber
Saya belum menghitungnya, tetapi saya bersedia menebak bahwa angka keandalan Anda tidak sesuai dengan beberapa urutan besarnya. HDD konsumen biasanya dispesifikasikan ke tingkat UBE 10 ^ -14 bit. Dengan kata lain, satu kesalahan baca yang tidak dapat diperbaiki per 10 ^ 14 bit dibaca. Masalahnya adalah ini untuk sektor penuh; Anda mendapatkan sektor penuh atau Anda tidak mendapatkan apa-apa (atau itulah idenya; kesalahan diam adalah secangkir teh sama sekali). Jadi kesalahan diperkuat oleh ukuran sektor, yang dengan drive Format Lanjutan adalah 32.768 bit. Oleh karena itu, tingkat kesalahan sebenarnya lebih seperti 10 ^ -10 hingga 10 ^ -11 readbit-error.
CVn
@ MichaelKjörling Saya rasa sektor tidak penting di sini .... Saya punya catatan 29 scrub btrf terakhir dari dua hard drive 1TB internal komputer saya. Jumlah data bervariasi antara 270 dan 300 GiB (untuk total 1,35 * 10 ^ 14 hingga 1,49 * 10 ^ 14 bit dibaca untuk semua kombinasi scrub). Ada 3 kesalahan yang ditemukan selama scrub ini. Dengan asumsi bahwa non-scrub I / O tidak menyebabkan atau membusuk bit tetap, itu hanya 2 hingga 2 kali lipat tingkat kesalahan yang diharapkan dari drive "99,999999999999% dapat diandalkan". Bahkan dengan hanya sektor 4096-bit, saya pikir argumen Anda akan mengharapkan drive saya memiliki ribuan kesalahan sekarang.
Mark Haferkamp
@ MichaelKjörling Sejauh yang saya mengerti lembar spesifikasi pabrikan (Seagate dan WD), ini sedikit kesalahan dan bukan seluruh sektor yang mati. Dan jumlah sembilan dalam jawaban bahkan optimis: 100-1/10^14memiliki 16 sembilan dan posting hanya memiliki 14 (sesuai dengan 10 ^ 12).
Luc
@Luc Ada baiknya jika kematian sektor kurang umum; sekarat sektor berarti drive (mungkin) sebenarnya gagal dan mungkin perlu diganti. Kesalahan bit hanya menyebabkan korupsi data diam, yang dapat dibuat cukup berisik untuk memulihkan dari cadangan. Catatan matematika: Perhitungan aktualnya adalah 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.
Mark Haferkamp
5

Memperluas jawaban Mark Haferkamp yang luar biasa, btrfs scrubmembaca 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 scrubmasuk. 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.

strugee
sumber
2
Apakah Anda yakin bahwa dalam pembacaan RAID1 hanya dilakukan dari 1 disk? Setidaknya dengan RAID mdadm ini seharusnya tidak terjadi. Membaca harus terjadi secara paralel dari kedua disk, tetapi dari data yang berbeda, artinya harus dua kali lebih cepat dari membaca dari satu disk. Baca peningkatan kinerja adalah salah satu fitur utama RAID 1.
Petr
@Petr ya, Anda benar. blok individual hanya dibaca dari satu disk.
strugee
@Petr: Untuk menguraikan, - dalam penggunaan normal, MDADM atau BTRFS tidak dapat membaca kedua salinan data yang sama dari kedua disk. Mereka hanya membaca satu salinan. - MDADM dapat memuat-menyeimbangkan dan mendistribusikan bacaan lintas salinan untuk mendapatkan kecepatan membaca dua kali lipat. (karena semua salin A pergi ke disk 1, dan semua salin B pergi ke disk 2. Karena mdadm akan menggunakan tepat 2 disk). - BTRFS memiliki lebih banyak kesulitan. (karena salinan A dan B akan menuju ke mana pun 2 disk (dari 2 disk atau lebih ) yang kebetulan memiliki ruang paling kosong saat ini - yaitu: 2 salinan akan menyebar secara acak di antara semua disk yang ada saat ini)
DrYak
dan mengenai keamanan: - MDADM dan BTRFS akan mencoba salinan lainnya jika ada masalah. - untuk MDADM satu-satunya masalah yang dapat dideteksi adalah "disk tidak menjawab" (karena tidak memiliki ide sebenarnya dari file yang disimpan di atas) - untuk BTRFS juga dapat mendeteksi korupsi data diam (karena data tersebut checksumed, dan sebagainya lapisan RAID BTRFS mengetahui apakah satu salinan dapat dipercaya atau jika harus mengambil salinan lain)
DrYak
last but not least mengenai RAID5 / 6: - di MDADM hanya berfungsi . (Tapi tidak akan mendeteksi korupsi diam-diam) - dalam BTRFS korupsi diam untuk saat ini tidak ditangani (karena lebih mudah untuk mengambil salinan lain (dalam RAID1) daripada melakukan perhitungan Penghapusan Kode untuk menebak anggota jalur mana yang rusak dan harus dibangun kembali dari sisa data / paritas). Dengan kata lain: pada hari ini (Agustus 2017) jangan gunakan RAID5 / 6 btrfs '.
DrYak