Zwiększ / zmień rozmiar RAID podczas aktualizacji widocznego rozmiaru dysków


10

Pierwotnie utworzyłem programową macierz RAID za pomocą kontrolera, który mógł adresować tylko 2 TB na dysk. Dyski są dyskami o pojemności 3 TB. Działa dobrze, ale używał tylko pierwszych 2 TB każdego dysku.

Teraz zmieniłem kontroler, aby zobaczyć pełne 3 TB. Dlatego też chciałbym /dev/md0użyć ostatniego 1 TB.

Próbowałem:

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

Ale jak widać, widzi tylko 2 TB. Jeśli spróbuję wymusić to wyżej:

# mdadm --grow /dev/md0 --size=2147483648
mdadm: Cannot set device size for /dev/md0: No space left on device

Więc w jakiś sposób system widzi dyski o pojemności 3 TB (wejście /proc/partitions), ale RAID nie widzi ich jako 3 TB.

szczegóły mdadm:

# mdadm --detail /dev/md0
/dev/md0:
    Version : 1.2
Creation Time : Fri Mar  2 15:14:46 2012
 Raid Level : raid6
 Array Size : 38654631936 (36863.93 GiB 39582.34 GB)
Used Dev Size : 2147479552 (2048.00 GiB 2199.02 GB)
Raid Devices : 20
Total Devices : 21
Persistence : Superblock is persistent

Update Time : Wed Apr 25 19:47:09 2012
      State : active
Active Devices : 20
Working Devices : 21
Failed Devices : 0
Spare Devices : 1

     Layout : left-symmetric
 Chunk Size : 4096K

       Name : node5:1
       UUID : 8603c3df:b740ba22:8c9c82fd:a18b3133
     Events : 845

Number   Major   Minor   RaidDevice State
  20      65       32        0      active sync   /dev/sds
   1      65       64        1      active sync   /dev/sdu
   2      65       80        2      active sync   /dev/sdv
   3      65       96        3      active sync   /dev/sdw
   4       8      192        4      active sync   /dev/sdm
   5       8       32        5      active sync   /dev/sdc
   6       8       48        6      active sync   /dev/sdd
   7       8       64        7      active sync   /dev/sde
   8       8       80        8      active sync   /dev/sdf
   9       8       96        9      active sync   /dev/sdg
  10       8      112       10      active sync   /dev/sdh
  11       8      128       11      active sync   /dev/sdi
  12       8      144       12      active sync   /dev/sdj
  13       8      160       13      active sync   /dev/sdk
  14       8      176       14      active sync   /dev/sdl
  15       8      208       15      active sync   /dev/sdn
  16       8      224       16      active sync   /dev/sdo
  17       8      240       17      active sync   /dev/sdp
  18      65        0       18      active sync   /dev/sdq
  19      65       16       19      active sync   /dev/sdr

  21      65       48        -      spare   /dev/sdt

Rozmiary dysków:

# cat /proc/partitions |grep 2930266584
   8       48 2930266584 sdd
   8       32 2930266584 sdc
   8      112 2930266584 sdh
   8       96 2930266584 sdg
   8       80 2930266584 sdf
   8      128 2930266584 sdi
   8      176 2930266584 sdl
   8       64 2930266584 sde
  65       32 2930266584 sds
   8      192 2930266584 sdm
   8      144 2930266584 sdj
  65       80 2930266584 sdv
   8      224 2930266584 sdo
   8      208 2930266584 sdn
   8      160 2930266584 sdk
   8      240 2930266584 sdp
  65        0 2930266584 sdq
  65       64 2930266584 sdu
  65       16 2930266584 sdr
  65       48 2930266584 sdt
  65       96 2930266584 sdw

Edytować:

# mdadm --version
mdadm - v3.1.4 - 31st August 2010
# uname -a
Linux lemaitre 3.2.0-0.bpo.1-amd64 #1 SMP Sat Feb 11 08:41:32 UTC 2012 x86_64 GNU/Linux

