Wie ändert man die Größe eines RAID1-Arrays mit mdadm?

12

Ich habe Ubuntu 11.04 (Kernel 2.6.38-11) ausgeführt. Ich habe 2x160GB durch 2x500GB Laufwerke ersetzt. Sie sind als RAID1 konfiguriert.

Die Partitionstabellen zeigen die richtigen Größen. Hier ist 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

Und 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

Aber ich sehe den neuen Raum nicht:

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

Ich habe versucht, mdadm und 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!

Irgendwelche Ideen?

Auf Anfrage hinzugefügt

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

Partitionen

# 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

getrennt:

# 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

Kommentar per E-Mail:

Das Problem liegt in den Metadaten. Sie müssen nur das RAID-Array mit dem Parameter --update devicesize zusammenstellen

und danach -G / dev / md? -z max wird erledigt :)

Paul Schreiber
quelle
Was ist die Ausgabe von cat /proc/mdstat? Wie wäre es cat /proc/partitions?
Steven Montag
Ausgabe oben hinzugefügt.
Paul Schreiber
Sie haben nicht erwähnt, wie Sie Ihre Daten auf neue Datenträger kopiert haben. Dies kann jedoch die Antwort stark beeinflussen.
Poige
Ich habe die Daten auf die neuen Festplatten kopiert, indem ich sie mit sfdisk partitioniert, mdadm --add verwendet und die Daten synchronisieren ließ.
Paul Schreiber
@Paul Schreiber, sfdiskSie sagen (?) ... Wollen Sie damit sagen, dass Sie auch das Partitionierungsschema der Festplatte kopiert haben?
Poige

Antworten:

9

Benutz einfach

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

Dann können Sie verwenden

resize2fs /dev/md2

Damit das Dateisystem der RAID-Größe entspricht. All dies geschieht online, ohne den md2 aushängen zu müssen.

Zaar Hai
quelle
1
Der komplette Befehl:resize2fs -p /dev/md2
Milan Kerslager
@MilanKerslager, was macht das -pda ?.
Jaime Hablutzel
1
@JaimeHablutzel -p ist die prozentuale Fertigstellungsleiste, damit Sie wissen, was los ist, da dies einige Zeit in Anspruch nehmen kann (die ursprüngliche Antwort wurde bereits korrigiert).
Milan Kerslager
2

Ich benutze mdadm regelmäßig und halte es für eines der gefährlichsten Linux-Dienstprogramme. Wenn Sie jedoch die richtigen Sicherheitsvorkehrungen treffen, können Sie die meisten Fälle von potenziellem Datenverlust vermeiden. Sichern Sie alle Ihre Daten !!! Ich bin in der Vergangenheit zweimal von mdadm gebissen worden, habe über 700 GB an Daten verloren und sehr, sehr wenig davon konnte wiederhergestellt werden. Sie wurden gewarnt.

Es besteht eine sehr gute Chance, dass Sie das RAID-Array erneut erstellen müssen, da mdadm keine Laufwerke erwartet oder kompensiert, die plötzlich an Größe zunehmen. Es wird die im RAID-Superblock angegebene Größe und nicht das Laufwerk selbst verwendet. Sofern die Laufwerke bereits synchronisiert sind, sollten Sie nicht viele Probleme haben.

Denken Sie daran, wenn Sie davon booten möchten, verwenden Sie Superblock Version 0.9.

Bearbeiten

So würde ich es machen, ungetestet !

Erstellen Sie ein RAID1 mit einem fehlenden Tauchgang, damit wir schnell testen können, ob die Daten erhalten bleiben, während noch ein anderes Laufwerk mit einer Kopie der Daten vorhanden ist. Ihre alten Metadaten waren 0,90, daher behalten wir hier die gleiche Version bei.

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

Hängen Sie es ein, um zu testen, ob alles funktioniert

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

Überprüfen Sie Ihre Daten

   ls -l /mnt/test

Wenn alles in Ordnung ist, hängen Sie das Laufwerk aus und ändern Sie die Größe.

unmount /mnt/md2
resize2fs /dev/md2

Wenn alles in Ordnung ist, können Sie das andere Laufwerk zum Array hinzufügen.

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

und warten Sie, bis die Laufwerke erneut synchronisiert wurden

cat / proc / mdstat

Silberfeuer
quelle
Haben Sie konkrete Vorschläge? dh schritte für mich zu machen?
Paul Schreiber
schau dir meine Bearbeitung oben an
Silverfire
/ dev / md2 existiert bereits. Warum möchte ich es neu erstellen? Und: Müsste ich eine Rettungsdisk booten, um dies zu erreichen? Gibt es eine Möglichkeit, die Größe dieses Live zu ändern?
Paul Schreiber
Live, vielleicht nicht, aber möglicherweise können Sie es mit einem Neustart tun. Wenn Sie das primäre Startlaufwerk aus dem Array entfernen, können Sie ein neues Array mit einem fehlenden Laufwerk erstellen (Name / dev / md3 oder so). Das System bootet dann vom neuen Laufwerk / RAID-Array und Sie können das alte hinzufügen
Silverfire
Am einfachsten wäre es wahrscheinlich, einfach von einem Backup auf einem neuen Array wiederherzustellen.
Silverfire
2

Aus / proc / partitions geht hervor, dass Linux glaubt, sda3 und sdb3 seien kleiner als sie.

Summieren Sie die Größen der Partitionen

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

und Sie erhalten eine Zahl, die viel kleiner als die Größe der Festplatte ist.

8       16  488386584 sdb

152248005 Blöcke von 1024 Bytes stimmen mit der Größe übereinmdadm --grow und resize2fsmelden für md2 .

Haben Sie diese Partitionen anfangs mit einer kleineren Größe erstellt und später neu erstellt, um den Rest der Festplatten zu nutzen? In diesem Fall sollte der Kernel beim Neustart die Partitionstabelle erneut lesen können. Danach sollte es funktionieren, das RAID-Gerät zu vergrößern und die Größe des Dateisystems zu ändern.

Sciurus
quelle
Ja, genau das habe ich getan.
Paul Schreiber
Maschine hing beim Neustart. Auf zur Untersuchung ...
Paul Schreiber