Найкращий спосіб розробити програмне забезпечення Linux RAID 1 до RAID 10


22

mdadm Схоже, не підтримує збільшення масиву з рівня 1 на рівень 10.

У мене два диски в RAID 1. Я хочу додати два нових диски та перетворити масив у чотиридисковий масив RAID 10.

Моя поточна стратегія:

  1. Зробіть гарне резервне копіювання.
  2. Створіть деградований 4-дисковий масив RAID 10 з двома відсутніми дисками.
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and remove один диск з масиву RAID 1.
  5. Додайте наявний диск до масиву RAID 10 і дочекайтеся завершення пересинхронізації.
  6. Знищіть масив RAID 1 і додайте останній диск до масиву RAID 10.

Проблема полягає у відсутності надмірності на етапі 5.

Чи є кращий спосіб?


5
Не забувайте крок 0. Зробіть гарне резервне копіювання всього.
Ентоні Льюїс

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

Чи можливо створити деградований 4disk RAID10?
pauska

1
Так, ви просто використовуєте "/ dev / hda missing / dev / hdb missing", тому що в іншому випадку ви втратите одну цілу пару і все розвалиться. "Прийнята відповідь" на це питання, до речі, абсолютно неправильна і не працює.
живіт

Я також шукаю хороший спосіб зробити це, і я вважаю, що метод, описаний у питанні, є найкращим, який я знайшов поки що. Відповідь Марка Тернера не допомагає, оскільки він створює масив на двох пристроях, який неможливо змінити на 4 пристрої (інші 2 можна додати лише як запасні частини). І відповідь Суреша Кумара така ж, як описана в запитанні, за винятком того, що він не буде працювати точно так; відсутні пристрої мають бути 2-м та 4-м, а не 3-м та 4-м. Щодо кроків у питанні: я думаю, що на етапі 5 є надмірність, а на етапі 6 - надмірність для половини даних. Я фактично бачу, що кроки були переглянуті
адіцу

Відповіді:


8

За допомогою linux softraid ви можете створити масив RAID 10 лише з двома дисками.

Назви пристроїв, які використовуються нижче:

  • md0 - це старий масив RAID1 типу / рівня.
  • md1 це новий масив RAID10 типу / рівня.
  • sda1і sdb2це нові , порожні розділи (без даних).
  • sda2і sdc1це старі розділи (з важливими даними).

Замініть назви, щоб відповідати вашому випадку використання. Використовуйте, наприклад, lsblkдля перегляду поточного макета.

0) Резервне копіювання, Резервне копіювання, Резервне копіювання, Резервне копіювання о і РЕЗЕРВНЕ

1) Створіть новий масив (4 пристрої: 2 існуючих, 2 відсутні):

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

Зауважте, що в цьому прикладі макет sda1має відсутній аналог та sdb2інший відсутній аналог. md1На даний момент ваші дані не є безпечними (фактично це RAID0, поки ви не додасте відсутніх членів).

Для перегляду макета та інших подробиць створеного масиву використовуйте:

mdadm -D /dev/md1

Примітка! Ви повинні зберегти макет масиву:

# View current mdadm config:
cat /etc/mdadm/mdadm.conf
# Add new layout (grep is to make sure you don't re-add md0):
mdadm --detail --scan | grep "/dev/md1" | tee -a /etc/mdadm/mdadm.conf
# Save config to initramfs (to be available after reboot)
update-initramfs -u

2) Форматування та монтаж. Це /dev/md1має бути негайно корисним, але його потрібно відформатувати та встановити.

3) Скопіюйте файли. Використовуйте, наприклад, rsync, щоб скопіювати дані зі старого RAID 1 у новий RAID 10. (це лише приклад команди, читайте довідкові сторінки для rsync)

rsync -arHx / /where/ever/you/mounted/the/RAID10

4) Збити 1-ю частину старого RAID1 (md0) та додати її до нового RAID10 (md1)

mdadm /dev/md0 --fail /dev/sda2 --remove /dev/sda2
mdadm /dev/md1 --add /dev/sda2

