На этой странице
На серверах с двумя дисками DediJet при установке операционной системы по умолчанию настраивает программный RAID 1 (вместо него при установке можно выбрать RAID 0 или вариант без RAID). mdadm в Linux зеркалирует каждую запись на оба диска, поэтому, если один из них выйдет из строя, сервер продолжит работать. В этом руководстве показано, как проверять массив, получать оповещения, заменить вышедший из строя диск и обеспечить загрузку с обоих дисков.
RAID — не резервная копия. Удаленный файл, неудачная миграция или работа шифровальщика мгновенно зеркалируются на оба диска. Храните копии важных данных в другой системе — например, подключите дополнительную услугу «Место для резервных копий» (SFTP, rsync, BorgBackup или restic, от
Как размечены ваши диски
На обоих дисках одинаковые разделы, и соответствующие разделы попарно объединены в массивы md. Посмотреть их можно командой:
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 первого диска; синхронизировать вторую копию — ваша задача (см. последний раздел этого руководства).
Проверьте состояние массива
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]. Чтобы узнать, какой компонент отказал:
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, который отправляет почту через вашего почтового провайдера. Перезапустите мониторинг, затем отправьте тестовое оповещение для каждого массива:
systemctl restart mdmonitor
mdadm --monitor --scan --oneshot --testПредпочитаете оповещения в чат или через систему дежурств? Строка PROGRAM /usr/local/bin/raid-alert в том же файле запускает ваш скрипт при каждом событии (скрипт получает имя события, массив и устройство-компонент). Если у вас уже работает Prometheus, node_exporter отдает состояние массива в своих метриках node_md_*.
Замените вышедший из строя диск
В примере предполагается, что из строя вышел nvme1n1, а nvme0n1 исправен. Подставьте свои имена и перечитывайте каждую команду дважды.
Сначала сделайте резервную копию. Пока перестроение не завершится, у деградировавшего зеркала нет избыточности: если откажет оставшийся диск, данные будут потеряны. Перед началом скопируйте все, что нельзя потерять, и ни в коем случае не направляйте эти команды на исправный диск.
Запишите серийные номера вышедшего из строя и исправного дисков. Если вышедший из строя диск полностью пропал из системы, достаточно серийного номера исправного.
lsblk -d -o NAME,SIZE,MODEL,SERIAL smartctl -i /dev/nvme1n1Удалите отказавшие разделы из массивов (пропустите те, что уже помечены как удаленные):
mdadm --manage /dev/md0 --fail /dev/nvme1n1p2 --remove /dev/nvme1n1p2 mdadm --manage /dev/md1 --fail /dev/nvme1n1p3 --remove /dev/nvme1n1p3Создайте тикет. Укажите серийный номер диска, который нужно заменить, серийный номер диска, который нужно оставить, и вывод
cat /proc/mdstatиsmartctl -aдля неисправного диска. Согласно нашему SLA, неисправный компонент заменяется в течение 4 часов после диагностики, 24/7. В зависимости от корпуса для замены может потребоваться кратковременное выключение сервера: согласуйте временное окно в тикете.Скопируйте таблицу разделов на новый диск, когда его установят (пакет
gdisk). Сначала проверьте имя и серийный номер нового диска с помощьюlsblk. В случае GPT (обычный вариант)--replicateуказывает новый диск, а последний аргумент — исправный диск-источник. Затем присвойте копии собственные GUID:sgdisk --replicate=/dev/nvme1n1 /dev/nvme0n1 sgdisk --randomize-guids /dev/nvme1n1Для старых дисков с MBR (
lsblk -o NAME,PTTYPEпоказываетdos) используйте вместо этогоsfdisk -d /dev/nvme0n1 | sfdisk /dev/nvme1n1.Добавьте новые разделы в массивы. Перестроение начнется сразу:
mdadm --manage /dev/md0 --add /dev/nvme1n1p2 mdadm --manage /dev/md1 --add /dev/nvme1n1p3Следите за перестроением. Все это время сервером можно пользоваться, но дисковый ввод-вывод будет медленнее.
watch -n 5 cat /proc/mdstatmd1 : 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.
Обеспечьте загрузку с обоих дисков
Теперь данные снова зеркалируются, но загрузчик находится вне массивов. Проверьте, как загружается сервер:
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOSLegacy BIOS
Установите GRUB на новый диск: grub-install /dev/nvme1n1 в Debian и Ubuntu (затем выполните dpkg-reconfigure grub-pc и выберите оба диска, чтобы будущие обновления попадали на оба) или grub2-install /dev/nvme1n1 в AlmaLinux и Rocky Linux.
UEFI
Отформатируйте и заполните второй ESP (пакеты
dosfstoolsиrsync):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Добавьте в прошивку загрузочную запись для этого диска. Выведите существующие записи с помощью
efibootmgr -vи используйте путь к загрузчику вашей ОС, например\EFI\ubuntu\shimx64.efi,\EFI\debian\shimx64.efiили\EFI\almalinux\shimx64.efi:efibootmgr --create --disk /dev/nvme1n1 --part 1 --label "Linux (disk 2)" --loader '\EFI\ubuntu\shimx64.efi'Синхронизируйте ESP после обновлений загрузчика. ESP меняется редко, в основном при обновлении пакетов GRUB или shim: повторяйте шаг с
rsyncпосле таких обновлений или запускайте его по cron. В Ubuntudpkg-reconfigure grub-efi-amd64может зарегистрировать оба ESP, чтобы обновления GRUB записывались на каждый из них.Добавьте
nofailв строку/boot/efiв/etc/fstab(например,umask=0077,nofail). Без этого сервер, у которого отказал первый диск, может остановиться в аварийном режиме, потому что не сможет смонтировать ESP этого диска.
Для проверки один раз выберите второй диск в загрузочном меню прошивки через консоль IPMI.
Если сервер не загружается
Откройте консоль IPMI, чтобы увидеть, где останавливается загрузка; в загрузочном меню прошивки можно выбрать другой диск. Если это не помогло, запустите режим восстановления из личного кабинета, соберите массивы и восстановите систему оттуда:
mdadm --assemble --scan
cat /proc/mdstatСледующие шаги
- Выявляйте сбоящие диски до того, как они выпадут из массива: проверяйте состояние дисков с помощью smartctl и nvme-cli.
- Защитите то, от чего RAID не спасает: подключите место для резервных копий и проверьте восстановление.
- Застряли посреди замены диска? Обратитесь в поддержку: аппаратными проблемами занимаются инженеры, 24/7.