Особенности обновления системы 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).