Як змінити розмір масиву RAID1 за допомогою mdadm?


12

У мене працює Ubuntu 11.04 (ядро 2.6.38-11). Я замінив 2x160GB на 2x500GB накопичувачі. Вони налаштовані як RAID1.

Таблиці розділів показують потрібні розміри. Ось 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

І 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

Але я не бачу нового простору:

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

Я спробував mdadm та 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!

Будь-які ідеї?

Додано за запитом

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

перегородки

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

Коментар по електронній пошті:

проблема полягає в метаданих, вам просто потрібно зібрати рейд-масив з параметром - update updateizeize

а після цього -G / dev / md? -z макс зробить роботу :)


Який вихід cat /proc/mdstat? Як щодо cat /proc/partitions?
Стівен у понеділок,

Додано вихід вище.
Пол Шрайбер

Ви не згадали, як скопіювали свої дані на нові диски. Однак це може сильно вплинути на відповідь.
poige

Я отримав дані, скопійовані на нові диски, розділивши їх на sfdisk, використовуючи mdadm --add і дозволяючи синхронізувати дані.
Пол Шрайбер

@Paul Schreiber, sfdiskви кажете (?) ... Ви маєте на увазі, що ви сказали, що також скопіювали схему розділення диска?
poige

Відповіді:


9

Просто використовуйте

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

Тоді ви зможете користуватися

resize2fs /dev/md2

Щоб файлова система відповідала розміру рейду. Все це робиться в Інтернеті, навіть не відключаючи md2.


1
Повна команда:resize2fs -p /dev/md2
Мілан Керслагер

@MilanKerslager, що там робити -p?.
Хайме Хаблуцель

1
@JaimeHablutzel -p - це відсоткове завершення, тому ви знаєте, що відбувається, оскільки це може зайняти деякий час (оригінальна відповідь уже виправлена).
Мілан Керслагер

2

Я регулярно використовую mdadm і вважаю його однією з найнебезпечніших утиліт Linux. Однак, якщо ви використовуєте правильні запобіжні заходи , ви можете уникнути більшості випадків потенційної втрати даних Резервного копіювання всіх даних !!! в минулому мене двічі покусав mdadm, втратив понад 700 ГБ даних і дуже мало його вдалося відновити, вас попередили.

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

Пам'ятайте, якщо ви хочете завантажувати його, використовуйте суперблок версії 0.9.

Редагувати

Ось як би я це зробив, неперевірений !

Створіть RAID1 з пропущеним зануренням просто для того, щоб ми могли швидко перевірити, чи залишаються дані, зберігаючи ще один привід із копією даних, ваші старі метадані були 0,90, тому ми збережемо ту саму версію.

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

Встановіть це, щоб перевірити, що все працює

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

перевірити свої дані

   ls -l /mnt/test

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

unmount /mnt/md2
resize2fs /dev/md2

Коли це все добре, ви можете додати інший диск до масиву.

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

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

cat / proc / mdstat


Чи є у вас якісь конкретні пропозиції? тобто для мене кроки?
Пол Шрайбер

дивіться на мою редакцію вище
Silverfire

/ dev / md2 вже існує. Чому я хочу її створити заново? І: мені доведеться завантажувати рятувальний диск, щоб це сталося? Чи є спосіб змінити розмір цього прямого ефіру?
Пол Шрайбер

Наживо, можливо, ні, але можливо, ви зможете зробити це з перезавантаженням, якщо ви вилучите основний завантажувальний диск з масиву, то зможете створити на ньому новий масив (назвіть його / dev / md3 або щось подібне) з відсутнім накопичувачем, тоді система завантажиться з нового масиву накопичувачів / рейдів, і тоді ви можете додати старий
Silverfire

Що, мабуть, було б найпростіше - це просто відновити з резервного копіювання на новому масиві.
Silverfire

2

З перегляду / proc / розділів очевидно, що Linux вважає, що sda3 та sdb3 менші, ніж вони.

Підсумовуйте розміри перегородок

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

і ви отримаєте число, значно менший за розмір диска.

8       16  488386584 sdb

152248005 блоки з 1024 байтів узгоджуються з розміром mdadm --growі resize2fsскладають звіт про md2 .

Ви спочатку створювали ці розділи з меншим розміром, а пізніше відтворювали їх для використання решти дисків? Якщо так, перезавантаження повинно дозволяти ядру перечитувати таблицю розділів. Після цього вирощування пристрою RAID та зміна розміру файлової системи повинно працювати.


Так, саме це я і зробив.
Пол Шрайбер

Машина висіла на перезавантаженні. Перейти до розслідування ...
Пол Шрайбер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.