Записки системного администратора

Ещё один блог о системном администрировании, операционных системах, СУБД, сетях, костылях-велосипедах и пр.

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

В данной заметке будет описан процесс создания программного raid1 массива на уже установленной и работающей системе CentOS7. Также настроим загрузчик grub таким образом, чтобы при выходе из строя одного из дисков система всеравно запустилась.

Об этой теме в интернете написано довольно много и рассмотрена она на многих ресурсах (вот тут даже на Хабре есть описание), но я решил описать этот процесс здесь, чтобы потом долго не искать, если вдруг что-то забуду. Создаваться массив будет с помощью утилиты mdadm, в конце заметки будут даны несколько примеров ее использования.

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

  1. Диск /dev/sda, на котором имеются следующие разделы:
    • /dev/sda1 - раздел / с файловой системой ext4
    • /dev/sda2 - swap
    • /dev/sda3 - раздел /opt с файловой системой ext4
  2. Абсолютно чистый /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 -axu / /mnt/md0

# rsync -axu /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

Комментарии (RSS)

Комментарий ожидает проверки

Линуксовый:

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

Комментарий ожидает проверки

HTML Preview:

Коротко о себе:

Привет! Меня зовут Вадим. В этом блоге я пишу об интересующих меня вещах, о проблемах, с которыми сталкиваюсь во время работы, и о путях их решения.

Связаться со мной можно, написав письмо на адрес vadim@adminbook.click