Raid1 con partizione attiva e di riserva


8

Sto riscontrando il seguente problema con una partizione raid software RAID1 sul mio sistema Ubuntu (10.04 LTS, 2.6.32-24-server nel caso in cui sia importante).

Uno dei miei dischi (sdb5) ha segnalato errori I / O ed è stato quindi contrassegnato come difettoso nell'array. L'array è stato quindi degradato con un dispositivo attivo. Quindi, ho sostituito il disco rigido, ho clonato la tabella delle partizioni e ho aggiunto tutte le nuove partizioni ai miei array raid. Dopo aver sincronizzato tutte le partizioni è finito bene, con 2 dispositivi attivi - tranne uno. La partizione che in precedenza aveva segnalato il disco difettoso, tuttavia, non includeva la nuova partizione come dispositivo attivo ma come disco di riserva:

md3 : active raid1 sdb5[2] sda5[1]
  4881344 blocks [2/1] [_U]

Uno sguardo dettagliato rivela:

root@server:~# mdadm --detail /dev/md3
[...]
Number   Major   Minor   RaidDevice State
   2       8       21        0      spare rebuilding   /dev/sdb5
   1       8        5        1      active sync   /dev/sda5

Quindi, ecco la domanda: come faccio a dire al mio raid di trasformare il disco di riserva in uno attivo? E perché è stato aggiunto come dispositivo di riserva? Ricreare o riassemblare l'array non è un'opzione, perché è la mia partizione di root. E non riesco a trovare alcun suggerimento su tale argomento nel Software Raid HOWTO.

Qualsiasi aiuto sarebbe apprezzato.

Soluzione attuale

Ho trovato una soluzione al mio problema, ma non sono sicuro che questo sia il modo effettivo di farlo. Dando un'occhiata più da vicino al mio raid, ho scoperto che sdb5 era sempre elencato come dispositivo di riserva:

mdadm --examine /dev/sdb5
[...]
Number   Major   Minor   RaidDevice State
this     2       8       21        2      spare   /dev/sdb5

   0     0       0        0        0      removed
   1     1       8        5        1      active sync   /dev/sda5
   2     2       8       21        2      spare   /dev/sdb5

quindi la lettura del dispositivo sdb5 nell'array md3 ha sempre finito per aggiungere il dispositivo come ricambio.

Alla fine ho appena ricreato l'array

mdadm --create /dev/md3 --level=1 -n2 -x0 /dev/sda5 /dev/sdb5

che ha funzionato.

Ma la domanda rimane aperta per me: esiste un modo migliore per manipolare i riepiloghi nel superblocco e dire all'array di trasformare sdb5 da un disco di riserva a un disco attivo? Sono ancora curioso di avere una risposta.


Cosa mostra "cat / proc / mdstat"? Non è solo ricostruzione e il "ricambio" sparirà solo quando la ricostruzione sarà terminata? Cosa mostra "mdadm --version"? C'era un vecchio bug ... vedi mail-archive.com/linux-raid@vger.kernel.org/msg09818.html .
ricorre il

No, questo è il problema. Il primo frammento nella domanda mostra l'output di / proc / mdstat per l'array. Il dispositivo è già stato sincronizzato, ma come puoi vedere dopo aver completato correttamente il processo di sincronizzazione, il dispositivo rimane come riserva e non viene trasformato in attivo.
Daniel Baron,

mdadm - v2.6.7.1
Daniel Baron,

Risposte:


1

Daniel: Inizialmente, ricontrolla per vedere se il pezzo di ricambio viene integrato nell'array facendo un:

cat / proc / mdstat

che dovrebbe segnalare se è in corso un processo di compilazione e quanto tempo ci si aspetta che ciò accada.

Se non si verifica alcun edificio, provare quanto segue

mdadm / dev / md3 --remove / dev / sdb5

mdadm / dev / md3 --add / dev / sdb5

E riporta come funziona per te. Vedi http://linux.die.net/man/8/mdadm per maggiori dettagli.


Grazie per l'aiuto, Rolnik. Come puoi vedere dal mio primo frammento / proc / mdstat mostra entrambi i dispositivi nell'array. Il dispositivo è già stato sincronizzato in precedenza (non mostrato qui) senza problemi. Ma dopo aver terminato il processo di risincronizzazione i dispositivi non sono stati trasformati in un dispositivo attivo. La rimozione e l'aggiunta di nuovo non ha modificato questo comportamento.
Daniel Baron,

1

Abbastanza tardi, ma farlo abiliterebbe solo l'unità di riserva:

mdadm --grow /dev/md3 -n 2

Come dice la manpage:

Per creare, costruire o crescere: -n, --raid-devices = Specifica il numero di dispositivi attivi nell'array. Questo, più il numero di dispositivi di riserva (vedi sotto) deve essere uguale al numero di dispositivi componenti (inclusi i dispositivi "mancanti") che sono elencati nella riga di comando per --create. L'impostazione di un valore 1 è probabilmente un errore e quindi richiede che - force sia specificato per primo. Un valore 1 sarà quindi consentito per linear, multipath, RAID0 e RAID1. Non è mai consentito per RAID4, RAID5 o RAID6. Questo numero può essere modificato solo con --grow per array RAID1, RAID4, RAID5 e RAID6 e solo su kernel che forniscono il supporto necessario.


0

Da quello che ricordo, quando ho avuto quel problema (per un motivo diverso) ho dovuto usare --grow per aggiungere nuovamente l'unità di riserva "correttamente" (eliminando anche la condizione di errore).

Qualcosa del genere (verifica con la tua documentazione!):

mdadm --grow --level = difettoso --layout = flush / dev / sdb5

Quindi è possibile aggiungere il dispositivo e dovrebbe essere riconosciuto.

Il problema è che il driver md salva lo stato di ciascuna partizione nei dati di avvio delle unità. Quindi, anche dopo un riavvio, conosce lo stato ed evita le partizioni contrassegnate come difettose.

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.