Como redimensionar a matriz RAID1 com o mdadm?

12

Estou executando o Ubuntu 11.04 (kernel 2.6.38-11). Troquei 2x160GB por unidades de 2x500GB. Eles estão configurados como RAID1.

As tabelas de partição mostram os tamanhos corretos. Aqui está o sfdisk:

# sfdisk -d /dev/sdb
# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=       63, size=   192717, Id=fd, bootable
/dev/sdb2 : start=   192780, size=  7807590, Id=fd
/dev/sdb3 : start=  8000370, size=968767695, Id=fd
/dev/sdb4 : start=        0, size=        0, Id= 0

E fdisk:

# fdisk -l /dev/sdb

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006c78f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          12       96358+  fd  Linux raid autodetect
/dev/sdb2              13         498     3903795   fd  Linux raid autodetect
/dev/sdb3             499       60801   484383847+  fd  Linux raid autodetect

Mas não estou vendo o novo espaço:

root@green:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/md2              143G  134G  8.3G  95% /


root@green:~# mdadm --examine /dev/sdb3
/dev/sdb3:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : b8f83980:f60d820c:74c46fbf:0baa68bc
  Creation Time : Sun Mar 29 18:48:46 2009
     Raid Level : raid1
  Used Dev Size : 152247936 (145.19 GiB 155.90 GB)
     Array Size : 152247936 (145.19 GiB 155.90 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 2

    Update Time : Mon Oct 10 19:22:36 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : 7b5debb7 - correct
         Events : 10729526


      Number   Major   Minor   RaidDevice State
this     0       8       19        0      active sync   /dev/sdb3
   0     0       8       19        0      active sync   /dev/sdb3
   1     1       8        3        1      active sync   /dev/sda3

Eu tentei mdadm e resize2fs:

# mdadm --grow /dev/md2 --size=max
mdadm: component size of /dev/md2 has been set to 152247936K

# resize2fs /dev/md2 
resize2fs 1.41.14 (22-Dec-2010)
The filesystem is already 38061984 blocks long.  Nothing to do!

Alguma ideia?

Adicionado por solicitação

# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md2 : active raid1 sdb3[0] sda3[1]
      152247936 blocks [2/2] [UU]

md0 : active raid1 sdb1[0] sda1[1]
      96256 blocks [2/2] [UU]

md1 : active raid1 sdb2[0] sda2[1]
      3903680 blocks [2/2] [UU]

unused devices: <none>

partições

# cat /proc/partitions 
major minor  #blocks  name

   8        0  488386584 sda
   8        1      96358 sda1
   8        2    3903795 sda2
   8        3  152248005 sda3
   8       16  488386584 sdb
   8       17      96358 sdb1
   8       18    3903795 sdb2
   8       19  152248005 sdb3
   9        1    3903680 md1
   9        0      96256 md0
   9        2  152247936 md2

se separaram:

# parted
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print all                                                        
Model: ATA WDC WD5000AAKX-0 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      32.3kB  98.7MB  98.7MB  primary  ext3            boot, raid
 2      98.7MB  4096MB  3997MB  primary  linux-swap(v1)  raid
 3      4096MB  500GB   496GB   primary  ext3            raid


Model: ATA WDC WD5000AAKS-4 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      32.3kB  98.7MB  98.7MB  primary  ext3            boot, raid
 2      98.7MB  4096MB  3997MB  primary  linux-swap(v1)  raid
 3      4096MB  500GB   496GB   primary  ext3            raid


Model: Linux Software RAID Array (md)
Disk /dev/md1: 3997MB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system     Flags
 1      0.00B  3997MB  3997MB  linux-swap(v1)


Model: Linux Software RAID Array (md)
Disk /dev/md0: 98.6MB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  98.6MB  98.6MB  ext3


Model: Linux Software RAID Array (md)
Disk /dev/md2: 156GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End    Size   File system  Flags
 1      0.00B  156GB  156GB  ext3

Comentar por e-mail:

o problema está nos metadados, você só precisa montar o array raid com o parâmetro --update devicesize

e depois disso -G / dev / md? -z max fará o trabalho :)

Paul Schreiber
fonte
Qual é a saída de cat /proc/mdstat? Que tal cat /proc/partitions?
Steven segunda-feira
Adicionado saída acima.
Paul Schreiber
Você não mencionou como copiou seus dados em novos discos. No entanto, pode influenciar fortemente a resposta.
poige
Eu copiei os dados nos novos discos particionando-os com o sfdisk, usando mdadm --add e deixando a sincronização dos dados.
Paul Schreiber
@ Paul Schreiber, sfdiskvocê diz (?) ... Você quer dizer dizendo que também copiou o esquema de particionamento de disco?
poige

