De onde vêm as definições de matriz md?

4

Eu criei uma matriz md em um computador ARM com dois discos USB / SATA no RAID 1. Então, movi os dois discos para o desktop do Ubuntu e instalei mdadm . A instalação detectou o RAID e adicionou a definição a /etc/mdadm/mdadm.conf . Então, de onde veio isso?

Mais tarde, criei o RAID novamente a partir do meu desktop e agora (mesmo após a reinicialização) mdadm --examine --scan mostrar os dois arrays:

ARRAY /dev/md/0  metadata=1.2 UUID=19846240:ff2a5429:8b22a9bd:a3760e2e name=microserver.delrio.red:0
ARRAY /dev/md/0  metadata=1.2 UUID=49a26458:5449d0ff:4606e203:ddad2fe8 name=ubuntu:0

Quando você cria uma matriz RAID com mdadm no GNU / Linux, onde a definição da matriz é armazenada?

Como posso remover somente o primeiro?

    
por Oriol del Rio 31.05.2015 / 02:17

2 respostas

3

É muito diferente em sistemas diferentes. A invasão do software linux usa um superbock de raid, que está nos últimos 64kB de cada um dos dispositivos membros.

Mais exatamente, se o tamanho do dispositivo for n byte, o superbloco de invasão estará em n&~65535-65536 .

O superbloco raid está no final, porque em níveis de raids espelhados torna mais fácil usar um dispositivo membro independentemente do array (porque você pode simplesmente montá-lo, é claro que você precisa fazer um array recuperar depois disso) .

O formato exato do superbloco de ataque está descrito em este wiki .

Seus dados reais de byte você pode ver / editar por qualquer editor hexa, por exemplo, dhex .

Praticamente, descreve todo o layout do ataque (nível de ataque, soma de verificação) e aquele que é o dispositivo do membro em todo o array.

Durante a inicialização do raid, o kernel lê os superblocos e examina sua consistência. Membros insonsistentes não são inseridos no array.

mdadm --examine --scan mostra exatamente essa informação de superbloco de ataque, sem a intervenção do driver de ataque do kernel.

No seu caso, há uma clara inconsistência no seu array. A partir daqui, não pode ser facilmente encontrado, qual é a sua causa. Mas você tem um raid1, que é um espelho, então não há perigo real de perda de dados. O mais fácil que você pode fazer:

  1. Você destrói o superbloco de ataque em um dos membros da raid com um comando mdadm --zero-superblock
  2. Em seguida, insira novamente este dispositivo no array com um mdadm --add .

Ele iniciará uma nova ressincronização.

P.s. # 1:

Eu acho que o superbloco raid já foi reescrito pelo seu Ubuntu, mas não tem certeza. Ao zerar o superbloco e, em seguida, reinserir o dispositivo, ele será corrigido.

P.s. # 2:

O formato raid superblock é independente de plataforma, deve ser o mesmo até o último byte entre diferentes arquiteturas, mesmo no caso de uma incompatibilidade de endianness. Seu problema quase certamente não é a incompatibilidade de arquitetura, mas uma substituição incorreta do superbloco de ataque em um de seus dispositivos.

    
por 31.05.2015 / 04:26
3

Os metadados são armazenados no superbloco .

Para deletar, acho que você quer olhar o mdadm --zero-superblock. Certifique-se de ter um backup dos metadados antes de começar a mexer.

    
por 31.05.2015 / 04:26