Настройка программного массива RAID1 на работающей системе (CentOS 7)

Исходные данные:

Диск /dev/sda, на котором имеются следующие разделы:
/dev/sda1 — раздел / с файловой системой ext4
/dev/sda2 — swap
/dev/sda3 — раздел /opt с файловой системой ext4

Абсолютно чистый /dev/sdb, идентичный по размеру с /dev/sda
В результате должно получиться следующее:

/dev/md0, полученный из /dev/sda1 и /dev/sdb1
/dev/md1, полученный из /dev/sda2 и /dev/sdb2
/dev/md2, полученный из /dev/sda3 и /dev/sdb3

Будет использоваться утилита mdadm.
# yum install mdadm

Для создания массива raid1 на уже работающей системе, необходимо подготовить диск /dev/sdb, скопировать на него все содержимое диска /dev/sda и только после этого добавить /dev/sda к массиву.

Копируем таблицу разделов диска /dev/sda на диск /dev/sdb:

# sfdisk -d /dev/sda | sfdisk /dev/sdb

Команда fdisk -l должна теперь показать идентичную разметку обоих дисков.

Желательно (но не обязательно) изменить тип всех трех разделов и установить его равным FD (Linux RAID autodetect). Изменить тип раздела можно с помощью fdisk:

# fdisk /dev/sdb

Перейдем к созданию raid1 массивов. Поскольку диск /dev/sda сейчас занят (на нем запущена система) разделы /dev/sda1, /dev/sda2 и /dev/sda3 нельзя добавить к массиву. Создаем raid1 из одного диска, для второго используем заполнитель missing:

# mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1
# mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb2
# mdadm --create /dev/md2 --level=1 --raid-devices=2 missing /dev/sdb3

Следующий шаг – создание файловых систем на наших массивах:

# mkfs.ext4 /dev/md0
# mkswap /dev/md1
# mkfs.ext4 /dev/md2

Теперь монтируем наши /dev/md0 и /dev/md2 для копирования текущей системы. Естественно, swap массив /dev/md1 монтировать не нужно:

# mkdir /mnt/md0
# mount /dev/md0 /mnt/md0

# mkdir /mnt/md2
# mount /dev/md2 /mnt/md2

Копируем содержимое разделов /dev/sda1 и /dev/sda3 на /dev/md0 и /dev/md2 соответственно:

# rsync -axhP / /mnt/md0

# rsync -axhP /opt /mnt/md2

Монтируем информацию о текущей системе в наш новый корень и делаем chroot в него:

# mount --bind /proc /mnt/md0/proc && mount --bind /dev /mnt/md0/dev && mount --bind /sys /mnt/md0/sys && mount --bind /run /mnt/md0/run && chroot /mnt/md0

Получаем UUID /dev/md0, /dev/md1 и /dev/md2, вносим их в /etc/fstab, где заменяем UUID разделов диска /dev/sda:

# ls -l /dev/disk/by-uuid |grep md >> /etc/fstab
# nano /etc/fstab

Создаем конфиг для mdadm:

# mdadm --detail --scan > /etc/mdadm.conf

Делаем новый initramfs:

# mv /boot/initramfs-3.10.0-28.el7.x86_64.img /boot/initramfs-3.10.0-28.el7.x86_64.img.bak
# dracut /boot/initramfs-$(uname -r).img $(uname -r)

Передаем ядру опцию «rd.auto=1» явно через grub, для этого добавляем ее в GRUB_CMDLINE_LINUX:

# nano /etc/default/grub

Перепишем конфиг grub и установим его на наш диск sdb:

# grub2-mkconfig -o /boot/grub2/grub.cfg && grub2-install /dev/sdb

Далее выполним перезагрузку сервера. Через BIOS Boot Menu выбираем диск с половинкой raid.

После удачной загрузки, переделываем sda в часть raid1 массива. С помощью fdisk изменим тип всех трех разделов и установим его равным FD (Linux RAID autodetect). Далее добавим диск в raid1 и переустановим grub на диск:

