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

8

Eu tenho um servidor de mídia doméstico em execução no openSUSE 12.2. Estou usando oito drives de 2 TB em uma configuração RAID-10. Eu comprei deliberadamente dois tipos diferentes de drives: quatro Seagate Barracuda Green e quatro Western Digital Red. Meu objetivo é configurar o RAID de forma que cada par espelhado dentro do array seja composto por drives diferentes (por exemplo, um disco da Seagate e um drive WD). O Particionador do YaST2 infelizmente 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 unidades da WD
  • sdg, sdh, sdi e sdj são todos discos da Seagate

Eu escolhi o layout padrão 'n2' ao criar o RAID. Meu palpite baseado em informações dessas duas fontes é que unidades adjacentes são espelhadas (ou seja, sdc == sdd, sde == sdf, etc), mas eu quero saber com certeza:

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

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 eu sei quais drives são espelhos um do outro?
  2. Existe uma maneira de mudar isso, ou devo apenas trocar os fios ao redor (desde que irá trocar as letras da unidade) e, em seguida, reconstruir o RAID?

Obrigado antecipadamente.

Nota tangencial, para qualquer um que queira saber meu raciocínio para fazer isso é: Unidades do mesmo modelo e lote, operadas sob cargas de uso, tempo de operação e temperatura semelhantes, têm pouca variação sistemática, e as diferenças no tempo de falha entre os inversores serão impulsionadas principalmente pela variação aleatória no processo de fabricação. Isso aumenta o risco de várias unidades morrerem de uma só vez. Ao comprar unidades não apenas de lotes diferentes, mas de fabricantes completamente diferentes, estou introduzindo uma variação sistemática em minha matriz, influenciando, assim, quais unidades falharão em momentos semelhantes.

    
por Community 16.03.2013 / 19:02

5 respostas

5

Versões recentes de mdadm mostram isso nos detalhes da matriz. Exemplo de mdadm 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-A ou set-B . No caso acima, sdd e sdb podem falhar juntos sem perda de dados. É possível que esses dados não estejam disponíveis enquanto a matriz estiver sendo reconstruída.

    
por 26.08.2016 / 10:37
1

Eu tive o mesmo problema e depois de pesquisar um pouco, não encontrei uma resposta confiável. Depois de pensar um pouco, achei que os espelhos tinham os mesmos dados e poderíamos comparar alguma parte dele.

NOTA: CUIDADO, SE VOCÊ TIVER MAIS DE 2 MOVIMENTOS COM O MESMO CHECKSUM QUE ESTÁ PROVAVELMENTE COMPARANDO O DISKSPACE 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 um deve ficar para evitar a perda de dados.

O comando "dd" está lendo uma vez (count = 1) um Megabyte (bs = 1M) em um megabyte de deslocamento desde o início do disco (skip = 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.

    
por 25.04.2015 / 00:51
0

Eu acho que você está falando sobre um array RAID 10 real (1 + 0 striped mirroring)

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 seus 4 arrays 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}

Neste momento, você tem 4 arrays de raid 1 com espaço de 2TB em cada,

2. Vamos montá-los!

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

- run opções é útil porque alguns componentes estão ativos em outra matriz

3. Adapte seu arquivo mdadm.conf

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

4. Aproveite .. Seu novo arranjo RAID10 DIY!

    
por 16.04.2013 / 21:52
0

Você sempre pode verificar quais são espelhos comparando 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, talvez seja necessário aumentar skip = , já que não está pulando o superblocksl RAID; e se você obtiver o mesmo md5sum por mais de 2 discos, você pode precisar aumentar count = , como provavelmente você está lendo e zeros m5summing - para evitar que você coloque alguns dados no ataque primeiro, caso contrário eles podem estar cheios de zeros)

Quanto aos fios de troca, você não precisa fazer isso - o mdadm deve criar raid com dispositivos conforme especificado na linha de comando em mdadm --create , então você apenas especificaria drives em ordem diferente na linha de comando.

    
por 04.09.2014 / 16:22
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 espelhar os outros.

    
por 05.09.2014 / 14:48