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.