RAID6 korzysta z pełnych dysków (tzn. Bez partycji)

Dziś rano system się zawiesił. Po ponownym uruchomieniu system nie znalazł RAID (co było okropne). Wszystkie dyski pokazały się jako części zamienne (S):

cat /proc/mdstat 
Personalities : 
md0 : inactive sdr[20](S) sds[21](S) sdq[18](S) sdp[17](S) sdo[16](S) sdn[15](S) sdl[14](S) sdk[13](S) sdj[12](S) sdi[11](S) sdh[10](S) sdg[9](S) sdf[8](S) sde[7](S) sdd[6](S) sdc[5](S) sdm[4](S) sdv[3](S) sdu[2](S) sdt[1](S)
      42949652460 blocks super 1.2

Nawet tutaj jasne jest, że mdadmnie znalazłem rozmiaru 3 TB.

Pobiegłem mdadm --stop /dev/md0. Usunięto wpis w /etc/mdadm/mdadm.conf. Ran mdadm -A --scan --force, co spowodowało przejście RAID do trybu online i odbudowę.


Używasz 20 całych dysków dla RAID6 - prawda? Nie ma partycji na każdym dysku? Co fdisk -l /dev/sddpokazuje Z jakiego systemu operacyjnego korzystasz, jaka jest wersja mdadm?
Nils,

Odpowiedzi:


5

Przeszukałem / sys i zbliżyłem się znacznie do odpowiedzi.

# cd /sys/block/md0/md
# cat component_size
2147479552

To zgadza się z tym, co widzieliśmy wcześniej. Ale to:

# grep . dev-sd*/size
dev-sdc/size:2147482623
dev-sdd/size:2147482623
dev-sde/size:2147482623
dev-sdf/size:2930265560
dev-sdg/size:2147482623
dev-sdh/size:2147482623
dev-sdi/size:2147482623
dev-sdj/size:2147482623
dev-sdk/size:2147482623
dev-sdl/size:2147483648
dev-sdm/size:2147482623
dev-sdn/size:2147482623
dev-sdo/size:2147482623
dev-sdp/size:2147482623
dev-sdq/size:2147482623
dev-sdr/size:2147482623
dev-sds/size:2147482623
dev-sdt/size:2147482623
dev-sdu/size:2147482623
dev-sdv/size:2147482623
dev-sdw/size:2930265560

wydaje się wyjaśniać, dlaczego RAID widzi niewłaściwy rozmiar: większość dysków pokazuje się jako 2 TB, podczas gdy 2, które zostały wymienione, pokazują się jako 3 TB. Wszystkie dyski są tego samego modelu, więc zobaczmy, czy możemy zmienić postrzegany rozmiar:

# parallel echo 2930265560 \> ::: dev-sd*/size
# grep . dev-sd*/size
dev-sdc/size:2930265560
dev-sdd/size:2930265560
dev-sde/size:2930265560
dev-sdf/size:2930265560
dev-sdg/size:2930265560
dev-sdh/size:2930265560
dev-sdi/size:2930265560
dev-sdj/size:2930265560
dev-sdk/size:2930265560
dev-sdl/size:2930265560
dev-sdm/size:2930265560
dev-sdn/size:2930265560
dev-sdo/size:2930265560
dev-sdp/size:2930265560
dev-sdq/size:2930265560
dev-sdr/size:2930265560
dev-sds/size:2930265560
dev-sdt/size:2930265560
dev-sdu/size:2930265560
dev-sdv/size:2930265560
dev-sdw/size:2930265560

Voila Component_size jest jednak wciąż mały:

# cat component_size
2147479552

Może może to zmienić mdadm:

# mdadm --grow /dev/md0 --size=max

To niestety się blokuje, mdadma późniejszy dostęp do / dev / md0 jest zablokowany. Podobnie jest z dostępem do component_size:

# cat component_size   # This blocks

Szkoda Ale dobrą stroną jest to, że w syslog mówi:

