Збільшення / зміна розміру RAID під час оновлення видимого розміру дисків


10

Я спочатку створив програмний RAID за допомогою контролера, який міг адресувати лише 2 ТБ на диск. Диски - 3 ТБ. Він працював чудово, але використовував лише перші 2 ТБ кожного диска.

Зараз я змінив контролер, щоб побачити повний 3 ТБ. Тому я також хотів би /dev/md0використати останній 1 ТБ.

Я намагався:

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

Але як ви бачите, він бачить лише 2 ТБ. Якщо я спробую примусити його вище:

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

Таким чином система може бачити, що диски є 3 ТБ (в /proc/partitions), але RAID не може бачити їх як 3 ТБ.

деталі 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

Розміри дисків:

# 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

Редагувати:

# 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 використовує повні диски (тобто відсутні розділи)

Сьогодні вранці система вийшла з ладу. Після перезавантаження система не знайшла RAID (що було жахливо). Усі диски відображалися як запасні частини (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

Навіть тут зрозуміло, що mdadmне знайшли розмір 3 ТБ.

Я побіг mdadm --stop /dev/md0. Видалено запис у /etc/mdadm/mdadm.conf. Побіг mdadm -A --scan --force, через що RAID з'явився в Інтернеті та відновився.


Ви використовуєте 20 цілих дисків для RAID6 - правильно? На кожному диску немає розділу? Що fdisk -l /dev/sddпоказує? Яку ОС ви використовуєте, що таке mdadm-версія?
Нілс

Відповіді:


5

Я ткнув навколо / sys і набагато ближче до відповіді.

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

Це погоджується з тим, що ми бачили раніше. Але це:

# 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

Схоже, пояснює, чому RAID бачить неправильний розмір: більшість накопичувачів відображається як 2 ТБ, тоді як 2, які були замінені, відображаються як 3 ТБ. Усі диски є однією і тією ж моделлю, тому давайте подивимось, чи зможемо ми змінити сприйнятий розмір:

# 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

Вуаля. Розмір компонентів все ще невеликий, хоча:

# cat component_size
2147479552

Можливо, це може бути змінено mdadm:

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

Це, на жаль, блокується mdadmі подальший доступ до / dev / md0 блокується. А також доступ до компонента_размер:

# cat component_size   # This blocks

Відстій. Але добре, що в syslog написано:

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

Файлова система on / dev / md0 все ще працювала.

Після перезавантаження мені довелося повторити 'mdadm --grow / dev / md0 --size = max'. Потім дочекайтеся resyncзавершення. Знову доступ до / dev / md0 був заблокований. Отже, ще одна перезавантаження, після xfs_growfs /dev/md0чого зміна розміру була завершена.


Мені дуже сподобався паралельний (1) штекер, Оле :) Дякую за розслідування, просто потрапив у подібний випадок.
Майкл Шигорін

1
Я думаю, що "mdadm --update = devicesize" теж зробив би це, див. Сторінку man: "Це призведе до визначення mdadm для визначення максимальної корисної кількості місця на кожному пристрої та оновлення відповідного поля в метаданих."
rudimeier

3

Я думаю, що під час створення розмір пристрою був зареєстрований десь у метаданих. Зміна контролера не змінює метадані.

Вийміть запчастину з md, а потім повторно додайте її до набору RAID як новий накопичувач. Можливо, вам доведеться видалити метадані (перевірте сторінку людини на --zero-superblock або протріть весь диск). Якщо це працює на одному диску, повторіть процедуру і для всіх дискових файлів, які залишаютьсяindind. Потім, нарешті, зробіть -rowrow.

Не видаляйте додаткові диски, поки синхронізація не закінчиться !!


Мені незрозуміло, чи ви перевірили, що це насправді працює. Відновлення займає близько 1,5 днів. Заміна всіх 20 приводів призведе до погіршення роботи на цілий місяць. Коли ви пишете "Якщо це працює на одному диску", як ви перевіряєте, що він працював для одного диска?
Оле Танге

Ні, я цього не перевіряв, але раніше я бачив деякі проблеми з md, і у мене є певне відчуття, як це працює ... і не вдається. У мене немає дисків з поганими метаданими, які лежать навколо, щоб перевірити їх. Я знаю про тривалий час синхронізації, тому раджу використовувати запасні. У вас є RAID6, а значить, 2 накопичувачі можуть вийти з ладу, і у вас є запасний. Це означає, що в цілому 3 накопичувачі можуть вийти з ладу, перш ніж виникнуть проблеми. Ви можете перевірити одним приводом, принаймні ви знаєте, чи це ваша проблема. У мене є лише обмежена інформація про ваше налаштування. Не тягніть накопичувачі зі свого RAID-набору, якщо вам це не зручно
jippie

О, я розумію ваше запитання. mdadm попередить вас, що ви намагаєтесь додати пристрій, який значно більший за інші. Це не проти кількох байт, але попереджає вас, коли різниця порівняно велика.
jippie

1
Ви можете failдиск, потім removeйого, потім zero-superblockйого, щоб видалити метадані. Оскільки ваш набір RAID використовується, ви можете або додати його як запасний, що означає, що він не синхронізується, доки інший диск не вийде (це нормальна поведінка), але він працює лише для одного диска АБО ви addйого вимагаєте синхронізації. Я знаю, що це вічно. Або ви приймаєте той факт, що не можете додати всі наявні сховища. Одне з переваг використання таблиці розділів, якої ви не зробили. Не використовувати таблицю розділів - це не погано, але в цьому конкретному випадку вам допомогло б.
джиппі

1
Дивіться мій коментар вище: "mdadm попередить вас, що ви намагаєтеся додати пристрій, який значно більший за інші".
jippie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.