Respostas:

9

Apenas use

mdadm --grow --size max /dev/md2

Então você poderá usar

resize2fs /dev/md2

Para permitir que o sistema de arquivos corresponda ao tamanho da invasão. Tudo isso é feito online, sem sequer desmontar o MD2.

Zaar Hai
fonte
1
O comando completo:resize2fs -p /dev/md2
Milan Kerslager 25/03/19
@MilanKerslager, o que está fazendo -plá?
Jaime Hablutzel
1
@JaimeHablutzel -p é a barra de conclusão percentual, para que você saiba o que está acontecendo, pois pode levar algum tempo (a resposta original já foi corrigida).
Milan Kerslager 16/05/19
2

Uso regularmente o mdadm e o considero um dos utilitários Linux mais perigosos. No entanto, se você tomar as devidas precauções de segurança, poderá evitar a maioria dos casos de perda potencial de dados. Faça backup de todos os seus dados !!! Eu fui mordido duas vezes por mdadm no passado, perdi mais de 700 GB de dados e muito pouco deles foi capaz de ser recuperado, você foi avisado.

Há uma chance muito boa de que você precisará criar a matriz RAID novamente, pois o mdadm não espera nem compensa as unidades que aumentam repentinamente de tamanho. Ele usará o tamanho indicado no superbloqueio do ataque e não a própria unidade. Desde que as unidades já estejam sincronizadas, você não deverá ter muitos problemas.

Lembre-se se você deseja inicializá-lo, use o superblock versão 0.9.

Editar

É assim que eu faria, não testado !

Crie um RAID1 com um mergulho ausente, para que possamos testar rapidamente que os dados permanecem enquanto ainda temos outra unidade com uma cópia dos dados. Seus metadados antigos eram 0,90, portanto, manteremos a mesma versão aqui.

mdadm --create /dev/md2 --level=mirror --metadata=0.90 --raid-devices=2 missing /dev/sdb3

Monte-o para testar se tudo funciona

mkdir /mnt/test
mount /dev/md2 /mnt/test

verifique seus dados

   ls -l /mnt/test

Se tudo estiver correto, desmonte a unidade e redimensione.

unmount /mnt/md2
resize2fs /dev/md2

Quando estiver tudo bem, você pode adicionar a outra unidade à matriz.

mdadm --add /dev/md2 /dev/sdb3

e aguarde as unidades ressincronizarem

cat / proc / mdstat

Silverfire
fonte
Você tem alguma sugestão específica? ou seja, medidas para eu tomar?
Paul Schreiber
veja minha edição acima
Silverfire 11/11
/ dev / md2 já existe. Por que eu quero recriá-lo? E: eu teria que inicializar um disco de resgate para fazer isso acontecer? Existe alguma maneira de redimensionar esse show?
Paul Schreiber
Ao vivo, talvez não, mas você poderá fazê-lo com uma reinicialização. Se você remover a unidade de inicialização primária da matriz, poderá criar uma nova matriz (nomeie-a / dev / md3 ou algo semelhante) com uma unidade ausente, o sistema inicializará o novo conjunto de unidades / raides e você poderá adicionar o antigo
Silverfire 11/11
O que provavelmente seria mais fácil, porém, é apenas restaurar do backup em uma nova matriz.
Silverfire
2

De olhar para / proc / partições , é evidente que o Linux pensa sda3 e sdb3 são menores do que eles são.

Soma os tamanhos das partições

8       17      96358 sdb1
8       18    3903795 sdb2
8       19  152248005 sdb3

e você obterá um número muito menor que o tamanho do disco.

8       16  488386584 sdb

152248005 blocos de 1024 bytes são consistentes com o tamanho mdadm --growe resize2fsestão relatando para md2 .

Você criou inicialmente essas partições com um tamanho menor e depois as recriou para utilizar o restante dos discos? Nesse caso, a reinicialização deve permitir que o kernel leia novamente a tabela de partições. Depois disso, o crescimento do dispositivo RAID e o redimensionamento do sistema de arquivos devem funcionar.

sciurus
fonte
Sim, foi exatamente o que eu fiz.
Paul Schreiber
Máquina travada na reinicialização. Fora para investigar ...
Paul Schreiber