È necessario trovare quali unità sono speculari all'interno dell'array RAID-10


8

Ho un server multimediale domestico in esecuzione su openSUSE 12.2. Sto usando otto unità da 2 TB in una configurazione RAID-10. Ho deliberatamente acquistato due diversi tipi di unità: quattro Seagate Barracuda Green e quattro Western Digital Red. Il mio obiettivo è configurare il RAID in modo tale che ciascuna coppia speculare all'interno dell'array sia composta da unità diverse (ad esempio, un'unità Seagate e un'unità WD). YaST2 Partitioner purtroppo non mi ha dato questo livello di scelta nella struttura dell'array, quindi ora sto cercando di scoprire come appare la struttura RAID10 predefinita.

Conosco quanto segue:

  • sdc, sdd, sde e sdf sono tutte unità WD
  • sdg, sdh, sdi e sdj sono tutte unità Seagate

Ho scelto il layout predefinito 'n2' durante la creazione del RAID. La mia ipotesi basata sulle informazioni di queste due fonti è che le unità adiacenti sono speculari (ad esempio, sdc == sdd, sde == sdf, ecc.), Ma voglio sapere con certezza:

Ecco l'output di 'mdadm --detail / dev / md0':

/dev/md0:
        Version : 1.0
  Creation Time : Sat Mar 16 12:55:11 2013
     Raid Level : raid10
     Array Size : 7814045696 (7452.05 GiB 8001.58 GB)
  Used Dev Size : 1953511424 (1863.01 GiB 2000.40 GB)
   Raid Devices : 8
  Total Devices : 8
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Sat Mar 16 13:09:37 2013
          State : active, resyncing
 Active Devices : 8
Working Devices : 8
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 2048K

  Resync Status : 1% complete

           Name : aldaris:0  (local to host aldaris)
           UUID : c6cc3943:97394500:b77d44cd:f02ed876
         Events : 149

    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8       49        1      active sync   /dev/sdd1
       2       8       65        2      active sync   /dev/sde1
       3       8       81        3      active sync   /dev/sdf1
       4       8       97        4      active sync   /dev/sdg1
       5       8      113        5      active sync   /dev/sdh1
       6       8      129        6      active sync   /dev/sdi1
       7       8      145        7      active sync   /dev/sdj1

Ed ecco i contenuti di / proc / mdstat:

Personalities : [raid10] md0 : active raid10 sdj1[7] sdi1[6] sdh1[5] sdg1[4] sdf1[3] sde1[2] sdd1[1] sdc1[0]
      7814045696 blocks super 1.0 2048K chunks 2 near-copies [8/8] [UUUUUUUU]
      [>....................]  resync =  4.8% (375163456/7814045696) finish=1206.5min speed=102751K/sec
      bitmap: 57/59 pages [228KB], 65536KB chunk

unused devices: <none>

Quindi le mie domande sono:

  1. Come faccio a sapere quali unità sono mirror l'una dell'altra?
  2. C'è un modo per cambiare questo, o dovrei semplicemente scambiare i fili (dal momento che scambieranno le lettere dell'unità) e quindi ricostruire il RAID?

Grazie in anticipo.


Nota tangenziale, per chiunque voglia sapere che il mio ragionamento per farlo è: azionamenti dello stesso modello e lotto, operati con carichi di utilizzo, tempo di attività e temperatura simili hanno scarse variazioni sistematiche e le differenze nel tempo di guasto tra le unità saranno principalmente guidate per variazione casuale nel processo di fabbricazione. Ciò aumenta il rischio che muoiano più unità contemporaneamente. Acquistando unità non solo da lotti diversi ma produttori completamente diversi, sto introducendo una variazione sistematica nel mio array, influenzando in tal modo quali unità si guasteranno in momenti simili.


1
I server multimediali domestici sono fuori tema per ServerFault. Detto questo, è chiaramente necessario un maggiore impegno in questo e ho intenzione di bandiera che per la migrazione a unix.SE .
Andrew B,

@AndrewB, perché?
poige

È una domanda molto interessante e il ragionamento alla base è così ben compreso. Non è necessario cambiare i fili poiché basta specificare il disco quando (ri) creare RAID è molto più semplice.
poige

@poige Questo cade sotto qualsiasi cosa in un ambiente domestico . Ho cercato di chiarire che ho considerato la domanda adeguatamente studiata nonostante questo.
Andrew B,

Se dovessi speculare selvaggiamente, indovinerei che potresti guardare la RaidDevicecolonna. Potrebbe essere semplice come (0,1), (2,3), (4,5), (6,7). Questo mi farebbe supporre che tu debba allineare RaidDevice come WD / Sea / WD / Sea / etc ... Ma non ne sono sicuro al 100%.
Zoredache,

Risposte:


5

Le versioni recenti di mdadmmostrano questo diritto nei dettagli dell'array. Esempio damdadm v3.3 - 3rd September 2013

 $ mdadm --detail /dev/md1