Примітка! Це видалить дані з sda2. Вони md0все-таки можуть бути корисними, але лише в тому випадку, якщо інший рейдовий член працював повністю.

Також зауважте, що це почне процес синхронізації / відновлення md1. Для перевірки стану використовуйте одну з команд нижче:

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

Зачекайте, поки відновлення закінчиться.

5) Встановіть GRUB на новий масив (якщо припустити, що з нього завантажуєтесь). Деякі рятувальні / завантажувальні диски Linux найкраще працюють.

6) Завантажте новий масив. ЯКЩО ПРАВИЛЬНО РОБОТИ Знищити старий масив і додати залишився диск до нового масиву.

ТОЧКА НЕПОВЕРНЕННЯ

У цей момент ви знищите дані про останнього члена старого масиву md0. Будьте абсолютно впевнені, що все працює.

mdadm --stop /dev/md0
mdadm /dev/md0 --remove /dev/sdc1
mdadm /dev/md1 --add /dev/sdc1

І знову - чекайте, поки відновлення md1закінчиться.

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

7) Оновіть конфігурацію mdadm

Не забудьте оновити /etc/mdadm/mdadm.conf(видалити md0).

І збережіть config у initramfs (бути доступним після перезавантаження)

update-initramfs -u

1
Звідки в неї входять чотири диски?
живіт

Так? Я чітко заявляю, що створити масив з 2-х дисків, скопіювати дані, провалити рейд 1, видаливши один диск, додати цей диск до RAID10, потім завантажитися на RAID10, якщо він працював, знищити RAID1 і перемістити останній диск на новий RAID ....
Марк Тернер

4
Ви відредагували свою відповідь після мого коментаря. Крім того, ваша процедура дає дводисковий RAID-10 з двома запасними частинами ... навряд чи чотиридисковий RAID-10. Томи RAID-10 також неможливо змінити.
живіт

2
Я запускав команди, як ви їх надали, і я закінчую дводисковим RAID-10 з двома запасними частинами, як показано / proc / mdstat. Це на ядрі 2.6.30, з mdadm v2.6.7.2.
жіноча

3
"mdadm: масив raid10 / dev / md1 неможливо змінити." Про це також згадується на сторінці mdadm.
жіноча

9

Дотримуйтесь тієї ж процедури, що і Марк Тернер, але коли ви створюєте рейдовий масив, згадайте про два відсутні диски

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

А потім приступайте до інших кроків.

Коротше кажучи, створіть RAID10 із загальними 4 дисками (з яких 2 відсутні), повторно синхронізуйте, додайте ще два диски після цього.


6

Щойно закінчив перехід від LVM на двох 2 ТБ дисках mdadm RAID 1 до LVM на чотирьох дисках RAID 10 (два оригінальних + два нових диска).

Як @aditsu зазначив, порядок приводу важливий при створенні масиву.

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda missing /dev/sdb missing

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

Кроки до моєї ситуації:

  1. Зробіть гарне резервне копіювання.

  2. Створіть деградований 4-дисковий масив RAID 10 з двома відсутніми дисками (ми будемо називати відсутні диски №2 та 4).

  3. Скажіть дружині не змінювати / додавати жодні файли, які вона хвилює

  4. Помилка та видалення одного диска з масиву RAID 1 (диск 4).

  5. Перемістіть фізичні розширення з масиву RAID 1 в масив RAID 10, залишивши диск 2 порожнім.

  6. Убийте активний масив RAID 1, додайте, що тепер порожній диск (диск 2) до масиву RAID 10, і дочекайтеся завершення повторної синхронізації.

  7. Додайте перший диск, видалений з RAID 1 (диск 4), до масиву RAID 10.

  8. Дайте дружині йти вперед.

На етапі 7 я думаю, що диск 1, 2, АБО 4 може вийти з ладу (під час пересинхрування диска 4), не вбиваючи масив. Якщо диск 3 не вдається, дані в масиві - тости.


+1, особливо для кроку 3;)

-1, інструкція незрозуміла, не маю дружини, втрачаю мої дані
ЗАБ

1

