mdadm
похоже, не поддерживает рост массива с уровня 1 до уровня 10.
У меня есть два диска в RAID 1. Я хочу добавить два новых диска и преобразовать массив в четырехдисковый массив RAID 10.
Моя текущая стратегия:
rsync the RAID 1 array with the RAID 10 array.
fail
and remove
один диск из массива RAID 1.Проблема в отсутствии резервирования на шаге 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
Код выше дает пригодный для использования массив с двумя недостающими дисками (добавьте номера разделов, если вы не используете целые диски). Как только будет добавлен третий диск, он начнет синхронизацию. Я добавил четвертый диск до того, как закончил синхронизацию третий. Он показывался как запасной, пока не закончился третий диск, затем он начал синхронизацию.
Шаги для моей ситуации:
Сделайте хорошую резервную копию.
Создайте деградированный 4-дисковый массив RAID 10 с двумя недостающими дисками (мы будем называть отсутствующие диски №2 и 4).
Скажите жене, чтобы она не изменяла / не добавляла файлы, которые ей небезразличны
Выполните сбой и удалите один диск из массива RAID 1 (диск 4).
Переместите физические экстенты из массива RAID 1 в массив RAID 10, оставив диск 2 пустым.
Завершите работу активного массива RAID 1, добавьте этот теперь пустой диск (диск 2) в массив RAID 10 и дождитесь завершения повторной синхронизации.
Добавьте первый диск, удаленный из RAID 1 (диск 4), в массив RAID 10.
Дай жене вперёд.
На шаге 7 я думаю, что диск 1, 2, ИЛИ 4 может выйти из строя (во время повторной синхронизации диска 4) без остановки массива. Если диск 3 выходит из строя, данные в массиве всплывают.
Я переместил свой raid1 на raid10, и хотя эта страница мне помогла, но в ответах выше есть некоторые вещи, которых не хватает. Особенно моей целью было сохранить время рождения ext4.
установка была:
как уже было сказано ранее: нулевой шаг должен быть резервным и в процессе всегда может что-то пойти не так, что приведет к чрезмерной потере данных
РЕЗЕРВНОЕ КОПИРОВАНИЕ
настройка нового рейда
создать новый рейд
mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing
(я обнаружил, что макет важен .. 2-й и 4-й кажутся дубликатами в рейде "рядом" по умолчанию)
мигрировать
теперь получаю данные ... сначала я пытался использовать rsync, который работал, но не смог сохранить время рождения ... используйте dd для клон от старого рейда к новому
dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync
ЖДАТЬ ЕГО
вы можете проверить, отправив USR1 в этот процесс
kill -s USR1 <pid>
исправить рейд
gparted - отличный инструмент: вы говорите ему проверить и исправить раздел и изменить его размер до полного размера этого диска всего несколькими щелчками мыши;)
установите новый uuid для этого раздела и обновите им свой fstab (измените uuid)
сохраните свой рейд в конф
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
и удали старый
vim /etc/mdadm/mdadm.conf
уничтожение старого
провалить первый и добавить в новый рейд
mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
затем сделайте gpt на этом устройстве и установите новый пустой раздел
mdadm /dev/md127 --add /dev/sdc1
ЖДАТЬ ЕГО
вы можете проверить с
cat /proc/mdstat
останови второй
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.
Так:
создал md10 как:
mdadm --create / dev / md10 --level raid10 --raid-devices = 4 / dev / sdc2 отсутствует / dev / sdd2
расширить vg на нем:
pvcreate / dev / md10 vgextend пространство / dev / md10
перенесены тома с md1 на md10:
pvmove -v / dev / md1 / dev / md10
(дождитесь завершения) 4. Уменьшите группу томов:
vgreduce space /dev/md1
pvremove /dev/md1
стоп-массив md1:
mdadm -S / dev / md1
добавляем диски из старого md1 в md10:
mdadm -a / dev / md10 / dev / sda2 / dev / sdb2
обновить конфигурацию в /etc/mdadm/mdadm.conf:
mdadm -E --scan >> / dev / mdadm / mdadm.conf
(и удали там старый md1)
Все сделано в живой системе, с активными томами, используемыми для kvm;)