Перейти к содержанию

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

Проверка локальных устройств

  1. Проверить целостность данных на локальном пуле данных, убедиться в работоспособности системы.

    Убедиться, что на данном локальном устройстве, в примере выше — nvme1n1, находятся актуальные данные.

  2. Создать резервную копию данных с локальных пулов данных.

  3. Проверить роль текущего локального активного устройства (команды выполняются в shell). Для обоих устройств массива необходимо выполнить команду:

    mdadm -E <device> | grep This\ Slot
    

    Пример: mdadm -E /dev/nvme0n1 | grep This Slot

Если результат содержит слова «out-of-sync», при запуске массива это устройство будет перезаписываться данными с другого.

Запуск RAID-массива

Состояние «out-of-sync» устройства, которое не является текущим загрузочным устройством с актуальными данными

В данном случае необходимо выполнить следующие действия:

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

    blkdiscard -f <device>
    

    Необходимо убедиться, что устройство не содержит актуальных данных. Восстановить данные с устройства будет невозможно.

  2. Если команда blkdiscard -f <device> завершается с ошибкой «device is busy», может быть запущен контейнер IMSM (хранилище метаданных VROC). В этом можно убедиться при помощи команды:

    cat /proc/mdstat
    

  3. Если результат указывает на принадлежность устройства к массиву контейнера, последний необходимо остановить. Например, устройство nvme0n1 занято массивом md127:

    Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]                                                                           
    md127 : inactive nvme0n1[0](S)                                                  
        5201 blocks super external:imsm
    

  4. Необходимо остановить массив контейнера командой:
    mdadm --stop md127
    
  5. Повторить стирание данных с устройства командой:
    blkdiscard -f <device>            
    
  6. Перезагрузить систему.
  7. Убедиться, что RAID VROC запущен, при помощи команды lsblk (системные разделы должны быть на md-устройстве, обычно на md126). Массив будет запущен в деградированном режиме, на одном устройстве.
  8. Необходимо добавить второе устройство (допустим, в массив /dev/md/imsm0 добавить /dev/nvme1n1) с помощью команды:
    mdadm --add /dev/md/imsm0 /dev/nvme1n1
    
  9. Убедиться, что массив собран из двух устройств и пересобирается. Для этого необходимо выполнить команду:
    cat /proc/mdstat
    
  10. Скорость пересборки по умолчанию 200 Мбайт/с. Её можно изменить с помощью команды, например, для массива md126 и желаемой скорости 4 Гбайт/с:
    echo 4000000 > /sys/block/md126/md/sync_speed_max
    

Состояние «out-of-sync» устройства, которое является текущим загрузочным устройством с актуальными данными

Если устройство в состоянии «out-of-sync» является текущим загрузочным устройством (допустим, это устройство /dev/nvme1n1), следует полностью пересобрать массив из Live Mode установочного CD-ROM.

Для этого необходимо выполнить следующие действия:

  1. Провести стирание данных с устройства с неактуальными данными (в примере это /dev/nvme0n1) для предотвращения перезаписи актуальных данных с него при перезагрузке. Для этого выполнить команду:

    blkdiscard -f <device>
    
    Необходимо убедиться, что устройство не содержит актуальных данных. Восстановить данные с устройства будет невозможно.

  2. Удалить метаданные VROC с актуального устройства командой:

    mdadm --zero-superblock /dev/nvme1n1
    

  3. Провести загрузку с установочного CD-ROM в Live Mode.

  4. Убедиться, какое устройство с точки зрения Live системы имеет системную таблицу разделов с помощью команды lsblk.
  5. Скопировать его содержимое на пустое устройство, чтобы не потерять данные при начальной инициализации массива (происходит синхронизация данных между устройствами). Например, если с разделами устройство /dev/nvme1n1, а пустое — /dev/nvme0n1, то следует выполнить и дождаться завершения команды:
    dd if=/dev/nvme1n1 of=/dev/nvme0n1 bs=1M status=progress
    
  6. Cоздать новый контейнер VROC, указав оба устройства:
    mdadm -C /dev/md/imsm0 /dev/nvme1n1 /dev/nvme0n1 --raid-devices=2 --metadata=imsm0`
    
  7. Cоздать новый массив типа RAID1 из устройств контейнера:
    mdadm --create /dev/md/Volume0 /dev/md/imsm0 --raid-devices=2 --level=1
    
  8. Настроить 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, перезагрузить систему.
  9. Убедиться, что RAID VROC запущен при помощи команды lsblk (системные разделы должны быть на md-устройстве, обычно на md126).