Bagaimana cara memeriksa RAID 'mdadm' saat menjalankan?


41

Saya mulai mendapatkan koleksi komputer di rumah dan untuk mendukung mereka, saya memiliki "server" linux box saya yang menjalankan array RAID.

Saat ini mdadm RAID-1, akan RAID-5sekali saya memiliki lebih banyak drive (dan kemudian RAID-6saya berharap). Namun saya telah mendengar berbagai cerita tentang data yang rusak pada satu drive dan Anda tidak pernah memperhatikan karena drive lain sedang digunakan, sampai pada titik ketika drive pertama gagal, dan Anda menemukan drive kedua Anda juga kacau (dan 3, 4 , Drive ke-5).

Jelas cadangan itu penting dan saya juga mengatasinya, namun saya tahu saya sebelumnya pernah melihat skrip yang mengklaim dapat membantu mengatasi masalah ini dan memungkinkan Anda untuk memeriksa RAID Anda saat sedang berjalan. Namun mencari skrip ini lagi sekarang saya merasa sulit untuk menemukan apa pun yang tampaknya mirip dengan apa yang saya jalankan sebelumnya dan saya merasa saya ketinggalan zaman dan tidak memahami apa pun yang telah berubah.

Bagaimana Anda memeriksa RAID yang sedang berjalan untuk memastikan semua disk masih terbentuk normal?

Saya memantau SMART pada semua drive dan juga telah mdadmmengatur untuk mengirim email kepada saya jika terjadi kegagalan, tetapi saya ingin mengetahui drive saya sesekali "memeriksa" diri mereka juga.


Kedengarannya Anda sudah berada di jalur yang benar, Anda hanya perlu mengatur cron untuk mengirimkan hasil smartctl untuk drive Anda.
laebshade

Jawaban:


56

Inti dari RAID dengan redundansi adalah ia akan terus berjalan selama mungkin, tetapi jelas ia akan mendeteksi kesalahan yang memasukkannya ke mode terdegradasi, seperti disk yang gagal. Anda dapat menampilkan status array saat ini dengan mdadm -D:

# mdadm -D /dev/md0
<snip>
       0       8        5        0      active sync   /dev/sda5
       1       8       23        1      active sync   /dev/sdb7

Lebih jauh lagi, status pengembalian mdadm -Dbukan nol jika ada masalah seperti komponen yang gagal (1 menunjukkan kesalahan yang dikompensasi oleh mode RAID, dan 2 menunjukkan kegagalan total).

