Necesita encontrar qué unidades se reflejan dentro del conjunto RAID-10

8

Tengo un servidor de medios doméstico que se ejecuta en openSUSE 12.2. Estoy usando ocho unidades de 2TB en una configuración RAID-10. Deliberadamente compré dos tipos diferentes de unidades: cuatro Seagate Barracuda Green y cuatro Western Digital Red. Mi objetivo es configurar el RAID de modo que cada par reflejado dentro de la matriz consista en unidades diferentes (es decir, una unidad Seagate y una unidad WD). Lamentablemente, el Partitioner de YaST2 no me dio este nivel de elección en la estructura de la matriz, así que ahora estoy tratando de averiguar cómo se ve la estructura RAID10 predeterminada.

Yo sé lo siguiente:

  • sdc, sdd, sde y sdf son unidades WD
  • sdg, sdh, sdi y sdj son unidades de Seagate

Elegí el diseño predeterminado 'n2' al crear el RAID. Mi suposición basada en la información de estas dos fuentes es que las unidades adyacentes se reflejan (es decir, sdc == sdd, sde == sdf, etc.), pero quiero saber con certeza:

Aquí está la salida de '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

Y aquí están los contenidos de / 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>

Entonces mis preguntas son:

  1. ¿Cómo puedo saber qué unidades son espejos entre sí?
  2. ¿Hay alguna forma de cambiar esto, o debería simplemente cambiar los cables (ya que eso cambiará las letras de la unidad) y luego reconstruir el RAID?

Gracias por adelantado.


Nota tangencial, para cualquiera que quiera saber mi razonamiento para hacer esto es: las unidades del mismo modelo y lote, operadas con cargas de uso similares, tiempo de actividad y temperatura tienen poca variación sistemática, y las diferencias en el tiempo de falla entre las unidades se manejarán principalmente por variación aleatoria en el proceso de fabricación. Esto aumenta el riesgo de que varias unidades mueran a la vez. Al comprar unidades no solo de diferentes lotes, sino de fabricantes completamente diferentes, estoy introduciendo una variación sistemática en mi matriz, lo que influye en qué unidades fallarán en momentos similares.

Comunidad
fuente
1
Los servidores de medios domésticos están fuera de tema para ServerFault. Dicho esto, se pone claramente un cierto esfuerzo en esto y voy a marcarlo para que la migración a unix.SE .
Andrew B
@ AndrewB, ¿por qué es eso?
Poige
Es una pregunta muy interesante y el razonamiento detrás se entiende muy bien. No tiene que cambiar los cables ya que solo para especificar el disco cuando (re) crear RAID es mucho más simple.
Poige
@poige Esto cae dentro de cualquier cosa en el hogar . Traté de dejar en claro que consideraba la pregunta investigada adecuadamente a pesar de esto.
Andrew B
Si tuviera que especular salvajemente, supongo que podrías mirar la RaidDevicecolumna. Puede ser tan simple como (0,1), (2,3), (4,5), (6,7). Eso me haría suponer que necesita hacer que RaidDevice se alinee como WD / Sea / WD / Sea / etc ... Pero no estoy 100% seguro de eso.
Zoredache

Respuestas:

5

Las versiones recientes de mdadmmuestran este derecho en los detalles de la matriz. Ejemplo demdadm 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

Tenga en cuenta la denotación set-Ao set-B. En el caso anterior, sddy sdbpueden fallar juntos sin pérdida de datos. Sin embargo, es posible que estos datos no estén disponibles mientras la matriz se está reconstruyendo.

parasietje
fuente
2

Tuve el mismo problema y después de buscar en Google un tiempo no encontré una respuesta confiable. Después de pensarlo, pensé que los espejos tienen los mismos datos y, por lo tanto, podríamos comparar una parte de ellos.

NOTA: TENGA CUIDADO: SI TIENE MÁS DE 2 CONDUCTOS CON EL MISMO CHECKSUM, PROBABLEMENTE COMPARÁ EL DISCO ESPACIO VACÍO, ELIJA OTRO DESPLAZAMIENTO (opción de omisión).

Con estos pocos comandos, puede resolverlo:

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

Esto generará algo como:

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

Ahora sabemos que sda ​​/ sdb es un espejo y sdc / sdd otro. Uno de cada uno debe permanecer para evitar la pérdida de datos.

El comando "dd" está leyendo una vez (cuenta = 1) un Megabyte (bs = 1M) en un desplazamiento de Megabyte desde el inicio del disco (omisión = 1M). No omita = 0, porque el comienzo del disco contiene información diferente. Los datos generalmente comienzan después de 1 MB.

Pascal
fuente
dd if=/dev/$disk skip=1M bs=1M count=1No funcionó para mí. dd (coreutils) 8.23de Debian 8 (Jessie) no es compatible skipcon una unidad. En cambio, utilicé skip=1donde 1es relativo a bs. Posiblemente un error tipográfico?
Daniel Böhmer
FYI Si está viendo la suma MD5, d41d8cd98f00b204e9800998ecf8427esu ddllamada falla. Ese es el hash de la cadena vacía :-)
Daniel Böhmer
0

Creo que estás hablando de una verdadera matriz de incursiones 10 (reflejo rayado 1 + 0)

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

1. Cree sus 4 matrices 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}

En este momento tiene 4 matrices de incursiones 1 con 2 TB de espacio en cada una,

2. ¡Vamos a armarlos!

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

- las opciones de ejecución son útiles porque algunos componentes están activos en otra matriz

3. Adapte su archivo mdadm.conf

Es posible que (según su configuración) necesite adaptar este archivo para reflejar los cambios sobre nuestra nueva matriz (/ dev / md4).

4. Disfruta .. ¡ Tu nueva matriz de bricolaje raid10!

maxxvw
fuente
No, está hablando de la personalidad mdadm raid10 de linux. Creo que su respuesta no se aplica (aunque, para ser justos, le da al OP una alternativa para lograr lo que necesita hacer)
GnP
El rendimiento y las características compatibles también difieren.
Joachim Wagner
0

Siempre puede verificar cuáles son espejos mediante una manera cruda de comparar los datos, por ejemplo:

# 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  -

(si no obtiene ninguna coincidencia, es posible que necesite aumentar skip = , ya que no se saltea el superbloque RAID; y si obtiene el mismo md5sum para más de 2 discos, es posible que necesite aumentar count = , ya que probablemente esté leyendo y m5 sumando ceros, para evitar que primero deba poner algunos datos en la redada, de lo contrario podrían estar llenos de ceros)

En cuanto a los cables de intercambio, no necesita hacer eso: mdadm debería crear una incursión con dispositivos como se especifica en la línea de comandos en mdadm --create , por lo que solo debería especificar unidades en un orden diferente en la línea de comandos.

Matija Nalis
fuente
0

Ejecute "mdadm --examine device" en cada dispositivo componente (es decir, / dev / sda1, / dev / sdb1, etc.). La información allí debería ayudarlo a determinar qué componentes son el espejo de cada uno.

wurtel
fuente