mdadm se recusa a adicionar segundo disco idêntico ao array

2

Eu tenho uma matriz RAID 1 que está em um estado degradado e deseja adicionar outra unidade a ela.

# mdadm --detail /dev/md1 
/dev/md1:
        Version : 1.2
  Creation Time : Fri Mar 21 17:23:00 2014
     Raid Level : raid1
     Array Size : 488254464 (465.64 GiB 499.97 GB)
  Used Dev Size : 488254464 (465.64 GiB 499.97 GB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Tue Jun  9 00:10:04 2015
          State : clean, degraded 
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           Name : mars:1  (local to host mars)
           UUID : 3458a3fd:a510d0a7:605d8cd5:9880c31e
         Events : 25816

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       2       0        0        2      removed

Estou tentando usar uma unidade idêntica à primeira, identicamente formatada para conter todo o tamanho. No entanto, mdadm se recusa a adicioná-lo

# mdadm /dev/md1 --add /dev/sdc1 
mdadm: /dev/sdc1 not large enough to join array

A saída dividida indica que as duas unidades têm diferentes tamanhos de setor, mas não tenho certeza do que é isso e se pode ser corrigido. Se não puder, quais são minhas opções?

# parted /dev/sdb unit s print
Model: ATA SAMSUNG HD502HJ (scsi)
Disk /dev/sdb: 976773168s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End         Size        Type     File system  Flags
 1      2048s  976773119s  976771072s  primary  ext4         raid, type=fd

# parted /dev/sdc unit s print
Model: ATA SAMSUNG HD502HJ (scsi)
Disk /dev/sdc: 976771055s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End         Size        Type     File system  Flags
 1      2048s  976769023s  976766976s  primary               raid, type=fd
    
por Robert Munteanu 08.06.2015 / 23:16

3 respostas

1

Seu novo disco é um pouco mais de 1 MB menor que o existente. Este pode ser um modelo diferente (apesar de ter a mesma identificação, pode ter sido fabricado em uma fábrica diferente, para especificações ligeiramente diferentes), ou pode ter alguns setores mais defeituosos notados durante os testes de fábrica.

Em sdb , você tem uma partição sdb1 que se estende por todo o disco, menos 1 setor para o MBR mais setores não utilizados para alinhar a partição a 1MB (o que é recomendado para desempenho). O array abrange toda a partição; seu tamanho é o tamanho da partição menos 128 MB, que é a área de remodelação .

O tamanho dos setores sdc , 976771055, é 17 setores menor que o tamanho dos setores 976771072 da matriz. Portanto, você não pode ajustar a matriz no novo disco.

Você pode criar uma matriz com os mesmos dados e uma área de remodelação menor. Já que quase cabe, apenas 2MB de corte dos 128MB seria suficiente. Eu não acho que é possível redimensionar a área de remodelação em uma matriz existente, então você teria que fazer o backup, criar uma nova e restaurar os dados.

O que eu faria é encolher uma das partições no array em 2MB.

De qualquer forma, a solução mais fácil parece-me criar uma nova matriz RAID-1 com sdc1 como o único volume ativo. Se você quiser manter o tamanho das partições na matriz, passe --data-offset=126M para criar uma área de remodelação que tornará tudo adequado. Melhor, crie um array que cubra toda a partição menos alguns MB como uma margem de segurança, caso esse problema ocorra novamente. Em seguida, copie todos os dados da matriz antiga para a nova. Se você estiver criando uma área menor, faça uma cópia de arquivo em vez de uma cópia de partição para a partição que deseja encolher ou (se tiver várias partições) faça essa partição primeiro e depois reduza-a. Por fim, limpe a matriz em sdb1 e adicione sdb1 à nova matriz.

Como alternativa, reduza o conteúdo da matriz existente para que os últimos 2 MB (pelo menos) não sejam atribuídos a nenhuma partição e, em seguida, use mdadm /dev/md1 --grow --size=… para reduzir a matriz existente.

    
por 09.06.2015 / 03:16
4

9767 6 6976 de /dev/sdb é menor que 9767 7 1072 de /dev/sdc .

Não é uma unidade idêntica.

    
por 08.06.2015 / 23:21
-1

Basta criar uma partição em sdc idêntica a sdb Eu conheço este truque (primeiro faça um backup e evite o intervalo de partição fora do disco, por exemplo, 2 discos 220G sdb 210G sdc, faça duas partições abaixo de 210G, talvez duas partições idênticas de 199G neste caso)

sfdisk -d /dev/sdb > part_table
sfdisk /dev/sdc < part_table

E tente novamente adicionar sdc1

    
por 09.06.2015 / 01:26