10 из 15 конфигураций серверов в наличииМгновенная выдачаБез платы за установку

Диски и RAID

Управление программным RAID 1 с помощью mdadm

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

7 мин чтенияОбновлено UbuntuDebianAlmaLinuxRocky Linux

Применимо к
UbuntuDebianAlmaLinuxRocky Linux
Время чтения
7 минут
Обновлено

Не получается? Инженеры отвечают 24/7

На этой странице

На серверах с двумя дисками DediJet при установке операционной системы по умолчанию настраивает программный RAID 1 (вместо него при установке можно выбрать RAID 0 или вариант без RAID). mdadm в Linux зеркалирует каждую запись на оба диска, поэтому, если один из них выйдет из строя, сервер продолжит работать. В этом руководстве показано, как проверять массив, получать оповещения, заменить вышедший из строя диск и обеспечить загрузку с обоих дисков.

RAID — не резервная копия. Удаленный файл, неудачная миграция или работа шифровальщика мгновенно зеркалируются на оба диска. Храните копии важных данных в другой системе — например, подключите дополнительную услугу «Место для резервных копий» (SFTP, rsync, BorgBackup или restic, от $5/мес. за 1 ТБ).

Как размечены ваши диски

На обоих дисках одинаковые разделы, и соответствующие разделы попарно объединены в массивы md. Посмотреть их можно командой:

Shell
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT

Точная разметка зависит от образа ОС. Типичная установка с UEFI на два NVMe-накопителя выглядит так:

Вывод
NAME          SIZE TYPE  MOUNTPOINT
nvme0n1     931.5G disk
├─nvme0n1p1   512M part  /boot/efi
├─nvme0n1p2     1G part
│ └─md0      1022M raid1 /boot
└─nvme0n1p3   930G part
  └─md1     929.3G raid1 /
nvme1n1     931.5G disk
├─nvme1n1p1   512M part
├─nvme1n1p2     1G part
│ └─md0      1022M raid1 /boot
└─nvme1n1p3   930G part
  └─md1     929.3G raid1 /
  • Имена NVMe: nvme0n1 — это контроллер 0, пространство имен 1, а к именам его разделов добавляется p: nvme0n1p1. Диски SATA и SAS называются sda, sdb, а их разделы — sda1, sda2. Номера контроллеров могут меняться между загрузками, поэтому определяйте диск по серийному номеру и никогда — только по имени.
  • Системный раздел EFI (ESP): прошивка читает его напрямую и ничего не знает о mdadm, поэтому на серверах с UEFI он обычно находится вне массивов. В /boot/efi смонтирован только ESP первого диска; синхронизировать вторую копию — ваша задача (см. последний раздел этого руководства).

Проверьте состояние массива

Shell
cat /proc/mdstat

Исправное зеркало показывает [2/2] [UU]: ожидаются два компонента, и оба работают.

Вывод
md1 : active raid1 nvme1n1p3[1] nvme0n1p3[0]
      974452736 blocks super 1.2 [2/2] [UU]
      bitmap: 2/8 pages [8KB], 65536KB chunk

Деградировавшее зеркало показывает [2/1] и подчеркивание на месте отсутствующего компонента: [U_] или [_U]. Чтобы узнать, какой компонент отказал:

Shell
mdadm --detail /dev/md1
Вывод
             State : clean, degraded
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 1

    Number   Major   Minor   RaidDevice State
       0     259        3        0      active sync   /dev/nvme0n1p3
       -       0        0        1      removed

       1     259        7        -      faulty   /dev/nvme1n1p3

Кроме того, большинство дистрибутивов планируют периодическую проверку согласованности массивов. Пока она идет, /proc/mdstat показывает check с индикатором выполнения: это нормально, проверка выполняется с низким приоритетом.

Получайте письмо при отказе диска

Служба mdmonitor следит за всеми массивами и отправляет письмо, когда отказывает компонент или массив переходит в деградированное состояние. Укажите получателя в /etc/mdadm/mdadm.conf (Debian, Ubuntu) или /etc/mdadm.conf (AlmaLinux, Rocky Linux):

Конфигурация
MAILADDR root

Перенаправьте почту root в свой почтовый ящик с помощью алиаса в /etc/aliases. mdadm передает сообщение /usr/sbin/sendmail, поэтому на сервере нужен почтовый агент (MTA): Postfix или небольшой релей вроде msmtp, который отправляет почту через вашего почтового провайдера. Перезапустите мониторинг, затем отправьте тестовое оповещение для каждого массива:

Shell
systemctl restart mdmonitor
mdadm --monitor --scan --oneshot --test

Предпочитаете оповещения в чат или через систему дежурств? Строка PROGRAM /usr/local/bin/raid-alert в том же файле запускает ваш скрипт при каждом событии (скрипт получает имя события, массив и устройство-компонент). Если у вас уже работает Prometheus, node_exporter отдает состояние массива в своих метриках node_md_*.