Anda juga bisa mendapatkan ringkasan cepat dari semua status perangkat RAID dengan melihatnya /proc/mdstat. Anda dapat memperoleh informasi tentang perangkat RAID /sys/class/block/md*/md/*juga; lihat Documentation/md.txtdi dokumentasi kernel. Beberapa /sysentri juga dapat ditulisi; misalnya Anda dapat memicu pemeriksaan lengkap md0dengan echo check >/sys/class/block/md0/md/sync_action.

Selain pemeriksaan spot ini, mdadm dapat memberi tahu Anda segera setelah sesuatu yang buruk terjadi. Pastikan bahwa Anda memiliki MAILADDR rootdi /etc/mdadm.conf(beberapa distribusi (misalnya Debian) mengatur ini secara otomatis). Kemudian Anda akan menerima pemberitahuan email segera setelah kesalahan (array yang rusak) terjadi .

Pastikan Anda menerima pengiriman email ke root pada mesin lokal (beberapa distribusi modern mengabaikannya, karena mereka menganggap bahwa semua email melewati penyedia eksternal - tetapi menerima email lokal diperlukan untuk administrator sistem yang serius). Uji ini dengan mengirimkan email akar: echo hello | mail -s test root@localhost. Biasanya, penyetelan email yang benar membutuhkan dua hal:

  • Jalankan MTA di mesin lokal Anda. MTA harus diatur setidaknya untuk memungkinkan pengiriman surat lokal. Semua distribusi datang dengan MTA yang sesuai, pilih apa saja (tetapi bukan nullmailer jika Anda ingin email dikirimkan secara lokal).
  • Alihkan surat ke akun sistem (setidaknya root) ke alamat yang Anda baca secara teratur. Ini bisa berupa akun Anda di mesin lokal, atau alamat email eksternal. Dengan sebagian besar MTA, alamat dapat dikonfigurasi dalam /etc/aliases; Anda harus memiliki garis seperti

    root: djsmiley2k
    

    untuk pengiriman lokal, atau

    root: djsmiley2k@mail-provider.example.com
    

    untuk pengiriman jarak jauh. Jika Anda memilih pengiriman jarak jauh, pastikan MTA Anda dikonfigurasi untuk itu. Bergantung pada MTA Anda, Anda mungkin perlu menjalankan newaliasesperintah setelah mengedit /etc/aliases.


Bisakah Anda jelaskan mengapa nullmailer tidak boleh digunakan? Apakah karena alasan yang disebutkan di unix.stackexchange.com/questions/1449/… ? MTA mana yang akan Anda rekomendasikan?
Cameron Martin

@CameronMartin Nullmailer hanya mengirim email ke mesin jarak jauh, itu tidak melakukan pengiriman lokal. Anda dapat menggunakannya jika Anda memiliki server SMTP di suatu tempat yang menerima email dari mesin Anda, tetapi tidak jika Anda mengirim email secara lokal. Saya telah mengedit jawaban saya untuk menjelaskan.
Gilles 'SO- stop being evil'

19

Anda dapat memaksa pemeriksaan seluruh array saat online. Misalnya, untuk memeriksa larik /dev/md0, jalankan sebagai root:

echo check > /sys/block/md0/md/sync_action

Saya juga memiliki pekerjaan cron yang menjalankan perintah berikut sebulan sekali:

tar c /dir/of/raid/filesystem > /dev/null

Ini bukan pemeriksaan menyeluruh dari drive itu sendiri, tetapi itu memaksa sistem untuk secara berkala memverifikasi bahwa (hampir) setiap file dapat dibaca dengan sukses dari disk. Ya, beberapa file akan dibaca dari cache memori, bukan disk. Tapi saya pikir jika file tersebut ada dalam cache memori, maka file itu baru-baru ini berhasil dibaca dari disk, atau akan ditulis ke disk, dan salah satu dari operasi itu juga akan mengungkap kesalahan drive. Bagaimanapun, menjalankan pekerjaan ini menguji kriteria paling penting dari array RAID ("Bisakah saya berhasil membaca data saya?") Dan dalam tiga tahun saya telah menjalankan array saya, satu kali saya memiliki drive yang rusak, itu adalah perintah ini yang menemukannya.

Satu peringatan kecil adalah jika sistem file Anda besar, maka perintah ini akan memakan waktu lama; sistem saya membutuhkan sekitar 6 jam / TiB. Saya menjalankannya menggunakan ionicesehingga sisa sistem tidak terhenti selama cek drive:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null

Perhatikan bahwa ionicehanya akan berfungsi jika Anda menggunakan penjadwal I / O CFQ (default).
Totor

Jadi ini mungkin jelas bagi kebanyakan orang, tetapi bukan bagi saya - bagaimana menjalankan skrip yang hasilnya diarahkan ke devnull sebenarnya memberi tahu Anda tentang sesuatu? Apakah itu kasus bahwa jika "tar" menemukan kesalahan, ini akan disebarkan ke daemon mdadm yang akan (mungkin) mengirimi Anda email?
ljwobker

Pertanyaan saya kepada Anda, apakah Anda mengetahui kesalahan tar jika dijalankan dari pekerjaan cron? Di mana output itu? Saya akan berpikir Anda akan menambahkan pengalihan untuk stderr ke file yang dapat dipantau secara berkala atau ekornya dicetak ke konsol membuka jendela terminal :)
Madivad

1
@ ljwobker Maaf telah menghidupkan kembali utas lama. Saya pikir maksud dari perintah tar di sini adalah untuk mencoba membaca seluruh isi volume. Ini akan memverifikasi bahwa seluruh volume masih dapat dibaca dan memberi saya kesempatan untuk mendeteksi disk yang buruk.
mikepj

1
Jika itu berasal dari cronjob, cron biasanya akan mengirim semua output langsung ke mailto = lokasi, jika ada yang diatur, jika tidak untuk root. Namun ... Saya ingin tahu apakah dd akan lebih baik daripada tar, untuk overhead yang lebih rendah?
djsmiley2k - Kontrak Karya

11

paket Debian dan Ubuntu 'mdadm' berisi file tersebut

/etc/cron.d/mdadm

yang pada gilirannya minggu pertama setiap bulan akan menjalankan perintah

/usr/share/mdadm/checkarray --cron --all --idle --quiet

yang akan memeriksa semua array Anda untuk konsistensi (kecuali jika Anda mengatur AUTOCHECK menjadi false di / etc / default / mdadm ). Laporan akan dikirim ke pengguna 'root' (pastikan Anda menerima email seperti itu).


8

Saya menggunakan fungsi sederhana ini untuk memeriksa /proc/mdstat:

#Health of RAID array
raid() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat; }

rapi! Saya suka gaya :) .. ini persis apa yang saya cari untuk dimasukkan ke dalam MOTD :) terima kasih!
jirislav
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.