Назад | Перейти на главную страницу

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

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.

Есть ли способ лучше?

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

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

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

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

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

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

update-initramfs -u

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

Я переместил свой 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. исправить рейд
      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
      

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

Я сделал это с помощью 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 пространство / 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;)