Особенности обновления системы SpaceVM, установленной на логический диск Intel VROC
Проблема запуска RAID-массива при обновлении системы
В данном случае используется программный RAID контроллер (подробнее о технологии VROC).
При запуске системы SpaceVM, установленной на логический диск Intel VROC, сборка и запуск RAID-массива осуществляется с помощью скриптов в initramfs. При установке SpaceVM версий до 6.5.7 после первой перезагрузки системы запуск массива может не производится, вследствие чего система работает на одном из дисков, входящих в массив, без связи между дисками.
Начальный запуск и ресинхронизация массива производятся на этапе BIOS и инсталлятора системы, а скорость ресинхронизации и перестройки массива ограничена по умолчанию значением 200 Мбайт/с. Поэтому при достаточно большом объёме накопителей, входящих в массив, на момент первой перезагрузки системы массив ещё не полностью проинициализирован, и при следующем запуске в режиме BIOS либо в SpaceVM версии 6.5.7 инициализация продолжится далее.
При начальной загрузке системы SpaceVM в случае, когда массив не запущен, все составляющие массив диски видны загрузчику, а системные разделы на них считываются как равноправные. Если при перезагрузке выбирается один диск, и все изменения записываются на него, то при следующей перезагрузке может быть выбран другой диск, где созданных ранее изменений нет. Это может привести к невозможности загрузки и потере данных.
Чтобы решить данную проблему и корректно обновить систему, необходимо выполнить действия, описанные в разделах ниже.
Обновление системы необходимо проводить последовательно согласно инструкции.
Проверка запуска RAID-массива
После установки и перед обновлением системы необходимо проверить, запустился ли RAID-массив после первой перезагрузки. Если система уже была установлена, то перед ее обновлением также необходимо проверить запуск RAID-массива. В процессе обновления после каждой перезагрузки системы необходимо проверять запуск RAID-массива. Проверка осуществляется командой:
lsblk
Если в полученном результате отображается массив и входящие в него устройства (на примере ниже массив — md126, диски — nvme0n1, nvme1n1) с точками монтирования системных разделов, это значит, что массив собран, обновление можно продолжать. Если при последовательных обновлениях до 6.5.7 не производится перезагрузок, дополнительных действий не требуется.
Пример с собранным массивом
nvme0n1 259:0 0 1,5T 0 disk
├─md126 9:126 0 1,5T 0 raid1
│ ├─md126p1 259:1 0 243M 0 part /boot/efi
│ ├─md126p2 259:2 0 488M 0 part /boot
│ ├─md126p3 259:3 0 3,8G 0 part [SWAP]
│ ├─md126p4 259:4 0 18,6G 0 part /
│ ├─md126p5 259:5 0 74,5G 0 part /var/log
│ └─md126p6 259:6 0 1,3T 0 part /storages/local
├─nvme0n1p1 259:32 0 243M 0 part
├─nvme0n1p2 259:33 0 488M 0 part
├─nvme0n1p3 259:34 0 3,8G 0 part
├─nvme0n1p4 259:35 0 18,6G 0 part
├─nvme0n1p5 259:36 0 74,5G 0 part
└─nvme0n1p6 259:37 0 1,3T 0 part
nvme1n1 259:7 0 1,5T 0 disk
├─md126 9:126 0 1,5T 0 raid1
│ ├─md126p1 259:1 0 243M 0 part /boot/efi
│ ├─md126p2 259:2 0 488M 0 part /boot
│ ├─md126p3 259:3 0 3,8G 0 part [SWAP]
│ ├─md126p4 259:4 0 18,6G 0 part /
│ ├─md126p5 259:5 0 74,5G 0 part /var/log
│ └─md126p6 259:6 0 1,3T 0 part /storages/local
├─nvme1n1p1 259:26 0 243M 0 part
├─nvme1n1p2 259:27 0 488M 0 part
├─nvme1n1p3 259:28 0 3,8G 0 part
├─nvme1n1p4 259:29 0 18,6G 0 part
├─nvme1n1p5 259:30 0 74,5G 0 part
└─nvme1n1p6 259:31 0 1,3T 0 part
Если в полученном результате отображаются точки монтирования системных разделов на физическом устройстве, которое должно входить в массив, но при этом самого массива нет, необходимо выполнить действия, описанные в разделе Алгоритм действий при ошибке запуска RAID-массива.
Пример с отсутствием массива
nvme0n1 259:0 0 1.5T 0 disk
nvme1n1 259:1 0 1.5T 0 disk
├─nvme1n1p1 259:8 0 243M 0 part /boot/efi
├─nvme1n1p2 259:9 0 488M 0 part /boot
├─nvme1n1p3 259:10 0 3.8G 0 part [SWAP]
├─nvme1n1p4 259:11 0 18.6G 0 part /
├─nvme1n1p5 259:12 0 74.5G 0 part /var/log
└─nvme1n1p6 259:13 0 1.3T 0 part /storages/local
Алгоритм действий при ошибке запуска RAID-массива
Проверка локальных устройств
-
Проверить целостность данных на локальном пуле данных, убедиться в работоспособности системы.
Убедиться, что на данном локальном устройстве, в примере выше — nvme1n1, находятся актуальные данные.
-
Создать резервную копию данных с локальных пулов данных.
-
Проверить роль текущего локального активного устройства (команды выполняются в shell). Для обоих устройств массива необходимо выполнить команду:
mdadm -E <device> | grep This\ Slot
Пример: mdadm -E /dev/nvme0n1 | grep This Slot
Если результат содержит слова «out-of-sync», при запуске массива это устройство будет перезаписываться данными с другого.
Запуск RAID-массива
Состояние «out-of-sync» устройства, которое не является текущим загрузочным устройством с актуальными данными
В данном случае необходимо выполнить следующие действия:
-
Стереть данные с устройства, чтобы избежать возможной загрузки данных с него в случае перезагрузки узла, с помощью команды:
blkdiscard -f <device>
Необходимо убедиться, что устройство не содержит актуальных данных. Восстановить данные с устройства будет невозможно.
-
Если команда
blkdiscard -f <device>
завершается с ошибкой «device is busy», может быть запущен контейнер IMSM (хранилище метаданных VROC). В этом можно убедиться при помощи команды:cat /proc/mdstat
-
Если результат указывает на принадлежность устройства к массиву контейнера, последний необходимо остановить. Например, устройство nvme0n1 занято массивом md127:
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md127 : inactive nvme0n1[0](S) 5201 blocks super external:imsm
- Необходимо остановить массив контейнера командой:
mdadm --stop md127
- Повторить стирание данных с устройства командой:
blkdiscard -f <device>
- Перезагрузить систему.
- Убедиться, что RAID VROC запущен, при помощи команды
lsblk
(системные разделы должны быть на md-устройстве, обычно на md126). Массив будет запущен в деградированном режиме, на одном устройстве. - Необходимо добавить второе устройство (допустим, в массив /dev/md/imsm0 добавить /dev/nvme1n1) с помощью команды:
mdadm --add /dev/md/imsm0 /dev/nvme1n1
- Убедиться, что массив собран из двух устройств и пересобирается. Для этого необходимо выполнить команду:
cat /proc/mdstat
- Скорость пересборки по умолчанию 200 Мбайт/с. Её можно изменить с помощью команды, например, для массива md126 и желаемой скорости 4 Гбайт/с:
echo 4000000 > /sys/block/md126/md/sync_speed_max
Состояние «out-of-sync» устройства, которое является текущим загрузочным устройством с актуальными данными
Если устройство в состоянии «out-of-sync» является текущим загрузочным устройством (допустим, это устройство /dev/nvme1n1), следует полностью пересобрать массив из Live Mode установочного CD-ROM.
Для этого необходимо выполнить следующие действия:
-
Провести стирание данных с устройства с неактуальными данными (в примере это /dev/nvme0n1) для предотвращения перезаписи актуальных данных с него при перезагрузке. Для этого выполнить команду:
Необходимо убедиться, что устройство не содержит актуальных данных. Восстановить данные с устройства будет невозможно.blkdiscard -f <device>
-
Удалить метаданные VROC с актуального устройства командой:
mdadm --zero-superblock /dev/nvme1n1
-
Провести загрузку с установочного CD-ROM в Live Mode.
- Убедиться, какое устройство с точки зрения Live системы имеет системную таблицу разделов с помощью команды
lsblk
. - Скопировать его содержимое на пустое устройство, чтобы не потерять данные при начальной инициализации массива (происходит синхронизация
данных между устройствами). Например, если с разделами устройство /dev/nvme1n1, а пустое — /dev/nvme0n1, то следует
выполнить и дождаться завершения команды:
dd if=/dev/nvme1n1 of=/dev/nvme0n1 bs=1M status=progress
- Cоздать новый контейнер VROC, указав оба устройства:
mdadm -C /dev/md/imsm0 /dev/nvme1n1 /dev/nvme0n1 --raid-devices=2 --metadata=imsm0`
- Cоздать новый массив типа RAID1 из устройств контейнера:
mdadm --create /dev/md/Volume0 /dev/md/imsm0 --raid-devices=2 --level=1
- Настроить
mdadm
в initramfs SpaceVM. В конфигурации указан UUID массива, который следует собрать при старте системы. У пересобранного массива UUID другой, поэтому без дополнительной настройки массив не соберётся при старте. Для настройки необходимо:- Создать временную точку монтирования и смонтировать туда корневой раздел SpaceVM: (например, раздел находится на /dev/md126p4) с помощью команды:
mkdir /mnt/root; mount /dev/md126p4 /mnt/root
- Cкопировать текущую конфигурацию массива в конфиг
mdadm
командой:mdadm -Ebs > /mnt/root/etc/mdadm.conf
- Выполнить
chroot
в смонтированный корневой каталог и пересобрать там initramfs (например, каталог /boot SpaceVM находится на разделе /dev/md126p2):1. mount /dev/md126p2 /mnt/root/boot 2. mount --bind /dev/pty /mnt/root/pty 3. mount --bind /sys /mnt/root/sys 4. mount --bind /proc /mnt/root/proc 5. chroot /mnt/root /bin/sh 6. update-initramfs -u
- Выйти из
chroot
, перезагрузить систему.
- Создать временную точку монтирования и смонтировать туда корневой раздел SpaceVM: (например, раздел находится на /dev/md126p4) с помощью команды:
- Убедиться, что RAID VROC запущен при помощи команды
lsblk
(системные разделы должны быть на md-устройстве, обычно на md126).