Como eu corrijo “mdadm: / dev / sdc1 não grande o suficiente para unir matriz” para três discos idênticos?

2

Depois de atualizar para o Ubuntu 12.04 LTS no meu servidor o grub começou a reclamar e a dar erros sobre o meu RAID Array, tudo ainda parece estar funcionando, mas é um pouco irritante ter grub dando erros.

Setting up grub-pc (1.99-21ubuntu3.7) ...
error: found two disks with the index 2 for RAID md0.
error: superfluous RAID member (3 found).

Estou recebendo muitos desses erros quando o grub é atualizado.

Os fatos são: Eu tenho três discos idênticos em uma configuração de raid5, em dois discos há uma partição primária que é adicionada à matriz, mas o terceiro disco é adicionado sem uma partição primária. ie. mdam --manage /dev/md_d0 --add /dev/sdc

Eu estou supondo que esta é a razão para reclamar.

Desde que descobri este problema, desativei o disco que está sem uma partição primária, criei uma partição primária, verifiquei que ele é o mesmo com cfdisk /dev/xxx e, em seguida, Print Partition table . E tentei adicionar a nova partição ao array RAID e é quando eu recebo a mensagem de que a partição é pequena para ser adicionada ao array RAID.

> sudo mdadm /dev/md_d0 --add /dev/sdc1

mdadm: /dev/sdc1 not large enough to join array

As tabelas de partições são todas iguais,

 Partition Table for /dev/sdc

               First       Last
 # Type       Sector      Sector   Offset    Length   Filesystem Type (ID) Flag
-- ------- ----------- ----------- ------ ----------- -------------------- ----
   Pri/Log           0        2047*     0#       2048*Free Space           None
 1 Primary        2048* 3907029167*     0  3907027120*Linux raid auto (FD) None

Partition Table for /dev/sdd

               First       Last
 # Type       Sector      Sector   Offset    Length   Filesystem Type (ID) Flag
-- ------- ----------- ----------- ------ ----------- -------------------- ----
   Pri/Log           0        2047*     0#       2048*Free Space           None
 1 Primary        2048* 3907029167*     0  3907027120*Linux raid auto (FD) None

Partition Table for /dev/sde

               First       Last
 # Type       Sector      Sector   Offset    Length   Filesystem Type (ID) Flag
-- ------- ----------- ----------- ------ ----------- -------------------- ----
   Pri/Log           0        2047*     0#       2048*Free Space           None
 1 Primary        2048* 3907029167*     0  3907027120*Linux raid auto (FD) None

Ou, na verdade, se imprimir a tabela de partição como dados brutos no cfdisk há algumas diferenças, mas não consigo decifrar o que isso significa.

-> diff sde.raw sdc.raw 
1c1
 Disk Drive: /dev/sde
---
 Disk Drive: /dev/sdc
30c30
 0x1B0: 00 00 00 00 00 00 00 00 B7 E9 70 74 00 00 00 20
---
 0x1B0: 00 00 00 00 00 00 00 00 4B 0C 58 1C 00 00 00 20

Percebi que poderia tentar copiar o mbr de um dos discos de trabalho usando o dd, mas ainda assim recebo o mesmo erro, mesmo que a tabela de partição seja idêntica na saída bruta do cfdisk.

$ sudo dd if=/dev/sdd of=/tmp/sdd-mbr.bin bs=512 count=1
$ sudo dd if=/tmp/sdd-mbr.bin of=/dev/sdc bs=512 count=1
$ cat /proc/partitions
major minor  #blocks  name
   8       48 1953514584 sdd
   8       49 1953513560 sdd1
   8       32 1953514584 sdc
   8       33 1953513560 sdc1
   8       64 1953514584 sde
   8       65 1953513560 sde1

Agora, a comparação bruta da tabela de partição fornece saída idêntica e as partições parecem ser do mesmo tamanho, mas ainda recebo o mesmo erro ao tentar adicionar /dev/sdc1 à matriz.

Acho que a minha pergunta é se existe alguma maneira de corrigir isso sem ter que desmontar toda a matriz e recriá-la do zero?

Saída de mdadm -D /dev/md_d0 a matriz ainda está sendo reconstruída desde que eu adicionei / dev / sdc novamente.

/dev/md_d0:
        Version : 0.90
  Creation Time : Sat Aug 14 21:06:13 2010
     Raid Level : raid5
     Array Size : 3907028992 (3726.03 GiB 4000.80 GB)
  Used Dev Size : 1953514496 (1863.02 GiB 2000.40 GB)
   Raid Devices : 3
  Total Devices : 3
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Fri Jan 11 18:36:06 2013
          State : clean, degraded, recovering 
 Active Devices : 2
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 64K

 Rebuild Status : 53% complete

           UUID : 74998045:22316376:01f9e43d:ac30fbff (local to host server)
         Events : 0.19988

    Number   Major   Minor   RaidDevice State
       3       8       32        0      spare rebuilding   /dev/sdc
       1       8       64        1      active sync   /dev/sde
       2       8       48        2      active sync   /dev/sdd

Eu percebo agora que parece que toda a matriz é composta de dispositivos reais, em vez de partiotions, então a questão é por que sdd1 & amp; sde1 partitios são deixados nos discos rígidos e gravados em / dev / sdc assim que eu os adiciono ao array.

    
por jeeloo 11.01.2013 / 15:37

2 respostas

0

Ok, o que está acontecendo é que você originalmente criou o array com todos os discos, sem nenhuma partição. Parece que você pode ter adicionado posteriormente uma tabela de partição, que corrompe a matriz. Você não pode adicionar a partição do disco agora porque ela é muito pequena, já que o mdadm espera todo o disco.

Os erros que você vê no grub são devidos ao fato de que, com o formato de metadados 0.9, ele não pode dizer se os metadados da invasão devem se aplicar ao disco inteiro ou à partição. Você deve reconstruir a matriz usando o formato de metadados mais recente e, de preferência, particionar os discos individuais primeiro, desta vez.

    
por psusi 11.01.2013 / 20:49
0

Você precisa desativar o HPA no seu disco.

verifique se o HPA está ativado

$ hdparm -N /dev/sdc

   /dev/sdc:

    max sectors   = 586070255/586072368, HPA is enabled

desabilite o HPA

$ hdparm -N p586072368 /dev/sdc

'p' é necessário para persistência após a reinicialização. Do que você precisa para reiniciar o seu computador um disco de adicionar ao RAID

    
por aleksandr 21.02.2017 / 13:23