Настройка программного 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»

Решение предупреждения «mismatch_cnt is not 0 on /dev/md*»

Заменил однажды нерабочий диск в программном RAID1, добавил его в рейд, он успешно синхронизировался, установил GRUB.
Через некоторое время получил email сообщение:

Subject: Cron <root@server> /usr/sbin/raid-check
WARNING: mismatch_cnt is not 0 on /dev/md2

В моем случае raid-check обнаружил что счетчик mismatch_cnt не равняется 0 для /dev/md2, а это может говорить о том что на диске возможно есть битые сектора, либо его просто нужно пересинхронизировать. Так как я установил GRUB после добавления диска в рейд, то это скорее и является причиной.

Пример просмотра счётчиков всех массивов:

cat /sys/block/md*/md/mismatch_cnt

Или каждого по очереди:

cat /sys/block/md0/md/mismatch_cnt
cat /sys/block/md1/md/mismatch_cnt
cat /sys/block/md2/md/mismatch_cnt

Просмотр состояния рейдов:

cat /sys/block/md*/md/sync_action

Если mismatch_cnt не равно 0 для какого либо массива, то можно попробовать его ресинхронизировать:

echo 'repair' >/sys/block/md2/md/sync_action

И проверить:

echo 'check' >/sys/block/md2/md/sync_action

Если понадобится отменить действие:

echo 'idle' >/sys/block/md2/md/sync_action

Посмотрим статус синхронизации и прочие данные массива:

cat /proc/mdstat

Если ошибки появляются из-за плохого диска, рекомендую посмотреть SMART и проверить его как я писал в этих статьях:
Диагностика HDD используя smartmontools
Тест диска в Linux на наличие ошибок и битых секторов

Смотрите также:
Решение проблемы с выпавшими дисками 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 (hd0 это /dev/sda, hd0,1 — /dev/sda2):

cat /boot/grub/device.map
grub
device (hd0) /dev/sda
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 как я писал выше.

Смотрите также другие мои статьи:
Как я делал заявку в Hetzner на замену диска в рейде
Решение ошибки «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).

Читать далее «Создание RAID при установке Ubuntu»

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

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

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

Читать далее «mdadm — утилита управления программными RAID массивами»

Описание типов RAID

Массивы RAID необходимы для повышения надежности хранения данных и для увеличения скорости работы с дисками путем объединения нескольких дисков в один большой. RAID массивы могут быть как аппаратные, аппаратно-программные так и программные.

Читать далее «Описание типов RAID»