Come posso interrompere e riparare un arrays RAID 5 che non è riuscito e ha in sospeso I / O?

La versione corta : Ho un arrays RAID 5 fallito che ha un gruppo di processi attesi in attesa di operazioni di I / O su di esso; come posso recuperare da questo?

La versione lunga : Ieri ho notato che l'accesso a Samba era molto sporadico; l'accesso alle condivisioni del server da Windows blocca automaticamente l'esploratore in maniera random dopo aver fatto clic su una o due directory. Ho pensato che Windows fosse un dolore e lasciato. Oggi il problema è lo stesso, quindi ho fatto un po 'di scavo; la prima cosa che ho notato era che eseguire ps aux | grep smbd ps aux | grep smbd dà un sacco di linee come questa:

  • Come ottengo rsyslogd per registrare un FQDN di un server anziché il suo nome host breve?
  • Misteri di authorization - apt-get e altre utilità di sistema hanno 000 permessi
  • Software vs utilizzo hardware e cache RAID hardware
  • Cosa devo prendere in considerazione quando si sceglie un tipo RAID?
  • Utilizzando dot (.) Come delimitatore per specificare il gruppo in chown
  • Eseguire lo script Bash su Ubuntu dalla macchina remota di Windows?
  •  ben 969 0.0 0.2 96088 4128 ? D 18:21 0:00 smbd -F root 1708 0.0 0.2 93468 4748 ? Ss 18:44 0:00 smbd -F root 1711 0.0 0.0 93468 1364 ? S 18:44 0:00 smbd -F ben 3148 0.0 0.2 96052 4160 ? D Mar07 0:00 smbd -F ... 

    Ci sono molti processi bloccati nello stato "D". Funzionamento ps aux | grep " D" ps aux | grep " D" mostra alcuni altri processi, tra cui il mio script di backup notturno, che tutti hanno bisogno di accedere al volume montato sulla mia matrix RAID ad un certo punto. Dopo alcuni googling, ho scoperto che potrebbe essere giù alla matrix RAID fallendo, quindi ho controllato /proc/mdstat , che mostra questo:

     ben@jack:~$ cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid5 sdb1[3](F) sdc1[1] sdd1[2] 2930271872 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU] unused devices: <none> 

    E in esecuzione mdadm --detail /dev/md0 :

     ben@jack:~$ sudo mdadm --detail /dev/md0 /dev/md0: Version : 00.90 Creation Time : Sat Oct 31 20:53:10 2009 Raid Level : raid5 Array Size : 2930271872 (2794.53 GiB 3000.60 GB) Used Dev Size : 1465135936 (1397.26 GiB 1500.30 GB) Raid Devices : 3 Total Devices : 3 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Mon Mar 7 03:06:35 2011 State : active, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 1 Spare Devices : 0 Layout : left-symmetric Chunk Size : 64K UUID : f114711a:c770de54:c8276759:b34deaa0 Events : 0.208245 Number Major Minor RaidDevice State 3 8 17 0 faulty spare rebuilding /dev/sdb1 1 8 33 1 active sync /dev/sdc1 2 8 49 2 active sync /dev/sdd1 

    Credo che questo dice che sdb1 non è riuscito, e quindi l'arrays è in esecuzione con due dischi su tre "in su". Alcuni consigli che ho trovato dicono di controllare / var / log / messaggi per notifiche di errori e sicuramente ci sono molti:

     ben@jack:~$ grep sdb /var/log/messages ... Mar 7 03:06:35 jack kernel: [4525155.384937] md/raid:md0: read error NOT corrected!! (sector 400644912 on sdb1). Mar 7 03:06:35 jack kernel: [4525155.389686] md/raid:md0: read error not correctable (sector 400644920 on sdb1). Mar 7 03:06:35 jack kernel: [4525155.389686] md/raid:md0: read error not correctable (sector 400644928 on sdb1). Mar 7 03:06:35 jack kernel: [4525155.389688] md/raid:md0: read error not correctable (sector 400644936 on sdb1). Mar 7 03:06:56 jack kernel: [4525176.231603] sd 0:0:1:0: [sdb] Unhandled sense code Mar 7 03:06:56 jack kernel: [4525176.231605] sd 0:0:1:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE Mar 7 03:06:56 jack kernel: [4525176.231608] sd 0:0:1:0: [sdb] Sense Key : Medium Error [current] [descriptor] Mar 7 03:06:56 jack kernel: [4525176.231623] sd 0:0:1:0: [sdb] Add. Sense: Unrecovered read error - auto reallocate failed Mar 7 03:06:56 jack kernel: [4525176.231627] sd 0:0:1:0: [sdb] CDB: Read(10): 28 00 17 e1 5f bf 00 01 00 00 

    Per me è chiaro che il dispositivo sdb non è riuscito e ho bisogno di interrompere l'arrays, di spegnerlo, di sostituirlo, di riavviare, di riparare l'arrays, di riportrla e di montare il filesystem. Non posso scambiare a caldo un'unità di ricambio e non voglio lasciare l'arrays in esecuzione in uno stato degradato. Credo che dovrei smontare il filesystem prima di fermare l'arrays, ma questo non funziona, ecco where sono bloccato adesso:

     ben@jack:~$ sudo umount /storage umount: /storage: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) 

    È davvero occupato; ci sono circa 30 o 40 processi in attesa di I / O.

    Cosa dovrei fare? Devo uccidere tutti questi processi e riprovare? È una mossa saggia quando sono "ininterrottabili"? Cosa succederebbe se provavo a riavviare il computer?

    Fathemes sapere cosa pensi che dovrei fare. E si prega di chiedere se avete bisogno di ulteriori informazioni per diagnosticare il problema o per aiutare!

  • Linux mdadm software RAID 6 - support il recupero della corruzione bit?
  • Creare la data di una session di shell specifica
  • cron lavoro occasionalmente non in esecuzione
  • trovare tutte le directory contenenti less di x file all'interno
  • Come posso limitare la width di banda di apt-mirror?
  • Come eseguire la scansione di virus Windows sui server Linux?
  • 3 Solutions collect form web for “Come posso interrompere e riparare un arrays RAID 5 che non è riuscito e ha in sospeso I / O?”

    Non credo che dovrai fermare l'arrays. Semplicemente non riesci / dev / sdb, toglierlo (suppongo che sia un disco rigido collegabile) e colbind una nuova unità che dichiarerai come riserva calda.

    Non puoi uccidere un process che sta tentando di / o. Quello che dovnetworking fare è utilizzare l'opzione pigra del command umount per rimuovere il filesystem dal namespace del filesystem anche se i file su esso sono ancora aperti. Per ulteriori informazioni su questo (e altri "quirks" di questo aspetto del design di linux), vedere Neil Brown .

     umount -l /storage 

    Potresti anche interrompere il process di samba che blocerebbe le scritture sul disco e permettere che le scritture correnti finissero piuttosto che smontare il filesystem che si sta scrivendo.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.