Come controllare i RAID 'mdadm' durante l'esecuzione?


41

Sto iniziando a ottenere una raccolta di computer a casa e per supportarli ho la mia scatola Linux "server" che esegue un array RAID.

È attualmente mdadm RAID-1, andando a RAID-5quando avrò più unità (e quindi RAID-6spero). Tuttavia, ho sentito diverse storie sui dati che vengono danneggiati su un'unità e che non ti accorgi mai a causa dell'utilizzo dell'altra unità, fino al punto in cui la prima unità si guasta e scopri che anche la tua seconda unità è avvitata (e 3a, 4a, 4a , 5a unità).

Ovviamente i backup sono importanti e me ne occupo anche io, tuttavia so di aver già visto degli script che sostengono di aiutare contro questo problema e ti permettono di controllare il tuo RAID mentre è in esecuzione. Tuttavia, alla ricerca di questi script di nuovo, ora trovo difficile trovare qualcosa che sembra simile a quello che ho eseguito prima e mi sento obsoleto e non capisco cosa sia cambiato.

Come si controlla un RAID in esecuzione per assicurarsi che tutti i dischi stiano ancora eseguendo le preforme normalmente?

Controllo SMART su tutte le unità e ho anche mdadmimpostato di inviarmi un'e-mail in caso di guasto, ma mi piacerebbe sapere che le mie unità occasionalmente "controllano" anche loro.


Sembra che tu sia già sulla buona strada, devi solo impostare un cron per inviarti i risultati di smartctl per le tue unità.
laebshade

Risposte:


56

Il punto di RAID con ridondanza è che continuerà a funzionare il più a lungo possibile, ma ovviamente rileverà errori che lo mettono in modalità degradata, come un disco guasto. È possibile mostrare lo stato corrente di un array con mdadm -D:

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

Inoltre lo stato di ritorno mdadm -Dè diverso da zero se si verificano problemi come un componente guasto (1 indica un errore compensato dalla modalità RAID e 2 indica un errore completo).