Apr 27 20:45:50 server kernel: [124731.725019] md0: detected capacity change from 39582343102464 to 54010589478912

System plików na / dev / md0 nadal działał.

Po ponownym uruchomieniu musiałem ponownie wykonać polecenie „mdadm --grow / dev / md0 --size = max”. Następnie poczekaj na resynczakończenie. Ponownie dostęp do / dev / md0 został zablokowany. Tak więc kolejny restart, a xfs_growfs /dev/md0następnie zmiana rozmiaru została zakończona.


Bardzo podobała mi się wtyczka równoległa (1), Ole :) Dzięki za śledztwo, właśnie trafiłem w podobny przypadek.
Michael Shigorin

1
Myślę, że „mdadm --update = devicesize” też by to zrobił, patrz strona podręcznika: „Spowoduje to, że mdadm określi maksymalną użyteczną ilość miejsca na każdym urządzeniu i zaktualizuje odpowiednie pole w metadanych”.
rudimeier

3

Myślę, że podczas tworzenia rozmiar urządzenia został zarejestrowany gdzieś w metadanych. Zmiana kontrolera nie zmienia metadanych.

Usuń część zapasową z dysku MD, a następnie ponownie dodaj ją do zestawu RAID jako nowy dysk. Prawdopodobnie będziesz musiał usunąć metadane (sprawdź stronę podręcznika dla --zero-superblock lub wyczyść cały dysk). Jeśli to działa na jednym dysku, powtórz procedurę dla wszystkich pozostałych dysków. Następnie w końcu wykonaj --grow.

Nie usuwaj dodatkowych dysków, dopóki synchronizacja się nie skończy !!


Nie jest dla mnie jasne, czy sprawdziłeś, czy to rzeczywiście działa. Przebudowa zajmuje około 1,5 dnia. Wymiana wszystkich 20 dysków spowoduje pogorszenie działania przez cały miesiąc. Kiedy piszesz „Jeśli to działa na jednym dysku”, w jaki sposób sprawdzasz, czy działało to na jednym dysku?
Ole Tange

Nie, nie testowałem tego, ale widziałem wcześniej pewne problemy z MD i mam przeczucie, jak to działa ... i kończy się niepowodzeniem. Nie mam dysków ze złymi metadanymi, które mogłyby je przetestować. Zdaję sobie sprawę z długiego czasu synchronizacji, dlatego radzę używać zapasowego. Masz RAID6, co oznacza, że ​​2 dyski mogą ulec awarii i masz zapasowy. Oznacza to w sumie 3 dyski, które mogą ulec awarii, zanim wystąpi problem. Możesz sprawdzić za pomocą jednego dysku, przynajmniej wiesz, czy to jest twój problem. Mam tylko ograniczone informacje o Twojej konfiguracji. Nie wyciągaj dysków z zestawu RAID, jeśli nie czujesz się komfortowo
jippie

Rozumiem twoje pytanie. mdadm ostrzeże cię, że próbujesz dodać urządzenie, które jest znacznie większe niż inne. Nie ma nic przeciwko kilku bajtom, ale ostrzega, gdy różnica jest stosunkowo duża.
jippie

1
Możesz faildysk, potem removego, a następnie zero-superblock, aby usunąć metadane. Gdy zestaw RAID jest w użyciu, możesz go dodać jako zapasowy, co oznacza, że ​​nie zsynchronizuje się, dopóki inny dysk nie ulegnie awarii (to normalne zachowanie), ale działa tylko na jednym dysku LUB na addnim i wymaga synchronizacji. Wiem, że to trwa wieczność. Lub akceptujesz fakt, że nie możesz adresować całego dostępnego miejsca. Jedną z zalet korzystania z tabeli partycji, której nie zrobiłeś. Nieużywanie tabeli partycji nie jest złe, ale w tym konkretnym przypadku by ci pomogło.
jippie

1
Zobacz mój komentarz powyżej: „mdadm ostrzeże cię, że próbujesz dodać urządzenie, które jest znacznie większe niż inne”.
jippie
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.