mdadm é montado com unidades em vez de partições

2

Eu tenho um array RAID 5 criado a partir de partições em 5 drives - / dev/sda1 , /dev/sdb1 , /dev/sdc1 , /dev/sdd1 e /dev/sde1 . Quando eu monto o array manualmente, funciona bem.

Infelizmente, parece que também existem superblocos em /dev/sdb e /dev/sdc (provavelmente algo que eu estraguei cedo) e, quando o array é montado automaticamente na inicialização, ele é compilado com /dev/sdb em vez de /dev/sdb1 ( o mesmo com /dev/sdc ) e falha ao montar (com um erro fs inválido).

$ sudo mdadm --assemble --scan --force (presumably what happens on startup)
mdadm: WARNING /dev/sdb1 and /dev/sdb appear to have very similar superblocks.
      If they are really different, please --zero the superblock on one
      If they are the same or overlap, please remove one from the
      DEVICE list in mdadm.conf.

$ sudo mdadm --detail /dev/md7
/dev/md7:
        Version : 00.90
  Creation Time : Wed Apr  6 18:17:07 2011
     Raid Level : raid5
     Array Size : 7814047744 (7452.06 GiB 8001.58 GB)
  Used Dev Size : 1953511936 (1863.01 GiB 2000.40 GB)
   Raid Devices : 5
  Total Devices : 5
Preferred Minor : 7
    Persistence : Superblock is persistent

    Update Time : Sat Apr 30 13:55:50 2011
          State : clean
 Active Devices : 5
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : 224009a1:e4173bf3:2490f10a:1455ce9c (local to host ravenscar)
         Events : 0.2

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       16        1      active sync   /dev/sdb
       2       8       32        2      active sync   /dev/sdc
       3       8       48        3      active sync   /dev/sdd1
       4       8       65        4      active sync   /dev/sde1

$ sudo mdadm --examine /dev/sdb
/dev/sdb:
          Magic : a92b4efc
        Version : 00.90.00
           UUID : 224009a1:e4173bf3:2490f10a:1455ce9c (local to host ravenscar)
  Creation Time : Wed Apr  6 18:17:07 2011
     Raid Level : raid5
  Used Dev Size : 1953511936 (1863.01 GiB 2000.40 GB)
     Array Size : 7814047744 (7452.06 GiB 8001.58 GB)
   Raid Devices : 5
  Total Devices : 5
Preferred Minor : 7

    Update Time : Wed Apr 27 21:15:03 2011
          State : clean
 Active Devices : 5
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 0
       Checksum : f83035d3 - correct
         Events : 2

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     1       8       17        1      active sync   /dev/sdb1

   0     0       8        1        0      active sync   /dev/sda1
   1     1       8       17        1      active sync   /dev/sdb
   2     2       8       33        2      active sync   /dev/sdc
   3     3       8       49        3      active sync   /dev/sdd1
   4     4       8       65        4      active sync   /dev/sde1

Então eu faço:

$ sudo mdadm --stop /dev/md7
$ sudo mdadm --assemble /dev/md7 /dev/sd[abcde]1

E então funciona.

Minha pergunta: É seguro usar a opção --zero-superblock para remover esses superblocos incorretos? que outras medidas devo tomar? Eu fiz a escolha certa construindo a matriz com partições em vez de unidades ( /dev/sda1 em vez de /dev/sda e assim por diante).

    
por colinmarc 30.04.2011 / 19:11

4 respostas

2

Não zere o super bloco. Edite como mdadm sugeriu /etc/mdadm.conf ou /etc/mdadm/mdadm.conf e altere DEVICE .... para:

DEVICE /dev/sda1
DEVICE /dev/sdb1
DEVICE /dev/sdc1
DEVICE /dev/sdd1
DEVICE /dev/sde1
    
por 07.06.2011 / 05:45
1

O que parece acontecer é que o MD vê o mesmo superbloco de dois dispositivos (o sdb1 é um subconjunto do sdb). Matar o superbloco mataria o superbloco real, então não faça isso.

Superblocos MD v0.90 são armazenados no final do dispositivo em um bloco alinhado com 64k. No seu caso, sdb1 é a única partição e o superbloco pode ser encontrado no final de sdb e sdb1. De alguma forma (isso parece ser um problema antigo, veja o link no final). O MD ficou confuso e começou a pensar que você tem duas cópias do superbloco em dois dispositivos separados.

A correção é fácil se você tiver algum espaço extra nessa partição - você pode simplesmente limpar o superbblock e reparticionar o disco finalizando a partição 64k antes do final do disco; O MD não verá um suberblock no sdb e montará o array adequadamente usando o sdb1. Se você não pode tirar 64k do sdb, você terá que reconstruir o array. Se este não for o seu disco de inicialização, você também pode usar uma nova versão de superbloco. v.1.1 e v.1.2 armazenam o superbloco em algum lugar no início da matriz, o que resolverá esse problema específico.

Acabei de experimentar exatamente o mesmo problema em um ataque1. Usando "fdisk -u" (use setores como unidades) a partição estava terminando no setor 143374743. Subtraí 128 desse número (128 setores de 512 bytes = 64k) e usei o número resultante como o final da partição. Eu poderia então verificar que o MD não veria o superbloco em sda com:

# mdadm --misc -E /dev/sda

Parece que a mudança comportamental recente de usar setores e eliminar a compatibilidade do DOS em ferramentas de particionamento levou a que a última partição sempre terminasse no final do disco (em vez de em um limite de cilindro). Alguns outros parâmetros podem entrar em jogo como - por exemplo - eu tenho um sistema em execução que mostra os superblocos duplicados quando os discos são consultados diretamente, e ainda monta sua matriz corretamente.

Para mais informações sobre os formatos de superblocos MD, consulte:

link

A FAQ do Debian (ponto 11.) menciona este problema:

link

    
por 07.06.2011 / 04:35
0

Se você não tiver nenhum dado no array, basta limpá-lo e começar de novo. Se você tiver dados, eu faria o backup antes de brincar com os superblocos.

Pessoalmente, eu obteria os dados dele e dd de alguns setores de /dev/zero no início de cada disco, depois reparticionaria e recriaria a matriz. Eu me sentiria mais confortável sabendo que tudo estava configurado corretamente para começar.

Como um aparte: Essa é uma matriz bem grande para se fazer o RAID-5, na minha opinião. Fique de olho no tempo de reconstrução. No caso de uma falha de disco único, você terá uma perda de dados catastrófica se tiver outro erro durante a leitura durante a reconstrução. Você pode querer considerar o RAID-6.

    
por 30.04.2011 / 20:02
0

Por azar, eu apaguei o RAID-Superblock quando li a seguinte massagem:

mdadm: WARNING /dev/sdb1 and /dev/sdb appear to have very similar superblocks.
      If they are really different, please --zero the superblock on one
      If they are the same or overlap, please remove one from the
      DEVICE list in mdadm.conf.

Depois, meu RAID1 não pôde mais iniciar.

Felizmente, criar um novo RAID1 com parâmetros idênticos ao original, não excluiu o anterior: link via link

Como, em parte, o polegar / enganoso / inútil acima mensagem mdadm é, como é inteligente mdadm com recreação.

    
por 04.09.2013 / 11:43