Настройка программного RAID1 на работающей системе Ubuntu

Приведу пример миграции работающей системы Ubuntu на программный RAID1.
В процессе необходимо будет выполнить две перезагрузки.

Первым делом переключимся на root пользователя если еще не под ним:

sudo -i

Посмотрим список дисков и разделов:

fdisk -l
fdisk -l | grep '/dev/sd'
lsblk -o NAME,UUID

Предположим что в системе используется один диск, например /dev/sda и имеет один основной раздел /dev/sda1.
Для теста установил чистый Ubuntu Server 18.04, диск так был размечен по умолчанию, swap был файлом на этом же разделе.

Чтобы создать рейд, подключим еще один диск такого же размера, он будет называться /dev/sdb.

Читать далее Настройка программного RAID1 на работающей системе Ubuntu

Решение ошибки «md: kicking non-fresh sda1 from array»

Был когда-то случай, выпал из рейда один диск и при загрузке сервера в логах отображалось сообщение:

md: kicking non-fresh sda1 from array

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

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

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

Вернул его обратно в рейд:

mdadm /dev/md0 -a /dev/sda1

Спустя некоторое время данные синхронизировались на диск и ошибка больше не появлялась.

Смотрите также:
Диагностика HDD используя smartmontools
mdadm — утилита управления программными RAID массивами
Решение проблемы с выпавшими дисками mdadm

Решение проблемы с выпавшими дисками mdadm

Получил сегодня от одного из серверов на Hetzner три email сообщения с информацией о рейдах md0, md1, md2:

DegradedArray event on /dev/md/0:example.com
This is an automatically generated mail message from mdadm
running on example.com
A DegradedArray event had been detected on md device /dev/md/0.
Faithfully yours, etc.
P.S. The /proc/mdstat file currently contains the following:
Personalities : [raid6] [raid5] [raid4] [raid1]
md2 : active raid6 sdb3[1] sdd3[3]
208218112 blocks super 1.0 level 6, 512k chunk, algorithm 2 [4/2] [_U_U]
md1 : active raid1 sdb2[1] sdd2[3]
524224 blocks super 1.0 [4/2] [_U_U]
md0 : active raid1 sdb1[1] sdd1[3]
12582784 blocks super 1.0 [4/2] [_U_U]
unused devices:

Посмотрел информацию о RAID и дисках:

cat /proc/mdstat
cat /proc/partitions
mdadm --detail /dev/md0
mdadm --detail /dev/md1
mdadm --detail /dev/md2
fdisk -l | grep '/dev/sd'
fdisk -l | less

Собрался отправить тикет в техподдержку и запланировать замену выпавших SSD дисков.
Записал SMART информацию о выпавших дисках в файлы, там же был их серийный номер:

smartctl -x /dev/sda > sda.log
smartctl -x /dev/sdc > sdc.log

Удалить диски из рейда если что можно так:

mdadm /dev/md0 -r /dev/sda1
mdadm /dev/md1 -r /dev/sda2
mdadm /dev/md2 -r /dev/sda3

mdadm /dev/md0 -r /dev/sdc1
mdadm /dev/md1 -r /dev/sdc2
mdadm /dev/md2 -r /dev/sdc3

Если какой-то раздел диска отображается как рабочий, а диск нужно извлечь, то сначала помечаем раздел не рабочим и потом удаляем, например если /dev/sda1, /dev/sda2 выпали, а /dev/sda3 работает:

mdadm /dev/md0 -f /dev/sda3
mdadm /dev/md0 -r /dev/sda3

В моем случае, посмотрев информацию о выпавших дисках обнаружил что они целые и рабочие, даже лучше активных.

Посмотрел разделы дисков:

fdisk /dev/sda
p
q
fdisk /dev/sdc
p
q

Они были размечены одинаково как и прежде:

Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00015e3f
Device Boot Start End Blocks Id System
/dev/sda1 1 1567 12582912+ fd Linux raid autodetect
/dev/sda2 1567 1633 524288+ fd Linux raid autodetect
/dev/sda3 1633 14594 104109528+ fd Linux raid autodetect

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

mdadm /dev/md0 -a /dev/sda1
mdadm /dev/md1 -a /dev/sda2
mdadm /dev/md2 -a /dev/sda3

mdadm /dev/md0 -a /dev/sdc1
mdadm /dev/md1 -a /dev/sdc2
mdadm /dev/md2 -a /dev/sdc3

По окончании команда cat /proc/mdstat уже отображалась с [UUUU].