#fdisk /dev/sda

#mdadm --manage /dev/md0 --add /dev/sda1
#mdadm --manage /dev/md1 --add /dev/sda2
#mdadm --manage /dev/md2 --add /dev/sda3

#grub2-install /dev/sda

После этого можем посмотреть как собирается raid1 массив через /proc/mdstat:

# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sda3[2] sdb3[1]
442117120 blocks super 1.2 [2/1] [_U]
resync=DELAYED
bitmap: 4/4 pages [16KB], 65536KB chunk

md0 : active raid1 sda1[2] sdb1[1]
41910272 blocks super 1.2 [2/1] [_U]
[============>........] recovery = 64.8% (27192256/41910272) finish=2.6min speed=93586K/sec

md1 : active raid1 sda2[2] sdb2[1]
4190208 blocks super 1.2 [2/1] [_U]
resync=DELAYED

unused devices: <none>

На этом все, программный raid1 успешно создан!

Ниже несколько примеров для работы с утилитой mdadm.

Примеры использования mdadm

Пометка диска как сбойного

Диск в массиве можно условно сделать сбойным, ключ —fail (-f):

# mdadm /dev/md0 --fail /dev/sda1
# mdadm /dev/md0 -f /dev/sda1

Удаление сбойного диска
Сбойный диск можно удалить с помощью ключа —remove (-r):

# mdadm /dev/md0 --remove /dev/sda1
# mdadm /dev/md0 -r /dev/sda1

Добавление нового диска
Добавить новый диск в массив можно с помощью ключей —add (-a) и —re-add:

# mdadm /dev/md0 --add /dev/sda1
# mdadm /dev/md0 -a /dev/sda1

Сборка существующего массива
Собрать существующий массив можно с помощью mdadm —assemble. Как дополнительный аргумент указывается, нужно ли выполнять сканирование устройств, и если нет, то какие устройства нужно собирать.

# mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1
# mdadm --assemble --scan

Расширение массива
Расширить массив можно с помощью ключа —grow (-G). Сначала добавляется диск, а потом массив расширяется:

# mdadm /dev/md0 --add /dev/sdb1

Проверяем, что диск (раздел) добавился:

# mdadm --detail /dev/md0
# cat /proc/mdstat

Если раздел действительно добавился, мы можем расширить массив:

# mdadm -G /dev/md0 --raid-devices=4

Опция —raid-devices указывает новое количество дисков используемое в массиве. Например, было 3 диска, а теперь расширяем до 4-х — указываем 4.

Рекомендуется задать файл бэкапа на случай прерывания перестроения массива, например добавить:

—backup-file=/var/backup

При необходимости, можно регулировать скорость процесса расширения массива, указав нужное значение в файлах

/proc/sys/dev/raid/speed_limit_min
/proc/sys/dev/raid/speed_limit_max

Убедитесь, что массив расширился:

# cat /proc/mdstat

Нужно обновить конфигурационный файл с учётом сделанных изменений:

# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
# vi /etc/mdadm/mdadm.conf

Переименование массива
Для начала отмонтируйте и остановите массив:

# umount /dev/md0
# mdadm --stop /dev/md0

Затем необходимо пересобрать как md5 каждый из разделов sd[abcdefghijk]1

# mdadm --assemble /dev/md5 /dev/sd[abcdefghijk]1 --update=name
или так

# mdadm --assemble /dev/md5 /dev/sd[abcdefghijk]1 --update=super-minor

Удаление массива
Для начала отмонтируйте и остановите массив:

# umount /dev/md0
# mdadm -S /dev/md0

Затем необходимо затереть superblock каждого из составляющих массива:

# mdadm --zero-superblock /dev/sda1
# mdadm --zero-superblock /dev/sdb2

Если действие выше не помогло, то затираем так:

# dd if=/dev/zero of=/dev/sda1 bs=512 count=1
# dd if=/dev/zero of=/dev/sdb2 bs=512 count=1

Тэги: , ,

Вы должны залогиниттся ,чтобы оставить комментарий.