Замените вышедший из строя диск

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

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

  1. Запишите серийные номера вышедшего из строя и исправного дисков. Если вышедший из строя диск полностью пропал из системы, достаточно серийного номера исправного.

    Shell
    lsblk -d -o NAME,SIZE,MODEL,SERIAL
    smartctl -i /dev/nvme1n1
  2. Удалите отказавшие разделы из массивов (пропустите те, что уже помечены как удаленные):

    Shell
    mdadm --manage /dev/md0 --fail /dev/nvme1n1p2 --remove /dev/nvme1n1p2
    mdadm --manage /dev/md1 --fail /dev/nvme1n1p3 --remove /dev/nvme1n1p3
  3. Создайте тикет. Укажите серийный номер диска, который нужно заменить, серийный номер диска, который нужно оставить, и вывод cat /proc/mdstat и smartctl -a для неисправного диска. Согласно нашему SLA, неисправный компонент заменяется в течение 4 часов после диагностики, 24/7. В зависимости от корпуса для замены может потребоваться кратковременное выключение сервера: согласуйте временное окно в тикете.

  4. Скопируйте таблицу разделов на новый диск, когда его установят (пакет gdisk). Сначала проверьте имя и серийный номер нового диска с помощью lsblk. В случае GPT (обычный вариант) --replicate указывает новый диск, а последний аргумент — исправный диск-источник. Затем присвойте копии собственные GUID:

    Shell
    sgdisk --replicate=/dev/nvme1n1 /dev/nvme0n1
    sgdisk --randomize-guids /dev/nvme1n1

    Для старых дисков с MBR (lsblk -o NAME,PTTYPE показывает dos) используйте вместо этого sfdisk -d /dev/nvme0n1 | sfdisk /dev/nvme1n1.

  5. Добавьте новые разделы в массивы. Перестроение начнется сразу:

    Shell
    mdadm --manage /dev/md0 --add /dev/nvme1n1p2
    mdadm --manage /dev/md1 --add /dev/nvme1n1p3
  6. Следите за перестроением. Все это время сервером можно пользоваться, но дисковый ввод-вывод будет медленнее.

    Shell
    watch -n 5 cat /proc/mdstat
    Вывод
    md1 : active raid1 nvme1n1p3[2] nvme0n1p3[0]
          974452736 blocks super 1.2 [2/1] [U_]
          [====>................]  recovery = 22.5% (219351680/974452736) finish=62.9min speed=200000K/sec

    Ядро держит скорость перестроения в пределах от dev.raid.speed_limit_min до dev.raid.speed_limit_max (КиБ/с на диск). Именно верхний предел по умолчанию — 200000 КиБ/с (около 200 МБ/с) — виден в примере выше. На простаивающем сервере с NVMe его можно временно поднять с помощью sysctl -w dev.raid.speed_limit_max=2000000.

Обеспечьте загрузку с обоих дисков

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

Shell
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS

Legacy BIOS

Установите GRUB на новый диск: grub-install /dev/nvme1n1 в Debian и Ubuntu (затем выполните dpkg-reconfigure grub-pc и выберите оба диска, чтобы будущие обновления попадали на оба) или grub2-install /dev/nvme1n1 в AlmaLinux и Rocky Linux.

UEFI

  1. Отформатируйте и заполните второй ESP (пакеты dosfstools и rsync):

    Shell
    mkfs.vfat -F 32 /dev/nvme1n1p1
    mkdir -p /mnt/esp2
    mount /dev/nvme1n1p1 /mnt/esp2
    rsync -rt --delete /boot/efi/ /mnt/esp2/
    umount /mnt/esp2
  2. Добавьте в прошивку загрузочную запись для этого диска. Выведите существующие записи с помощью efibootmgr -v и используйте путь к загрузчику вашей ОС, например \EFI\ubuntu\shimx64.efi, \EFI\debian\shimx64.efi или \EFI\almalinux\shimx64.efi:

    Shell
    efibootmgr --create --disk /dev/nvme1n1 --part 1 --label "Linux (disk 2)" --loader '\EFI\ubuntu\shimx64.efi'
  3. Синхронизируйте ESP после обновлений загрузчика. ESP меняется редко, в основном при обновлении пакетов GRUB или shim: повторяйте шаг с rsync после таких обновлений или запускайте его по cron. В Ubuntu dpkg-reconfigure grub-efi-amd64 может зарегистрировать оба ESP, чтобы обновления GRUB записывались на каждый из них.

  4. Добавьте nofail в строку /boot/efi в /etc/fstab (например, umask=0077,nofail). Без этого сервер, у которого отказал первый диск, может остановиться в аварийном режиме, потому что не сможет смонтировать ESP этого диска.

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

Если сервер не загружается

Откройте консоль IPMI, чтобы увидеть, где останавливается загрузка; в загрузочном меню прошивки можно выбрать другой диск. Если это не помогло, запустите режим восстановления из личного кабинета, соберите массивы и восстановите систему оттуда:

Shell
mdadm --assemble --scan
cat /proc/mdstat

Следующие шаги

Нужна помощь?

Клиенты с активным сервером создают тикеты в личном кабинете, а отвечают на них инженеры 24/7.

Как работает поддержка