@vlarkanov

Как «апгрейдить» RAID1 с установленной системой до RAID10 без потери данных?

Всем привет!
Есть сервер с Debian 9. Система установлена на RAID1 /dev/md0p1 (состоит из 2х Intel DC S3700 200Gb).

sda 8:0 0 186,3G 0 disk
└─sda1 8:1 0 186,3G 0 part
└─md0 9:0 0 186,2G 0 raid1
└─md0p1 259:0 0 186,2G 0 md /
sdb 8:16 0 186,3G 0 disk
└─sdb1 8:17 0 186,3G 0 part
└─md0 9:0 0 186,2G 0 raid1
└─md0p1 259:0 0 186,2G 0 md /

Планируется докупить ещё 2 таких же диска и превратить массив в RAID10.

Как можно это сделать с минимальным простоем и без потери данных?

UPD. Разобрался как. Прилагаю полный алгоритм, как я только что сделал на тестовой виртуалке:

# структура разделов до процесса миграции: 4 идентичных диска, 2 из них в RAID1 (на обоих установлен GRUB)
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 291M 0 rom
vda 254:0 0 5G 0 disk
└─vda1 254:1 0 5G 0 part
└─md0 9:0 0 5G 0 raid1 /
vdb 254:16 0 5G 0 disk
└─vdb1 254:17 0 5G 0 part
└─md0 9:0 0 5G 0 raid1 /
vdc 254:32 0 5G 0 disk
vdd 254:48 0 5G 0 disk

===============================
1) СОЗДАНИЕ ВТОРОГО РЕЙДА
===============================

#Для новых дисков нужно создать структуру разделов идентичную тем, что уже в raid
sfdisk -d /dev/vda --force | sfdisk /dev/vdc --force
sfdisk -d /dev/vda --force | sfdisk /dev/vdd --force

#Для начала вытащим 1 диск из raid1, т.к. нам нужно минимум 3 диска для создания raid10
mdadm /dev/md0 --fail /dev/vdb1 --remove /dev/vdb1

#Собираем деградированный RAID10 как /dev/md3 и монтируем его. Обязательно добавим запись о новом массиве, чтобы после перезагрузки он оставался
mdadm --create /dev/md3 --level=10 --raid-devices=4 /dev/vdb1 /dev/vdc1 /dev/vdd1 missing
mdadm --examine --scan > /etc/mdadm/mdadm.conf
update-initramfs -u

#Создаем ФС на новом массиве
mkfs.ext4 /dev/md3

===============================
2) ВЫБРАТЬ ДРУГОЙ КОРЕНЬ ФС
===============================

#В файле /boot/grub/grub.cfg везде заменить UUID md0, на UUID md3

cdee676d-736c-4028-b419-8d30a6f550c2 на 205e4eb4-84b2-46ef-a220-0aaeb917d4f3

#После этого
update-initramfs -u

#В файле /etc/fstab и /etc/mtab заменить UUID /dev/md0 на UUID /dev/md3

================================
3) ПЕРЕНЕСТИ ДАННЫЕ
================================

#Переносим данные с /dev/md0 на /dev/md3
mkdir /mnt/md3
mount -t ext4 /dev/md3 /mnt/md3
rsync -avHxl --progress --inplace --exclude 'lost+found' / /mnt/md3/
umount /mnt/md3

#Перезагрузиться. В качестве / должен теперь быть md3.

=================================
4) УДАЛИТЬ СТАРЫЙ РЕЙД, ДОСОБРАТЬ НОВЫЙ
=================================

#Разобрать старый рейд, очистить диск, добавить его в RAID10
mdadm -S /dev/md0
mdadm --zero-superblock /dev/vda1
mdadm /dev/md3 --add /dev/vda1

#Пересканировать рейд, обновить запись о массиве
mdadm --examine --scan > /etc/mdadm/mdadm.conf

==================================
5) УСТАНОВИТЬ GRUB НА ВСЕ ДИСКИ
==================================
#укажем все 4 диска
dpkg-reconfigure grub-pc

После перезагрузки наслаждаемся RAID10.
  • Вопрос задан
  • 630 просмотров
Пригласить эксперта
Ответы на вопрос 4
Настоятельно рекомендуется так:
1. Сделать резервную копию
2. Пересобрать RAID
3. Вернуть данные на место

Вы будете не согласны с этим... Зря. Но пункт 1 обязателен
Ответ написан
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
В этом и состоит "прикол" недо-RAID - их нельзя дополнять, править, модифицировать. Они - как разделы во FreeBSD (не знаю, правда как сейчас, но до 9.2-STABLE было так) - "как прибили, так и держится". Только бэкап - при этом я категорически согласен с Дмитрий Шицков - бэкап обязателен! - и пересборка массива заново - при этом это будет новый массив, ничего не знающий о старом.
Настоящие RAID-контроллеры - адаптеки и иже с ними позволяют делать такие финты ушами - но у них на то и свой процессор на борту, который всю эту хитрую механику изолирует от посторонних глаз.
Ответ написан
Комментировать
@Wexter
Никак. Сливайте данные и пересобирайте массив
Ответ написан
Комментировать
@XakRU
Выести один из двух дисков, получите деградирующий raid 1, на основе выведенного диска тоже создать деградирующий raid1.
При установке дополнительных дисков добавить по одному в каждый raid. Raid1 можно создавать и с одним диском, но при создании необходимо указывать два устройства, но вместо второго написать «missing».
Не забываем про бекапы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы