Saya melihat beberapa dokumentasi tentang daemon yang dapat menjalankan program / skrip untuk berbagai acara BTRFS, tetapi saya tidak dapat menemukannya lagi.
Bagaimana saya bisa menjalankan skrip / program pada kegagalan drive untuk array BTRFS raid1? Saya ingin menjalankan skrip pada kesalahan apa pun untuk bertindak sebagai peringatan dini untuk drive yang berpotensi gagal, tetapi kegagalan drive yang sebenarnya adalah yang paling penting. Saya ingin meng-unmount sistem file pada saat itu (jika bukan itu yang dilakukan BTRFS) dan mengatur alarm.
Jawaban:
Selain sistem pencatatan reguler, BTRFS memang memiliki perintah statistik , yang melacak kesalahan (termasuk kesalahan baca, tulis, dan korupsi / checksum) per drive:
Jadi Anda bisa membuat cronjob root sederhana:
Ini akan memeriksa jumlah kesalahan positif setiap jam dan mengirimkan Anda email. Jelas, Anda akan menguji skenario seperti itu (misalnya dengan menyebabkan korupsi atau menghapus grep) untuk memverifikasi bahwa pemberitahuan email berfungsi.
Selain itu, dengan filesystem canggih seperti BTRFS (yang memiliki checksumming), sering disarankan untuk menjadwalkan scrub setiap beberapa minggu untuk mendeteksi korupsi diam-diam yang disebabkan oleh drive yang buruk.
The
-B
pilihan akan tetap scrub di latar depan, sehingga Anda akan melihat hasilnya dalam cron email mengirimkan Anda. Jika tidak, itu akan berjalan di latar belakang dan Anda harus ingat untuk memeriksa hasilnya secara manual karena mereka tidak akan ada di email.Pembaruan : Peningkatan grep seperti yang disarankan oleh Michael Kjörling, terima kasih.
Pembaruan 2 : Catatan tambahan tentang menggosok vs operasi baca biasa (ini tidak hanya berlaku untuk BTRFS saja):
Seperti yang ditunjukkan oleh Ioan, scrub dapat memakan waktu berjam-jam, tergantung pada ukuran dan jenis array (dan faktor lainnya), bahkan lebih dari satu hari dalam beberapa kasus. Dan ini adalah pemindaian aktif, tidak akan mendeteksi kesalahan di masa mendatang - tujuan scrub adalah menemukan dan memperbaiki kesalahan pada drive Anda pada saat itu. Tetapi seperti sistem RAID lainnya, disarankan untuk menjadwalkan scrub berkala. Memang benar bahwa operasi i / o biasa, seperti membaca file, tidak memeriksa apakah data yang dibaca benar. Tetapi pertimbangkan mirror sederhana - jika salinan pertama file rusak, mungkin oleh drive yang akan mati, tetapi salinan kedua, yang benar, sebenarnya dibaca oleh BTRFS, maka BTRFS tidak akan tahu bahwa ada korupsi di salah satu drive. Ini hanya karena data yang diminta telah diterima,Ini berarti bahwa bahkan jika Anda secara khusus membaca file yang Anda tahu rusak pada satu drive, tidak ada jaminan bahwa korupsi akan terdeteksi oleh operasi baca ini.
Sekarang, mari kita asumsikan bahwa BTRFS hanya pernah membaca dari drive yang baik, tidak ada scrub dijalankan yang akan mendeteksi kerusakan pada drive yang buruk, dan kemudian drive yang baik menjadi buruk juga - hasilnya akan kehilangan data (setidaknya BTRFS akan tahu file mana yang masih benar dan masih akan memungkinkan Anda untuk membacanya). Tentu saja, ini adalah contoh yang disederhanakan; pada kenyataannya, BTRFS tidak akan selalu membaca dari satu drive dan mengabaikan yang lain.
Tetapi intinya adalah bahwa scrub berkala itu penting karena mereka akan menemukan (dan memperbaiki) kesalahan yang tidak dapat dideteksi oleh operasi baca reguler.
Faulted drive : Karena pertanyaan ini cukup populer, saya ingin menunjukkan bahwa "solusi pemantauan" ini adalah untuk mendeteksi masalah dengan kemungkinan drive yang buruk (mis., Sekarat drive menyebabkan kesalahan tetapi masih dapat diakses).
Di sisi lain, jika drive tiba-tiba hilang (terputus atau benar-benar mati daripada sekarat dan menghasilkan kesalahan), itu akan menjadi drive yang rusak (ZFS akan menandai drive seperti FAULTED). Sayangnya, BTRFS mungkin tidak menyadari bahwa drive hilang ketika sistem file di-mount, seperti yang ditunjukkan dalam entri milis ini dari 09/2015 (mungkin ini telah ditambal):
https://www.mail-archive.com/[email protected]/msg46598.html
Akan ada banyak pesan kesalahan di dmesg saat itu, jadi memahami dmesg mungkin tidak bisa diandalkan.
Untuk server yang menggunakan BTRFS, mungkin gagasan untuk memiliki pemeriksaan khusus (tugas cron) yang mengirimkan peringatan jika setidaknya salah satu drive dalam array RAID hilang, yaitu, tidak dapat diakses lagi ...
sumber
grep -vE ' 0$'
lebih baik?Pada btrfs-progs v4.11.1 stats memiliki opsi --check yang akan mengembalikan non-nol jika salah satu nilai tidak nol, menghilangkan kebutuhan untuk regex.
statistik perangkat -c /
sumber
Saya tidak akan bergantung pada perintah statistik untuk pemberitahuan kesalahan, karena perintah ini tidak mengembalikan kesalahan jika drive tiba-tiba hilang. Anda dapat mengujinya dengan melepaskan kabel sata atau menarik drive - tidak disarankan dengan sistem file penting.
Setelah reboot, btrfs menunjukkan drive yang hilang, tetapi mungkin sudah terlambat.
sumber
Tampaknya tidak ada daemon atau utilitas yang secara resmi melaporkan peristiwa BTRFS untuk penanganan pengguna. Alternatif terdekat adalah memantau log sistem untuk pesan dari BTRFS dan bereaksi sesuai itu.
http://marc.merlins.org/perso/btrfs/post_2014-03-19_Btrfs-Tips_-Btrfs-Scrub-and-Btrfs-Filesystem-Repair.html
Tautan di atas memberikan detail lebih lanjut untuk mengonfigurasi skrip (
sec
paket pada Debian atau SEC ) yang dirancang untuk pemantauan log tujuan umum untuk bertindak atas pesan log yang tidak terduga terkait BTRFS. Itu juga tergantung pada memiliki scrub dijadwalkan secara teratur dari sistem file untuk memeriksa bit-rot dan memancarkan entri log sebagai langkah pencegahan. Di bawah ini adalah kutipan khusus untuk skrip SEC:sumber
Kedengarannya seperti tugas untuk memonitor sistem. Ada cek yang mengimplementasikan API Plugin Nagios disebut: check_btrfs . Seperti yang Anda lihat dalam kode sumber, ia memiliki fungsi yang disebut
check_dev_stats
yang memeriksa statistik perangkat dan akan menjadi kritis jika salah satu nilainya tidak nol. Ini juga memeriksa masalah alokasi. Yang masih belum jelas adalah bagaimana pemeriksaan berlaku jika satu disk tidak ada atau menjadi offline .PS: Plugin ini dikemas dalam Debian: monitoring-plugins-btrfs
sumber