Çalışırken 'mdadm' RAID'leri nasıl kontrol edilir?


41

Evde bilgisayar koleksiyonu almaya başladım ve onları desteklemek için RAID dizisini çalıştıran "server" linux kutum var.

Şu anda mdadm RAID-1, RAID-5daha fazla sürücüye sahip RAID-6olduğum için (ve sonra umuyorum). Ancak, bir sürücüde verilerin bozulmasına ilişkin çeşitli hikayeler duydum ve ilk sürücünün başarısız olduğu noktaya kadar, diğer sürücünün kullanıldığından dolayı hiçbir zaman farketmediniz ve ikinci sürücünüzün de vidalandığını (ve 3., 4.) , 5. sürücü).

Açıkçası, yedeklemeler önemlidir ve bununla da ilgileniyorum, ancak daha önce bu soruna karşı yardım edeceğini iddia eden ve çalışırken RAID'inizi kontrol etmenizi sağlayan komut dosyaları gördüğümü biliyorum. Ancak bu senaryoları tekrar aramakla, şimdi daha önce koştuğum gibi görünen bir şey bulmakta zorlanıyorum ve güncel olmayan olduğumu ve neyin değiştiğini anlamadığımı hissediyorum.

Tüm disklerin hala normal şekilde hazır olduğundan emin olmak için çalışan bir RAID'i nasıl kontrol edersiniz?

Tüm sürücülerde SMART'ı izliyorum ve mdadmarıza durumunda bana e-posta göndermeyi ayarlamıştım ancak ara sıra sürücülerimin de kendilerini kontrol ettiklerini bilmek istiyorum.


Halen doğru yoldaymışsınız gibi görünüyor, sürücüleriniz için smartctl sonuçlarını göndermek için bir cron kurmanız yeterli.
laebshade,

Yanıtlar:


56

Artıklık içeren RAID'in amacı, devam edebildiği sürece devam edeceği, ancak açık bir şekilde başarısız disk gibi bozulmuş bir moda sokan hataları algılayacağıdır. Dizinin şu anki durumunu şu şekilde gösterebilirsiniz mdadm -D:

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

Ayrıca, mdadm -Dbaşarısız bir bileşen gibi herhangi bir sorun varsa , iade durumu sıfır değildir (1, RAID modunun telafi ettiği bir hatayı, 2 ise tam bir hatayı belirtir).