Я перемістив raid1 до raid10 зараз, і хоча ця сторінка допомогла мені, але у відповідях вище наведено деякі речі. Особливо моя мета полягала в тому, щоб тримати дні народження ext4.

налаштування:

  • 2 диски raid1 кожного типу msdos та md0 з розділом ext4 та mbr з msdos
  • 2 свіжих нових диска, які стають новими праймерізами (все того ж розміру)
  • в результаті чого нападало 4 диски md127 ext4, але через розмір мені довелося перейти з mbr на gpt
  • це мій домашній диск, тому налаштування завантажувача не потрібно і не планується
  • за допомогою мого повсякденного ubuntu (так: не використовуйте зовнішній рятувальний диск)
  • використовуючи gparted, dd та mdadm

як хто-небудь заявляв раніше: нульовий крок повинен бути резервним, і в процесі цього завжди може статися щось не так, що призводить до надзвичайної втрати даних

  1. НАЗАД

  2. налаштування нового рейду

    1. створити новий рейд

      mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing
      

      (я виявив, що макет важливий. 2-й та 4-й здаються дублікатами у стандартному рейді "біля" за замовчуванням)

    2. встановіть розділ raid, я використовував gparted, налаштовуючи gpt на md127, а потім додаючи новий розділ (ext4) розміром старого або більше
  3. мігрувати

    1. Тепер я отримую дані ... я спершу намагався використати rsync, який працював, але не зміг утримати час народження ... використовувати DD для клонування зі старого рейду до нового

      dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync
      

      ЗАЧЕКАЙТЕ ІТ,
      ви можете перевірити, надсилаючи USR1 до цього процесу

      kill -s USR1 <pid>
      
    2. виправити рейд
      gparted - це чудовий інструмент: ви скажете йому перевірити & виправити розділ та змінити його розмір до повного розміру цього диска за допомогою лише декількох клацань миші;)

    3. встановіть новий uuid для цього розділу та оновіть його fstab (змінити uuid)

    4. зберігайте рейд у конф

      mdadm --examine --scan  >> /etc/mdadm/mdadm.conf
      

      і видаліть стару

      vim /etc/mdadm/mdadm.conf 
      
    5. перезавантажте, якщо ви не знаходитесь у рекусистемі
  4. знищення старого

    1. провалити перший і додати його до нового рейду

      mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
      

      потім зробіть gpt на цьому пристрої та встановіть новий порожній розділ

      mdadm /dev/md127 --add /dev/sdc1
      

      ЗАЧЕКАЙТЕ НА ІТ, з яким
      ви можете перевірити

      cat /proc/mdstat
      
    2. зупиніть другий

      mdadm --stop /dev/md0 
      

      потім зробіть gpt на цьому останньому пристрої та знову встановіть новий порожній розділ

      mdadm /dev/md127 --add /dev/sdd1
      

      ЗАЧЕКАЙТЕ знову


0

Я робив це з LVM. Початкова конфігурація: - sda2, sdb2 - і створено raid1 md1 зверху. sda1 і sdb1 були використані для другого рейду1 для / завантаження розділу. - md1 був pv у груповому просторі об'єму з деякими lvm.

Я додав диски sdc і sdd і створив там розділи, як на sda / sdb.

Так:

  1. створено md10 як:

    mdadm --create / dev / md10 - level raid10 --raid-devices = 4 / dev / sdc2 відсутнє / dev / sdd2

  2. продовжити vg на ньому:

    pvcreate / dev / md10 vgextend space / dev / md10

  3. переміщено обсяги з md1 до md10:

    pvmove -v / dev / md1 / dev / md10

(дочекайтеся завершення) 4. зменшіть групу гучності:

vgreduce space /dev/md1
pvremove /dev/md1
  1. стоп-масив md1:

    mdadm -S / dev / md1

  2. додати диски зі старого md1 до md10:

    mdadm -a / dev / md10 / dev / sda2 / dev / sdb2

  3. оновити конфігурацію в /etc/mdadm/mdadm.conf:

    mdadm -E --scan >> / dev / mdadm / mdadm.conf

(і видаліть там старий md1)

Все, що робиться на живій системі, з активними обсягами, які використовуються для kvm;)

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