Если диски заменили новыми, то их нужно разбить аналогично установленным.
Пример разметки диска /dev/sdb аналогично /dev/sda с MBR:

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

Пример разметки /dev/sdb с GTP и назначения диску случайного UUID:

sgdisk -R /dev/sdb /dev/sda
sgdisk -G /dev/sdb

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

grub-install --version
grub-install /dev/sdb
update-grub

Либо через меню grub:

cat /boot/grub/device.map
grub
device (hd0) /dev/sdb
root (hd0,1)
setup (hd0)
quit

Если установка grub выполняется из загрузочного диска, то нужно посмотреть список разделов и выполнить монтирование, например если RAID не используется:

ls /dev/[hsv]d[a-z]*[0-9]*
mount /dev/sda3 /mnt

Если используется программный RAID:

ls /dev/md*
mount /dev/md2 /mnt

Либо LVM:

ls /dev/mapper/*
mount /dev/mapper/vg0-root /mnt

И выполнить chroot:

chroot-prepare /mnt
chroot /mnt

После монтирования можно восстанавливать GRUB как я писал выше.

Смотрите также другие мои статьи:
Решение ошибки «md: kicking non-fresh sda1 from array»
Решение предупреждения «mismatch_cnt is not 0 on /dev/md*»
mdadm — утилита управления программными RAID массивами
Описание типов RAID
Диагностика HDD используя smartmontools
Восстановление GRUB Linux

Создание RAID при установке Ubuntu

На тесте при установке Ubuntu Server 14.04 LTS создам программный RAID1.
Замечу что, при создании RAID будет автоматически использоваться mdadm.
Подключу к серверу два одинаковых диска (аналогично можно попробовать создать RAID на виртуальной машине например созданной в VirtualBox).

И так, начинаем установку Ubuntu Server, доходим до этапа разметки дисков в котором выберем метод разметки «вручную«.
Выберем первый диск и согласимся «Создать новую пустую таблицу разделов на этом устройстве«, потом аналогично сделаем со вторым.

Вверху появится «Настройка программного RAID«, выберем, согласимся записать изменения на диске которые делали выше.

Выберем «Создать MD устройство»
Далее тип устройства программного RAID, в моем случае RAID1.

Укажем что Активных 2, и резервных 0.
Выберем активные, согласимся сохранить изменения, и жмем «Закончить»

Далее выберем «Автоматическая разметка» и «Авто — Использовать весь диск«, диск для разметки выберем RAID.
Далее выберем «Закончить разметку и записать изменения на диск«, в следующем окне соглашаемся записать изменения.

Все, процесс установки системы продолжится как обычно, но уже на RAID.
В конце установки загрузчик установится на оба диска.

Рекомендую посмотреть статью — mdadm — утилита управления программными RAID массивами.

Смотрите мое видео:

mdadm — утилита управления программными RAID массивами

Рекомендую прочитать мою статью Описание типов RAID.

Установить mdadm в Ubuntu можно командой:

sudo aptitude install mdadm

В CentOS:

yum install mdadm

На тесте соберу RAID в Ubuntu 14.04, сразу переключусь на root пользователя (далее команды пойдут аналогичны для других операционных систем):

sudo -i

В начале посмотрим список дисков командами (у меня их два несмонтированых одинакового размера /dev/sdb и /dev/sdc):

fdisk -l
df -h
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

Создадим RAID 1:

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

Проверить статус массива и его компонентов можно командами:

cat /proc/mdstat
mdadm --detail /dev/md0
mdadm -E /dev/sdb
mdadm -E /dev/sdc

Создадим файловую систему:

mkfs.ext4 -F /dev/md0

Чтобы примонтировать созданный RAID к текущей системе, создадим директорию и выполним монтирование в нее:

mkdir -p /mnt/md0
mount /dev/md0 /mnt/md0

Посмотрим детали RAID:

mdadm --verbose --detail --scan

Сохраним изменения:

mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
update-initramfs -u
echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | tee -a /etc/fstab

Все, после перезагрузки системы, RAID будет автоматически смонтирован.

Чтобы получать уведомления на электронную почту о состоянии RAID, в файле конфигурации mdadm.conf укажем на какой адрес слать и с какого (чтобы почта отправлялась в системе должен быть установлен например postfix):

MAILADDR email@example.com
MAILFROM mdadm@example.com

Перезапустим сервис мониторинга:

service mdadm restart

Можно настроить некоторые параметры ответив на вопросы командой:

dpkg-reconfigure mdadm

Смотрите также:
Решение проблемы с выпавшими дисками mdadm
Настройка программного RAID1 на работающей системе Ubuntu