¿Cómo cambiar el tamaño de la matriz RAID1 con mdadm?

12

Ejecuté Ubuntu 11.04 (kernel 2.6.38-11). Reemplacé 2x160GB con unidades de 2x500GB. Están configurados como RAID1.

Las tablas de partición muestran los tamaños correctos. Aquí está el 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

Y 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

Pero no estoy viendo el nuevo espacio:

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

Intenté mdadm y 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!

¿Algunas ideas?

Agregado por solicitud

# 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>

particiones

# 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

separado:

# 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

Comentario por correo electrónico:

el problema está en los metadatos, solo necesita ensamblar una matriz de incursiones con el parámetro --update devicesize

y después de eso -G / dev / md? -z max hará el trabajo :)

Paul Schreiber
fuente
¿Cuál es la salida de cat /proc/mdstat? ¿Qué tal cat /proc/partitions?
Steven lunes
Salida agregada arriba.
Paul Schreiber
No ha mencionado cómo copió sus datos en discos nuevos. Sin embargo, puede influir mucho en la respuesta.
Poige
Copié los datos en los nuevos discos particionándolos con sfdisk, usando mdadm --add y dejando que se sincronizaran los datos.
Paul Schreiber
@Paul Schreiber, sfdiskusted dice (?) ... ¿Quiere decir que también copió el esquema de partición de disco?
Poige

Respuestas:

9

Solo usa

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

Entonces podrás usar

resize2fs /dev/md2

Para permitir que el sistema de archivos coincida con el tamaño de la incursión. Todo eso se hace en línea sin siquiera desmontar el md2.

Zaar Hai
fuente
1
El comando completo:resize2fs -p /dev/md2
Milan Kerslager
@MilanKerslager, ¿qué está haciendo -pallí?
Jaime Hablutzel
1
@JaimeHablutzel -p es una barra de porcentaje de finalización para que sepa lo que está sucediendo, ya que puede llevar algo de tiempo (la respuesta original ya se ha solucionado).
Milan Kerslager
2

Regularmente uso mdadm y lo considero una de las utilidades de Linux más peligrosas. Sin embargo, si emplea las precauciones de seguridad correctas, puede evitar la mayoría de los casos de pérdida potencial de datos. ¡Haga una copia de seguridad de todos sus datos ! En el pasado, mdadm me mordió dos veces, perdí más de 700 GB de datos y muy poco de ellos pudieron recuperarse, me han advertido.

Hay muchas posibilidades de que necesite volver a crear la matriz RAID, ya que mdadm no espera ni compensa las unidades que aumentan repentinamente de tamaño. Utilizará el tamaño indicado en el superbloque de incursión y no la unidad en sí. Siempre que las unidades ya estén sincronizadas, no debería tener muchos problemas.

Recuerde que si desea iniciarlo, use la versión 0.9 de superblock.

Editar

¡Así es como lo haría, sin probar !

Cree un RAID1 con una inmersión faltante solo para que podamos probar rápidamente que los datos permanecen mientras todavía tenga otra unidad con una copia de los datos, sus metadatos anteriores eran 0.90, por lo que mantendremos la misma versión aquí.

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

Montarlo para probar que todo funciona

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

verifica tus datos

   ls -l /mnt/test

Si todo parece correcto, desmonte la unidad y cambie el tamaño.

unmount /mnt/md2
resize2fs /dev/md2

Una vez que todo esté bien, puede agregar la otra unidad a la matriz.

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

y espere a que las unidades se vuelvan a sincronizar

cat / proc / mdstat

Silverfire
fuente
¿Tienes alguna sugerencia específica? es decir, pasos para que tome?
Paul Schreiber
mira mi edición anterior
Silverfire
/ dev / md2 ya existe. ¿Por qué quiero volver a crearlo? Y: ¿tendría que arrancar un disco de rescate para que esto suceda? ¿Hay alguna forma de cambiar el tamaño de esta en vivo?
Paul Schreiber
En vivo, tal vez no, pero es posible que pueda hacerlo con un reinicio, si elimina la unidad de arranque principal de la matriz, puede crear una nueva matriz en ella (nombrarla / dev / md3 o algo así) con una unidad faltante, el sistema iniciará el nuevo disco / matriz de incursión y luego podrá agregar el anterior
Silverfire
Sin embargo, lo que probablemente sería más fácil es simplemente restaurar desde una copia de seguridad en una nueva matriz.
Silverfire
2

Al mirar / proc / particiones , es evidente que Linux piensa que sda3 y sdb3 son más pequeños de lo que son.

Suma los tamaños de las particiones

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

y obtendrá un número mucho más bajo que el tamaño del disco.

8       16  488386584 sdb

152248005 bloques de 1024 bytes son consistentes con el tamaño mdadm --growy resize2fsreportan md2 .

¿Inicialmente creaste estas particiones con un tamaño más pequeño y luego las recreaste para utilizar el resto de los discos? Si es así, reiniciar debería permitir que el núcleo vuelva a leer la tabla de particiones. Después de eso, debería crecer el dispositivo RAID y cambiar el tamaño del sistema de archivos.

Sciurus
fuente
Sí, eso es exactamente lo que hice.
Paul Schreiber
La máquina se colgó al reiniciar. Fuera para investigar ...
Paul Schreiber