Jak zmienić rozmiar macierzy RAID1 za pomocą mdadm?

12

Mam Ubuntu 11.04 (jądro 2.6.38-11). Zamieniłem 2x160GB na dyski 2x500GB. Są skonfigurowane jako RAID1.

Tabele partycji pokazują odpowiednie rozmiary. Oto 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

I 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

Ale nie widzę nowej przestrzeni:

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

Próbowałem mdadm i 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!

Jakieś pomysły?

Dodano na żądanie

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

partycje

# 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

rozstał się:

# 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

Komentarz przez e-mail:

problem tkwi w metadanych, wystarczy skompletować tablicę rajdową z parametrem --update devicesize

a potem -G / dev / md? -z max wykona pracę :)

Paul Schreiber
źródło
Jaka jest wydajność cat /proc/mdstat? Jak o cat /proc/partitions?
Steven poniedziałek
Dodano wynik powyżej.
Paul Schreiber
Nie wspomniałeś, jak skopiowałeś swoje dane na nowe dyski. Może to jednak silnie wpłynąć na odpowiedź.
poige
Skopiowałem dane na nowe dyski, dzieląc je na partycje za pomocą sfdisk, używając mdadm --add i pozwalając na synchronizację danych.
Paul Schreiber,
@Paul Schreiber, sfdiskmówisz (?)… Czy masz na myśli mówiąc, że skopiowałeś również schemat partycjonowania dysku?
poige

Odpowiedzi:

9

Po prostu użyj

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

Wtedy będziesz mógł użyć

resize2fs /dev/md2

Aby system plików pasował do rozmiaru nalotu. Wszystko to odbywa się online, nawet bez odmontowywania md2.

Zaar Hai
źródło
1
Kompletne polecenie:resize2fs -p /dev/md2
Milan Kerslager
@MilanKerslager, co tam robi -p?.
Jaime Hablutzel
1
@JaimeHablutzel -p to procentowy pasek ukończenia, więc wiesz, co się dzieje, ponieważ może to zająć trochę czasu (oryginalna odpowiedź została już naprawiona).
Milan Kerslager
2

Regularnie używam mdadm i uważam to za jedno z najbardziej niebezpiecznych narzędzi Linuksa. Jeśli jednak zastosujesz odpowiednie środki ostrożności, możesz uniknąć większości przypadków potencjalnej utraty danych. Wykonaj kopię zapasową wszystkich danych !!! w przeszłości byłem dwukrotnie gryziony przez mdadm, straciłem ponad 700 GB danych i bardzo niewiele z nich udało się odzyskać, zostałeś ostrzeżony.

Istnieje bardzo duża szansa, że ​​będziesz musiał ponownie utworzyć macierz RAID, ponieważ mdadm nie spodziewa się ani nie rekompensuje gwałtownie rosnących rozmiarów dysków. Użyje rozmiaru podanego w superbloku rajdowym, a nie samego napędu. Pod warunkiem, że dyski są już zsynchronizowane, nie powinieneś mieć wielu problemów.

Pamiętaj, jeśli chcesz go uruchomić, użyj superbloku w wersji 0.9.

Edytować

Tak bym to zrobił, niesprawdzony !

Utwórz RAID1 z brakującym nurkowaniem, abyśmy mogli szybko przetestować, czy dane pozostały, wciąż mając inny dysk z kopią danych, twoje stare metadane miały wartość 0,90, więc zachowamy tę samą wersję tutaj.

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

Zamontuj go, aby sprawdzić, czy wszystko działa

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

sprawdź swoje dane

   ls -l /mnt/test

Jeśli wszystko wygląda dobrze, odmontuj dysk i zmień rozmiar.

unmount /mnt/md2
resize2fs /dev/md2

Gdy wszystko będzie w porządku, możesz dodać drugi dysk do tablicy.

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

i poczekaj na ponowne zsynchronizowanie dysków

cat / proc / mdstat

Silverfire
źródło
Czy masz jakieś konkretne sugestie? czyli kroki, które powinienem podjąć?
Paul Schreiber,
spójrz na moją edycję powyżej
Silverfire
/ dev / md2 już istnieje. Dlaczego chcę go ponownie utworzyć? I: musiałbym uruchomić dysk ratunkowy, aby tak się stało? Czy jest jakiś sposób, aby zmienić rozmiar tej transmisji na żywo?
Paul Schreiber,
Na żywo, może nie, ale możesz to zrobić ponownie, jeśli usuniesz podstawowy dysk rozruchowy z tablicy, możesz następnie utworzyć na nim nową tablicę (nazwij ją / dev / md3 lub coś takiego) z brakującym dyskiem, system następnie uruchomi nową macierz napędową / RAID, a następnie możesz dodać starą
Silverfire,
Prawdopodobnie najłatwiej byłoby po prostu przywrócić dane z kopii zapasowej na nowej macierzy.
Silverfire
2

Patrząc na / proc / partitions , widać, że Linux uważa, że sda3 i sdb3 są mniejsze niż są.

Zsumuj rozmiary partycji

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

a otrzymasz liczbę znacznie niższą niż rozmiar dysku.

8       16  488386584 sdb

152248005 bloków 1024 bajtów jest zgodny z rozmiarem mdadm --growi resize2fsraportuje dla md2 .

Czy początkowo utworzyłeś te partycje o mniejszym rozmiarze, a następnie odtworzyłeś je ponownie, aby wykorzystać resztę dysków? Jeśli tak, ponowne uruchomienie powinno pozwolić jądru na ponowne odczytanie tablicy partycji. Następnie należy zwiększyć ilość urządzeń RAID i zmienić rozmiar systemu plików.

Sciurus
źródło
Tak, właśnie to zrobiłem.
Paul Schreiber,
Maszyna zawiesiła się przy ponownym uruchomieniu. Wyruszamy, żeby zbadać ...
Paul Schreiber,