Come ridimensionare l'array RAID1 con mdadm?


12

Ho in esecuzione Ubuntu 11.04 (kernel 2.6.38-11). Ho sostituito 2x160 GB con unità da 2x500 GB. Sono configurati come RAID1.

Le tabelle delle partizioni mostrano le giuste dimensioni. Ecco 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

Ma non vedo il nuovo spazio:

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

Ho provato 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!

Qualche idea?

Aggiunto per richiesta

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

partizioni

# 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

parted:

# 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

Commento via e-mail:

il problema è nei metadati, devi solo assemblare l'array raid con il parametro --update devicesize

e dopo che -G / dev / md? -z max farà il lavoro :)


Qual è l'output di cat /proc/mdstat? Che ne dici cat /proc/partitions?
Steven lunedì

Aggiunto l'output sopra.
Paul Schreiber,

Non hai menzionato come hai copiato i tuoi dati su nuovi dischi. Tuttavia, può influenzare pesantemente la risposta.
poige,

Ho ottenuto i dati copiati sui nuovi dischi partizionandoli con sfdisk, usando mdadm --add e lasciando che i dati si sincronizzassero.
Paul Schreiber,

@Paul Schreiber, sfdiskdici (?) ... Intendi dicendo che hai copiato anche lo schema di partizionamento del disco?
poige,

Risposte:


9

Basta usare

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

Quindi sarai in grado di usare

resize2fs /dev/md2

Per far corrispondere il file system alla dimensione del raid. Tutto ciò avviene online senza nemmeno smontare il md2.


1
Il comando completo:resize2fs -p /dev/md2
Milan Kerslager,

@MilanKerslager, cosa sta facendo -plì ?.
Jaime Hablutzel,

1
@JaimeHablutzel -p è la barra di completamento percentuale, quindi sai cosa sta succedendo, poiché potrebbe richiedere del tempo (la risposta originale è già stata corretta).
Milan Kerslager,

2

Uso regolarmente mdadm e lo considero una delle utility Linux più pericolose. Tuttavia, se si adottano le giuste precauzioni di sicurezza, è possibile evitare la maggior parte dei casi di potenziale perdita di dati Eseguire il backup di tutti i dati !!! sono stato morso due volte da mdadm in passato, ho perso oltre 700 GB di dati e pochissimo è stato recuperato, sei stato avvisato.

Vi sono ottime possibilità che sarà necessario creare nuovamente l'array RAID poiché mdadm non prevede né compensa le unità che aumentano improvvisamente di dimensioni. Utilizzerà le dimensioni indicate nel superblocco del raid e non l'unità stessa. Se le unità sono già sincronizzate, non dovresti avere molti problemi.

Ricorda se vuoi avviarlo usa superblock versione 0.9.

modificare

Ecco come lo farei, non testato !

Crea un RAID1 con un'immersione mancante solo così possiamo testare rapidamente che i dati rimangano pur avendo ancora un'altra unità con una copia dei dati, i tuoi vecchi metadati erano 0,90 quindi manterremo la stessa versione qui.

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

Montalo per testare che tutto funzioni

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

controlla i tuoi dati

   ls -l /mnt/test

Se tutto sembra a posto, smonta l'unità e ridimensiona.

unmount /mnt/md2
resize2fs /dev/md2

Una volta che tutto va bene, puoi aggiungere l'altra unità all'array.

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

e attendere la risincronizzazione delle unità

cat / proc / mdstat


Hai qualche suggerimento specifico? cioè passi da fare per me?
Paul Schreiber,

guarda la mia modifica sopra
Silverfire,

/ dev / md2 esiste già. Perché voglio ricrearlo? E: dovrei avviare un disco di ripristino per farlo accadere? C'è un modo per ridimensionare questo live?
Paul Schreiber,

In diretta, forse no, ma potresti essere in grado di farlo con un riavvio, se rimuovi l'unità di avvio principale dall'array puoi quindi creare un nuovo array su di esso (denominalo / dev / md3 o qualcosa del genere) con un'unità mancante, il sistema avvierà quindi il nuovo array di unità / raid e quindi sarà possibile aggiungere quello vecchio
Silverfire,

Quello che sarebbe probabilmente più semplice, però, è semplicemente ripristinare dal backup su un nuovo array.
Silverfire,

2

Osservando / proc / partitions , è evidente che Linux pensa che sda3 e sdb3 siano più piccoli di loro.

Somma le dimensioni delle partizioni

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

e otterrai un numero molto più basso della dimensione del disco.

8       16  488386584 sdb

152248005 blocchi di 1024 byte sono coerenti con le dimensioni mdadm --growe resize2fsriportano per md2 .

Inizialmente hai creato queste partizioni con dimensioni inferiori, per poi ricrearle per utilizzare il resto dei dischi? In tal caso, il riavvio dovrebbe consentire al kernel di rileggere la tabella delle partizioni. Successivamente, il dispositivo RAID in crescita e il ridimensionamento del filesystem dovrebbero funzionare.


Sì, è esattamente quello che ho fatto.
Paul Schreiber,

La macchina si è bloccata al riavvio. Via per indagare ...
Paul Schreiber,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.