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:

  • La cache di pagina Linux rallenta IO sul server dual cpu con ram da 64 GB
  • È sicuro scrivere i dati su un RAID 6 durante la ricostruzione?
  • Come fissare il tempo sul server NTP con un sacco di macchine sincronizzate da esso
  • Fallimento di ricerca temporanea - Postfix / Dovecot
  • Conflitti con i file di configuration PAM durante l'aggiornamento del sistema
  • il significato di rx_queue _ * _ csum_err e rx_fifo_errors
  •  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!

  • iptables - OK, ** ora ** sto facendo bene?
  • Come si applicano pratiche di sviluppo come il controllo delle versioni, il test e la continua integrazione / distribuzione nell'amministrazione del sistema?
  • Come scoprire il motivo per cui l'interface di networking sta eliminando i pacchetti?
  • Come puoi riallocare lo spazio da un gruppo di volumi a un altro gruppo di volumi in Linux?
  • Quali sono le autorizzazioni corrette per /etc/init.d/ script?
  • Simulando un collegamento lento con tc
  • 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.