Puoi anche ottenere un breve riepilogo di tutto lo stato del dispositivo RAID guardando /proc/mdstat. Puoi anche ottenere informazioni su un dispositivo RAID /sys/class/block/md*/md/*; vedere Documentation/md.txtnella documentazione del kernel. Anche alcune /sysvoci sono scrivibili; ad esempio è possibile attivare un controllo completo di md0con echo check >/sys/class/block/md0/md/sync_action.

Oltre a questi controlli a campione, mdadm può avvisarti non appena succede qualcosa di brutto. Assicurarsi di avere MAILADDR roota /etc/mdadm.conf(alcune distribuzioni (ad esempio Debian) impostare questo automaticamente). Quindi riceverai una notifica via e-mail non appena si verifica un errore (un array degradato) .

Assicurati di ricevere la posta inviata al root sul computer locale (alcune distribuzioni moderne lo omettono, poiché ritengono che tutta la posta elettronica passi attraverso fornitori esterni, ma la ricezione della posta locale è necessaria per qualsiasi serio amministratore di sistema). Prova questo con l'invio di una e-mail di root: echo hello | mail -s test root@localhost. Di solito, una corretta configurazione della posta elettronica richiede due cose:

  • Esegui un MTA sul tuo computer locale. L'MTA deve essere impostato almeno per consentire la consegna della posta locale. Tutte le distribuzioni sono dotate di MTA adatti, scegli qualsiasi cosa (ma non nullmailer se desideri che l'email venga recapitata localmente).
  • Reindirizza la posta andando agli account di sistema (almeno root) a un indirizzo che leggi regolarmente. Questo può essere il tuo account sul computer locale o un indirizzo email esterno. Con la maggior parte degli MTA, è possibile configurare l'indirizzo /etc/aliases; dovresti avere una linea come

    root: djsmiley2k
    

    per la consegna locale, o

    root: djsmiley2k@mail-provider.example.com
    

    per consegna a distanza. Se scegli la consegna remota, assicurati che il tuo MTA sia configurato per quello. A seconda dell'MTA, potrebbe essere necessario eseguire il newaliasescomando dopo la modifica /etc/aliases.


Puoi spiegare perché nullmailer non dovrebbe essere usato? È per i motivi menzionati in unix.stackexchange.com/questions/1449/… ? Quale MTA consiglieresti?
Cameron Martin,

@CameronMartin Nullmailer inoltra solo la posta a un computer remoto, non effettua la consegna locale. Puoi usarlo se hai un server SMTP da qualche parte che accetta la posta dal tuo computer, ma non se stai recapitando la posta localmente. Ho modificato la mia risposta per chiarire.
Gilles 'SO- smetti di essere malvagio' il

19

È possibile forzare un controllo dell'intero array mentre è online. Ad esempio, per verificare l'array /dev/md0, eseguire come root:

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

Ho anche un lavoro cron che esegue il seguente comando una volta al mese:

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

Non è un controllo approfondito dell'unità stessa, ma costringe il sistema a verificare periodicamente che (quasi) ogni file possa essere letto correttamente dal disco. Sì, alcuni file verranno letti dalla cache di memoria anziché dal disco. Ma immagino che se il file si trova nella cache di memoria, allora è stato letto con successo dal disco di recente, o sta per essere scritto sul disco, e una di queste operazioni scoprirà anche errori dell'unità. Ad ogni modo, eseguire questo lavoro mette alla prova il criterio più importante di un array RAID ("Posso leggere con successo i miei dati?") E nei tre anni in cui ho eseguito il mio array, una volta che ho avuto un disco guasto, è stato questo comando che lo ha scoperto.

Un piccolo avvertimento è che se il tuo filesystem è grande, questo comando impiegherà molto tempo; il mio sistema impiega circa 6 ore / TiB. Lo eseguo in ionicemodo che il resto del sistema non si fermi durante il controllo dell'unità:

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

Si noti che ionicefunzionerà solo se si utilizza lo scheduler I / O CFQ (predefinito).
Totor

Quindi questo può essere ovvio per la maggior parte, ma non è per me: in che modo l'esecuzione di uno script il cui output viene reindirizzato a devnull in realtà ti avvisa di qualcosa? Se "tar" riscontra degli errori, questi verranno propagati fino al demone mdadm che (presumibilmente) ti invierà un'e-mail?
Ljwobker,

La mia domanda per te in modo strano: come raccogli gli errori tar se viene eseguito da un cron job? Da dove viene questo output? Avrei pensato che avresti aggiunto un reindirizzamento per stderr a un file che poteva essere monitorato periodicamente o che la coda venisse stampata sulla console di apertura di una finestra del terminale :)
Madivad,

1
@ljwobker Ci scusiamo per aver rianimato un vecchio thread. Penso che l'intento del comando tar qui sia di tentare di leggere l'intero contenuto del volume. Ciò verificherebbe che l'intero volume è ancora leggibile e darebbe a md la possibilità di rilevare un disco danneggiato.
mikepj,

1
Se proviene da un cronjob, cron invierà normalmente tutto il suo output direttamente alla mailto = location, se ne è impostata una, altrimenti su root. Comunque ... mi chiedo se dd sarebbe meglio del catrame, per spese generali inferiori?
djsmiley2k - CoW

11

il pacchetto 'mdadm' di Debian e Ubuntu contiene il file

/etc/cron.d/mdadm

che a sua volta eseguirà il comando la prima domenica di ogni mese

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

controllerà la coerenza di tutti gli array (a meno che non si imposti AUTOCHECK su false in / etc / default / mdadm ). Un rapporto verrà inviato all'utente 'root' (assicurati di ricevere tali e-mail).


8

Uso questa semplice funzione per verificare /proc/mdstat:

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

! pulito mi piace lo stile :) .. questo è esattamente quello che stavo cercando di mettere in MOTD :) grazie!
jirislav,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.