Ayrıca, bakarak tüm RAID cihaz durumunun hızlı bir özetini de alabilirsiniz /proc/mdstat. Bir RAID cihazı hakkında da bilgi alabilirsiniz /sys/class/block/md*/md/*; bkz Documentation/md.txtçekirdek belgelerinde. Bazı /sysgirişler de yazılabilir; örneğin md0ile tam bir kontrol tetikleyebilirsiniz echo check >/sys/class/block/md0/md/sync_action.

Bu nokta kontrollerine ek olarak, mdadm kötü bir şey olursa sizi haberdar edebilir. Bulunmadığından emin olun MAILADDR rootiçinde /etc/mdadm.conf(bazı dağılımlar (örneğin Debian) otomatik Bunu ayarlamak). Ardından bir hata (en aza indirilmiş bir dizi) meydana gelir gelmez bir e-posta bildirimi alırsınız .

Yerel makinede köke gönderdiğiniz postaları aldığınızdan emin olun (bazı modern dağıtımlar bunu ihmal eder, çünkü tüm e-postaların harici sağlayıcılardan geçtiğini düşünürler - ancak herhangi bir ciddi sistem yöneticisi için yerel posta almak gerekir). Kök bir mail göndererek bu test edin: echo hello | mail -s test root@localhost. Genellikle, uygun bir e-posta kurulumu iki şey gerektirir:

  • Yerel makinenizde bir MTA çalıştırın . MTA en azından yerel posta dağıtımına izin verecek şekilde kurulmalıdır. Tüm dağıtımlar uygun MTA'larla birlikte gelir, bir şey seçin (ancak e-postanın yerel olarak teslim edilmesini istiyorsanız boş posta göndermez).
  • Sistem hesaplarına giden postaları (en azından root) düzenli olarak okuduğunuz bir adrese yönlendirin. Bu, yerel makinedeki hesabınız veya harici bir e-posta adresi olabilir. Çoğu MTA ile, adres /etc/aliases; gibi bir çizgi olmalı

    root: djsmiley2k
    

    yerel teslimat için veya

    root: djsmiley2k@mail-provider.example.com
    

    uzaktan teslimat için. Uzaktan teslimatı seçerseniz, MTA'nızın bunun için yapılandırıldığından emin olun. MTA'nıza bağlı olarak, newaliasesdüzenlemeden sonra komutu çalıştırmanız gerekebilir /etc/aliases.


Nullmailer'in neden kullanılmaması gerektiğini açıklayabilir misiniz? Unix.stackexchange.com/questions/1449/… de belirtilen nedenlerden dolayı mı? Hangi MTA'yı önerirsiniz?
Cameron Martin,

@CameronMartin Nullmailer sadece uzak bir makineye posta gönderir, yerel teslimat yapmaz. Makinenizden posta kabul eden bir yerde bir SMTP sunucunuz varsa, ancak postayı yerel olarak teslim ediyorsanız kullanabilirsiniz. Açıklığa kavuşturmak için cevabımı düzenledim.
Gilles 'SO- kötülük olmayı bırak'

19

Çevrimiçi durumdayken dizinin tamamını denetlemeye zorlayabilirsiniz. Örneğin, diziyi kontrol etmek için /dev/md0root olarak çalıştırın:

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

Ayrıca ayda bir kez aşağıdaki komutu çalıştıran bir cron işim var:

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

Sürücünün kendisini tam olarak kontrol etmiyor, ancak sistemi her bir diskten başarıyla okuyabildiğini (neredeyse) düzenli aralıklarla doğrulamak için zorluyor. Evet, bazı dosyalar disk yerine bellek önbelleğinden okunacak. Ancak, dosyanın bellek önbelleğindeyse, son zamanlarda başarıyla diskten okunduğunu veya diske yazılmak üzere olduğunu ve bu işlemlerden birinin sürücü hatalarını da ortaya çıkaracağını düşünüyorum. Her neyse, bu işi çalıştırmak bir RAID dizisinin (“Verilerimi başarılı bir şekilde okuyabilir miyim?”) En önemli kriterini test eder ve üç yıl içinde dizimi çalıştırdım, bir defasında sürücüm kötüleşti. onu keşfeden bu emir.

Küçük bir uyarı, eğer dosya sisteminiz büyükse, bu komutun çok zaman alacağı yönündedir; sistemim yaklaşık 6 saat sürer. Ben kullanarak çalıştırmak ioniceböylece sistemin geri kalanı sürücü kontrolü sırasında durma noktasına etmediğini:

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

ioniceYalnızca (varsayılan) CFQ G / Ç zamanlayıcı kullanıyorsanız çalışacağını unutmayın .
Totor

Yani bu çoğu kişi için açık olabilir, ama benim için değil - çıktıları devnull'a yönlendirilen bir komut dosyasını çalıştırmak sizi gerçekten bir şeyden nasıl haberdar eder? Eğer "tar" herhangi bir hatayla karşılaşırsa, bunların (muhtemelen) size bir e-posta gönderecek olan mdadm arka planına yayılması söz konusu mu?
ljwobker

Size sorumu aptalca, bir cron işinden çalıştırılıyorsa katran hatalarını nasıl tespit edersiniz? Bu çıktı nerede? Stderr için düzenli aralıklarla izlenebilecek bir dosyaya yönlendirme yapılabileceğini veya kuyruğunu bir terminal penceresi açma konsoluna yazdırılacağını
düşünürdüm

1
@ljwobker Eski bir konuyu canlandırdığım için özür dilerim. Buradaki tar komutunun amacı, birimin tüm içeriğini okumaya çalışmaktır. Bu işlem, tüm birimin hala okunabilir olduğunu doğrular ve MD'ye bozuk bir disk algılama şansı verir.
mikepj

1
Bir cronjob'dan geliyorsa, cron normal olarak çıktılarının hepsini doğrudan mailto = konumuna, eğer biri ayarlanmışsa root'a gönderir. Ancak ... merak ediyorum, düşük yükü için dd katrandan daha iyi olur mu?
djsmiley2k - CoW

11

Debian ve Ubuntu 'mdadm' paketi dosyayı içeriyor

/etc/cron.d/mdadm

sırayla her ayın ilk pazar günü emir verecek

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

tüm dizilerinizi tutarlılık açısından kontrol eder (AUTOCHECK işlevini / etc / default / mdadm konumunda false olarak ayarlamazsanız ). 'Kök' kullanıcıya rapor gönderilir (bu e-postaları aldığınızdan emin olun).


8

Bu basit işlevi kontrol etmek için kullanıyorum /proc/mdstat:

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

düzgün! Stili seviyorum :) .. bu tam olarak MOTD koymak için aradığım şeydi :) teşekkürler!
jirislav
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.