Лучший способ вырастить программное обеспечение Linux RAID 1 до RAID 10

22

mdadm похоже, не поддерживает рост массива с уровня 1 до уровня 10.

У меня есть два диска в RAID 1. Я хочу добавить два новых диска и преобразовать массив в массив RAID 10 с четырьмя дисками.

Моя текущая стратегия:

  1. Сделайте хорошую резервную копию.
  2. Создайте поврежденный массив RAID 10 с 4 дисками и двумя отсутствующими дисками.
  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. Сделайте хорошую резервную копию всего.
Энтони Льюис
Я считаю, что ваши шаги верны. Вы теряете избыточность в течение периода, когда вы копируете данные из одного набора в другой.
Кевин Куфал
Можно ли создать деградированный 4-х дисковый RAID10?
Пауска
1
Да, вы просто используете «/ dev / hda отсутствует / dev / hdb отсутствует», потому что в противном случае вы потеряете одну целую пару, и все это развалится. «Принятый ответ» на этот вопрос, кстати, совершенно неверный и не работает.
womble
Я также ищу хороший способ сделать это, и я думаю, что метод, описанный в вопросе, является лучшим, который я нашел до сих пор. Ответ Марка Тернера не помогает, потому что он создает массив из 2 устройств, который нельзя преобразовать в 4 устройства (два других можно добавить только как запасные). И ответ Суреша Кумара такой же, как описано в вопросе, за исключением того, что он не будет работать именно так; недостающие устройства должны быть 2-го и 4-го, а не 3-го и 4-го. О шагах в вопросе: я думаю, что шаг 5 имеет полную избыточность, а шаг 6 имеет избыточность для половины данных. Я действительно вижу шаги были
renumbere

Ответы:

8

С помощью linux softraid вы можете создать массив RAID 10 только с двумя дисками.

Названия устройств, используемые ниже:

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

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

0) Резервное копирование, Резервное копирование, Резервное копирование, Резервное копирование ой и BACKUP

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 Rescue / Boot CD работает лучше всего.

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).

И сохраните конфигурацию в initramfs (будет доступна после перезагрузки)

update-initramfs -u
Марк Тернер
источник
1
Где четыре диска входят в это?
Уомбл
А? Я четко заявляю, что создаю массив с 2 дисками, копирую данные, сбой raid 1, удаляя один диск, добавляю этот диск в RAID10, затем загружаюсь в RAID10, если он работал, уничтожаю RAID1 и перемещаю этот последний диск в новый RAID ....
Марк Тернер
4
Вы отредактировали свой ответ после моего комментария. Кроме того, ваша процедура дает двухдисковый RAID-10 с двумя запасными частями ... вряд ли четырехдисковый RAID-10. Тома RAID-10 также нельзя изменить.
womble
2
Я выполнил команды так, как вы их предоставили, и в итоге получился двухдисковый RAID-10 с двумя запасными частями, как показано в / proc / mdstat. Это на ядре 2.6.30, с mdadm v2.6.7.2.
womble
3
msgstr "Массив mdadm: raid10 / dev / md1 не может быть изменён." Это также упоминается в справочной странице mdadm.
womble
9

Выполните ту же процедуру, что и у Марка Тернера, но при создании массива raid укажите 2 отсутствующих диска.

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

А затем перейдите к другим шагам.

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

Сэм Уитед
источник
6

Только что закончил переход от LVM на двух дисках mdadm RAID 1 объемом 2 ТБ к LVM на четырех дисках RAID 10 (два оригинальных + два новых диска).

Как отметил @aditsu, порядок создания дисков важен при создании массива.

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

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

Шаги для моей ситуации:

  1. Сделайте хорошую резервную копию.

  2. Создайте деградированный массив 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 выходит из строя, данные в массиве являются тостами.

user75601
источник
+1, особенно для шага 3;)
-1, инструкция непонятная, нет жены, потеряю мои данные
ZAB
1

Я переместил свой raid1 в raid10 сейчас, и хотя эта страница помогла мне, но в ответах выше не хватает некоторых вещей. Особенно моей целью было сохранить время рождения ext4.

установка была:

  • 2 диска raid1 каждого типа msdos и md0 с разделом ext4 и mbr с msdos
  • 2 новых диска становятся новыми праймериз (все одинакового размера)
  • в результате на 4 диска рейд md127 ext4, но из-за размера мне пришлось переключиться с mbr на gpt
  • это мой домашний диск, поэтому не требуется или не требуется настройка bootmanager
  • используя мою повседневную 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. установить раздел рейда, который я использовал, используя 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. fix raid
      gparted - отличный инструмент: вы говорите ему проверить и исправить раздел и изменить его размер до полного размера диска всего несколькими щелчками мыши;)

    3. установите новый uuid для этого раздела и обновите свой fstab с его помощью (измените uuid)

    4. сохранить ваш рейд в конф

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

      и удалить старый

      vim /etc/mdadm/mdadm.conf 
      
    5. перезагрузка, если вы не находитесь на rescusystem
  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
      

      ЖДИТЕ ЕГО снова

Лето-Sky
источник
0

Я сделал это с LVM. Начальная конфигурация: - sda2, sdb2 - и создан raid1 md1 сверху. sda1 и sdb1 использовались для второго raid1 для / boot раздела. - 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

(и убери туда старый мд1)

Все сделано на живой системе, с активными томами, используемыми для KVM;)

Undefine
источник