Precisa descobrir quais unidades são espelhadas na matriz RAID-10

8

Eu tenho um servidor de mídia doméstico executando no openSUSE 12.2. Estou usando oito unidades de 2 TB em uma configuração RAID-10. Eu comprei deliberadamente dois tipos diferentes de unidades: quatro Seagate Barracuda Green e quatro Western Digital Red. Meu objetivo é configurar o RAID de modo que cada par espelhado na matriz consista em unidades diferentes (ou seja, uma unidade Seagate e uma unidade WD). Infelizmente, o particionador do YaST2 não me deu esse nível de escolha na estrutura da matriz, então agora estou tentando descobrir como é a estrutura RAID10 padrão.

Eu sei o seguinte:

  • sdc, sdd, sde e sdf são todas as unidades WD
  • sdg, sdh, sdi e sdj são todos discos da Seagate

Eu escolhi o layout 'n2' padrão ao criar o RAID. Meu palpite, com base nas informações dessas duas fontes, é que as unidades adjacentes são espelhadas (por exemplo, sdc == sdd, sde == sdf, etc), mas quero ter certeza:

Aqui está a saída do '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

E aqui está o conteúdo 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>

Então, minhas perguntas são:

  1. Como posso saber quais unidades são espelhos uma da outra?
  2. Existe uma maneira de mudar isso, ou devo apenas trocar os fios (já que isso trocará as letras da unidade) e depois reconstruir o RAID?

Desde já, obrigado.


Nota tangencial, para quem quer saber o meu raciocínio para fazer isso é: Unidades do mesmo modelo e lote, operadas sob cargas de uso semelhantes, tempo de atividade e temperatura, têm pouca variação sistemática, e as diferenças no tempo de falha entre as unidades serão principalmente direcionadas por variação aleatória no processo de fabricação. Isso aumenta o risco de várias unidades morrerem ao mesmo tempo. Ao comprar unidades não apenas de lotes diferentes, mas de fabricantes completamente diferentes, estou introduzindo variações sistemáticas em minha matriz, influenciando as unidades que falharão em momentos semelhantes.

Comunidade
fonte
11
Os servidores de mídia doméstica não são relacionados ao ServerFault. Dito isto, você coloca claramente algum esforço para isso e eu vou marcá-lo para a migração para unix.SE .
Andrew B
@ AndrewB, por que isso?
22413 poige
É uma pergunta muito interessante e o raciocínio por trás é tão bem compreendido. Você não precisa alterar os fios, pois apenas especificar o disco ao (re) criar o RAID é muito mais simples.
22613 poige
@poige Isso se enquadra em qualquer coisa em um ambiente doméstico . Tentei deixar claro que considerava a questão adequadamente pesquisada, apesar disso.
Andrew B
Se eu especulasse descontroladamente, acho que você poderia olhar para a RaidDevicecoluna. Pode ser tão simples quanto (0,1), (2,3), (4,5), (6,7). Isso me faria supor que você precisa fazer o RaidDevice se alinhar como WD / Sea / WD / Sea / etc ... Mas não tenho 100% de certeza sobre isso.
precisa

Respostas:

5

Versões recentes de mdadmmostram isso diretamente nos detalhes da matriz. Exemplo 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

Observe a denotação set-Aou set-B. No caso acima, sdde sdbpode falhar juntos sem perda de dados. É possível que esses dados não estejam disponíveis enquanto a matriz está sendo reconstruída.

parasietje
fonte
2

Eu tive o mesmo problema e, depois de pesquisar um pouco, não encontrei uma resposta confiável. Depois de pensar um pouco, imaginei que os espelhos tivessem os mesmos dados e pudéssemos comparar uma parte deles.

NOTA: TENHA CUIDADO, SE TIVER MAIS DE 2 UNIDADES COM O MESMO CHECKSUM, É COMPARÁVEL COMPARAR O ESPAÇO DE DISCO VAZIO, ESCOLHA OUTRO DESLOCAMENTO (opção de pular).

Com esses poucos comandos, você pode descobrir:

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

Isso produzirá algo como:

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

Agora sabemos que sda ​​/ sdb é um espelho e sdc / sdd outro. Um de cada deve permanecer para evitar a perda de dados.

O comando "dd" está lendo uma vez (contagem = 1) um Megabyte (bs = 1M) em um deslocamento de Megabyte desde o início do disco (ignorar = 1M). Não pule = 0, porque o início do disco contém informações diferentes. Os dados geralmente começam após 1 MB.

Pascal
fonte
dd if=/dev/$disk skip=1M bs=1M count=1não funcionou para mim. dd (coreutils) 8.23do Debian 8 (Jessie) não suporta skipuma unidade. Em vez disso, usei skip=1onde 1é relativo bs. Possivelmente um erro de digitação?
Daniel Böhmer
Para sua informação, se você estiver vendo a soma do MD5, d41d8cd98f00b204e9800998ecf8427esua ddchamada falhará. Esse é o hash da string vazia :-)
Daniel Böhmer
0

Eu acho que você está falando sobre um verdadeiro raid 10 array (1 + 0 espelhamento listrado)

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

1. Crie suas 4 matrizes 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}

No momento, você tem 4 matrizes RAID 1 com espaço de 2 TB em cada uma,

2. Vamos montá-los!

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

--run options é útil porque alguns componentes estão ativos em outra matriz

3. Adapte seu arquivo mdadm.conf

Você pode precisar (dependendo da sua configuração) adaptar este arquivo para refletir as alterações sobre nossa nova matriz (/ dev / md4).

4. Aproveite .. Sua nova matriz DIY raid10!

maxxvw
fonte
Não, ele está falando sobre a personalidade mdadm raid10 do linux. Eu acredito que sua resposta não se aplica (embora, para ser justo, ele dê ao OP uma alternativa para alcançar o que ele precisa fazer) #
GnP
O desempenho e os recursos suportados também diferem.
Joachim Wagner
0

Você sempre pode verificar quais são os espelhos por uma maneira grosseira de comparar os dados, por exemplo:

# 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 você não obtiver nenhuma correspondência, pode ser necessário aumentar skip = , pois não está pulando os superblocos RAID; e se você obtiver o mesmo md5sum por mais de 2 discos, poderá precisar aumentar count = , à medida que provavelmente está lendo e zerando m5summing - para impedir que você coloque primeiro alguns dados no ataque, caso contrário, eles podem estar cheios de zeros)

Quanto à troca de fios, você não precisa fazer isso - o mdadm deve criar um ataque com os dispositivos especificados na linha de comando no mdadm --create , portanto, você deve especificar unidades em ordem diferente na linha de comando.

Matija Nalis
fonte
0

Execute "mdadm --examine device" em cada dispositivo componente (por exemplo, / dev / sda1, / dev / sdb1, etc.). As informações devem ajudá-lo a determinar quais componentes são o espelho um do outro.

Wurtel
fonte