/dev/md1:
        Version : 1.1
  Creation Time : Tue Aug 23 11:45:41 2016
     Raid Level : raid10
     Array Size : 3864803328 (3685.76 GiB 3957.56 GB)
  Used Dev Size : 1932401664 (1842.88 GiB 1978.78 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Fri Aug 26 09:39:28 2016
          State : active
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : px4-300r-THXOAP:1  (local to host px4-300r-THXOAP)
           UUID : 5ee06437:83dfdb64:808feaa2:5d57b1e6
         Events : 620

    Number   Major   Minor   RaidDevice State
       4       8       50        0      active sync set-A   /dev/sdd2
       1       8       34        1      active sync set-B   /dev/sdc2
       2       8       18        2      active sync set-A   /dev/sdb2
       3       8        2        3      active sync set-B   /dev/sda2

Notare la denotazione set-Ao set-B. Nel caso precedente, sdde sdbpuò fallire insieme senza perdita di dati. È possibile che questi dati non siano disponibili durante la ricostruzione dell'array.


2

Ho avuto lo stesso problema e dopo aver cercato su Google per un po 'non ho trovato una risposta affidabile. Dopo averci pensato, ho pensato che i mirror avessero gli stessi dati e quindi potessimo confrontarne una parte.

NOTA: ATTENZIONE, SE AVETE PIÙ DI 2 AZIONAMENTI CON LO STESSO CHECKSUM SEI CONFRONTO PROBABILMENTE IL DISKSPACE VUOTO, SCEGLI UN ALTRO OFFSET (opzione salta).

Con questi pochi comandi, puoi capirlo:

for disk in sda sdb sdc sdd
do
  echo -n "$disk = ";
  dd if=/dev/$disk skip=1M bs=1M count=1 2>/dev/null | md5sum;
done

Questo produrrà qualcosa di simile:

sda = 7c4ef0f3e0143b35e044d5d65908a3a2  -
sdb = 7c4ef0f3e0143b35e044d5d65908a3a2  -
sdc = e02f7d61ad3791bd691da5b7516928a5  -
sdd = e02f7d61ad3791bd691da5b7516928a5  -

Ora sappiamo che sda ​​/ sdb è un mirror e sdc / sdd un altro. Uno di questi deve rimanere per evitare la perdita di dati.

Il comando "dd" sta leggendo una volta (conteggio = 1) un Megabyte (bs = 1M) a un offset di Megabyte dall'avvio del disco (skip = 1M). Non saltare = 0, perché l'inizio del disco contiene informazioni diverse. I dati di solito iniziano dopo 1 MB.


dd if=/dev/$disk skip=1M bs=1M count=1non ha funzionato per me. dd (coreutils) 8.23da Debian 8 (Jessie) non supporta skipun'unità. Invece ho usato skip=1dove 1è relativo bs. Forse un errore di battitura?
Daniel Böhmer,

Cordiali saluti Se vedi la somma MD5 la d41d8cd98f00b204e9800998ecf8427etua ddchiamata fallisce. Questo è l'hash della stringa vuota :-)
Daniel Böhmer,

0

Penso che tu stia parlando di un vero raid 10 array (1 + 0 mirroring a strisce)

sdc/sdg = md0 raid1 2TB |
sdd/sdh = md1 raid1 2TB |_  md4 raid0 8TB
sde/sdi = md2 raid1 2TB |
sdf/sdj = md3 raid1 2TB |

1. Crea i tuoi 4 array raid1:

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/{sdc,sdg}
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/{sdd,sdh}
mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/{sde,sdi}
mdadm --create /dev/md3 --level=1 --raid-devices=2 /dev/{sdf,sdj}

In questo momento hai 4 array raid 1 con 2 TB di spazio su ciascuno,

2. Montiamoli!

mdadm --create /dev/md4 --run --level=0 --raid-devices=4 /dev/md{0,1,2,3}

Le opzioni --run sono utili perché alcuni componenti sono attivi in ​​un altro array

3. Adatta il tuo file mdadm.conf

Potrebbe essere necessario (a seconda della configurazione) per adattare questo file per riflettere le modifiche al nostro nuovo array (/ dev / md4).

4. Divertiti .. Il tuo nuovo array raid10 fai-da-te!


No, sta parlando della personalità di mdadm raid10 di Linux. Credo che la tua risposta non si applichi (anche se, per essere onesti, offre al PO un'alternativa per ottenere ciò che deve fare)
GnP

Anche le prestazioni e le funzionalità supportate differiscono.
Joachim Wagner,

0

È sempre possibile verificare quali sono i mirror mediante un modo grezzo di confrontare i dati, ad esempio:

# dd if=/dev/sda1 bs=1M skip=10 count=50 2> /dev/null | md5sum -
7c01afa434fc74aeddc8ec0546e4c332  -
# dd if=/dev/sdb1 bs=1M skip=10 count=50 2> /dev/null | md5sum -
1f0f8166857710d555cb35db4a23891a  -
# dd if=/dev/sdg1 bs=1M skip=10 count=50 2> /dev/null | md5sum -
7c01afa434fc74aeddc8ec0546e4c332  -
# dd if=/dev/sdf1 bs=1M skip=10 count=50 2> /dev/null | md5sum -
1f0f8166857710d555cb35db4a23891a  -

(se non si ottiene alcuna corrispondenza, potrebbe essere necessario aumentare skip = , poiché non si ignora RAID superblocksl; e se si ottiene lo stesso md5sum per più di 2 dischi, potrebbe essere necessario aumentare count = , poiché probabilmente stai leggendo e zeri di m5summing - per evitare che tu debba prima inserire alcuni dati nel raid, altrimenti potrebbero essere pieni di zero)

Per quanto riguarda i cavi di scambio in giro, non è necessario farlo - mdadm dovrebbe creare un raid con i dispositivi come specificato sulla riga di comando in mdadm --create , quindi dovresti semplicemente specificare le unità in ordine diverso sulla riga di comando.


0

Eseguire "mdadm --examine device" su ciascun dispositivo componente (ad es. / Dev / sda1, / dev / sdb1, ecc.). Le informazioni lì dovrebbero aiutarti a determinare quali componenti sono il mirror di ogni altro.

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.