Общие сведения

Блочная технология хранения с использованием LVM обеспечивает возможность использования LVM-томов вместо обычных файлов образов в системном хранилище. При этом нет необходимости в организации файловой системы.

В ПК СВ поддерживаются внешние хранилища, построенные базе технологии SAN (Storage Area Network – сеть хранения данных), которая обеспечивает доступ к данным на уровне блочных устройств.

При настройке внешнего хранилища необходимо руководствоваться инструкциями производителя оборудования.

В Astra Linux обеспечивается полнофункциональное управление томами LVM, дополнительная настройка не требуется.  

В ПК СВ для хранилища LVM не требуется настройка кластерного управления логическими томами (CLVM) в кластере. Драйверы хранилищ обновляют метаданные LVM каждый раз, когда образ требуется на другом узле виртуализации.

Пример подключения внешнего хранилища SAN по протоколу iSCSI

В данном примере описан процесс настройки сервера, предоставляющего блочные данные по протоколу iSCSI (программная СХД). Сетевые блочные устройства (iSCSI-target), предоставляемые этим сервером, будут подключены в качестве локальных блочных устройств на другом сервере (iSCSI-initiator).

Особенности использования SAN в ПК СВ

SAN обеспечивает предоставление блочных устройств посредством сетевых протоколов, таких как Fibre Channel или iSCSI. Для доступа к определенному сетевому блочному устройству используется специализированный адрес этого устройства – LUN (Logical Unit Number – номер логического устройства).

Для организации хранения в ПК СВ требуется выделение как минимум 2 LUN (один – для хранилища образов, второй – для системного хранилища). Эти LUN должны быть презентованы каждому серверу – фронтальным машинам и узлам виртуализации.

Настройки сервера, предоставляющего блочные устройства (iSCSI-target)

  1. Вывести перечень блочных устройств:

    lsblk
    Пример вывода после выполнения команды:

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0     11:0    1  3,9G  0 rom 
    sda    252:0    0   12G  0 disk
    ├─sda1 252:1    0   11G  0 part /
    ├─sda2 252:2    0    1K  0 part
    └─sda5 252:5    0  975M  0 part [SWAP]
    sdb    252:16   0   24G  0 disk
    sdc    252:32   0   24G  0 disk
    CODE

    где:

    • sda – диск для размещения файлов ОС;
    • sdb и sdc – диски для эмуляции сетевых блочных устройств.
  2. Установить консоль управления Linux-IO Target (пакет targetcli-fb):

    sudo apt install targetcli-fb

  3. Войти в консоль управления Linux-IO Target командой:

    sudo targetcli

  4. В консоли управления вывести текущую конфигурацию командой:

    ls
    Пример вывода после выполнения команды:

    /> ls
    o- / ..................................................................................................... [...]
       o- backstores ......................................................................................... [...]
        | o- block ............................................................................ [Storage Objects: 0]
        | o- fileio ........................................................................... [Storage Objects: 0]
        | o- pscsi ............................................................................ [Storage Objects: 0]
        | o- ramdisk .......................................................................... [Storage Objects: 0]
        o- iscsi ...................................................................................... [Targets: 0]
        o- lo.......................................................................................... [Targets: 0]
        o- vhost ...................................................................................... [Targets: 0]
    CODE
  5. Создать (зарегистрировать) блочное устройство в разделе /backstores/block командой:

    /backstores/block create <наименование_устройства> /dev/<блочное_устройство>

    В наименовании устройства могут использоваться любые печатные символы, за исключением символов кириллицы.

    Пример

    Регистрация блочного устройства /dev/sdb, при этом ему будет присвоено условное именование storage01:

    /backstores/block create storage01 /dev/sdb

    Пример вывода после выполнения команды:

    Created block storage object storage01 using /dev/sdb.
    CODE

  6. Аналогичным образом добавить необходимое количество блочных устройств.
  7. Проверить результат командой ls. Пример вывода после выполнения команды:

    /> ls
    o- / ................................................................................................. [...]
    o- backstores ........................................................................................ [...]
    | o- block ............................................................................ [Storage Objects: 1]
    | | o- storage01 ............................................... [/dev/sdb (24.0GiB) write-thru deactivated]
    | o- fileio ........................................................................... [Storage Objects: 0]
    | o- pscsi ............................................................................ [Storage Objects: 0]
    | o- ramdisk .......................................................................... [Storage Objects: 0]
    o- iscsi ...................................................................................... [Targets: 0]
    o- loopback ................................................................................... [Targets: 0]
    o- vhost ...................................................................................... [Targets: 0]
    CODE
  8. Создать цель (iSCSI-target) в разделе /iscsi командой:

    /iscsi create
    Пример вывода после выполнения команды:

    Created target iqn.2003-01.org.linux-iscsi.storage.x8664:sn.4668ea6d5709.
    Created TPG 1. Global pref auto_add_default_portal=true
    Created default portal listening on all IPs (0.0.0.0), port 3260.
    CODE

    Для каждого блочного устройства можно назначить несколько целей (iSCSI-target) – чтобы разграничить доступ для разных групп серверов-инициаторов (iSCSI-initiator).

  9. Проверить результат командой ls. Пример вывода после выполнения команды:

    /> ls
    o- / ..................................................................................................... [...]
       o- backstores ......................................................................................... [...]
        | o- block ............................................................................ [Storage Objects: 1]
        | | o- storage01 ............................................... [/dev/sdb (24.0GiB) write-thru deactivated]
        | o- fileio ........................................................................... [Storage Objects: 0]
        | o- pscsi ............................................................................ [Storage Objects: 0]
        | o- ramdisk .......................................................................... [Storage Objects: 0]
        o- iscsi ...................................................................................... [Targets: 1]
        | o- iqn.2003-01.org.linux-iscsi.storage.x8664:sn.4668ea6d5709 ................................... [TPGs: 1]
          | o- tpg1 ......................................................................... [no-gen-acls, no-auth]
            | o- acls .................................................................................... [ACLs: 0]
            | o- luns .................................................................................... [LUNs: 0]
            | o- portals .............................................................................. [Portals: 1]
              | o- 0.0.0.0:3260 ............................................................................... [OK]
        o- loopback ................................................................................... [Targets: 0]
        o- vhost ...................................................................................... [Targets: 0]
    CODE
  10. Создать LUN на основе блочного устройства, зарегистрированного в разделе /backstores/block (см. шаг 5) командой:

    /iscsi/<идентификатор_цели>/tpg1/luns/ create /backstores/block/<наименование_устройства>

    Пример

    /iscsi/iqn.2003-01.org.linux-iscsi.storage.x8664:sn.4668ea6d5709/tpg1/luns/ create /backstores/block/storage01

    Пример вывода после выполнения команды:

    Created LUN 0.
    CODE
  11. Проверить результат командой ls. Пример вывода после выполнения команды:

    /> ls
    o- / ..................................................................................................... [...]
       o- backstores ......................................................................................... [...]
        | o- block ............................................................................ [Storage Objects: 1]
        | | o- storage01 ............................................... [/dev/sdb (24.0GiB) write-thru deactivated]
        | o- fileio ........................................................................... [Storage Objects: 0]
        | o- pscsi ............................................................................ [Storage Objects: 0]
        | o- ramdisk .......................................................................... [Storage Objects: 0]
        o- iscsi ...................................................................................... [Targets: 1]
        | o- iqn.2003-01.org.linux-iscsi.storage.x8664:sn.4668ea6d5709 ................................... [TPGs: 1]
        |   o- tpg1 ......................................................................... [no-gen-acls, no-auth]
        |     o- acls .................................................................................... [ACLs: 0]
        |     o- luns .................................................................................... [LUNs: 0] 
        |     | o- lun0 ............................................ [block/storage01 (/dev/sdb) (default_tg_pt_gp)]
        |     o- portals .............................................................................. [Portals: 1]
        |       o- 0.0.0.0:3260 ............................................................................... [OK]
        o- loopback ................................................................................... [Targets: 0]
        o- vhost ...................................................................................... [Targets: 0]
    CODE
  12. Выполнить настройку контроля доступа к цели (iSCSI-target):

    • если контроль доступа не требуется, то его можно отключить командами:

      cd /iscsi/<идентификатор_цели>/tpg1

      set attribute generate_node_acls=1

      set attribute demo_mode_write_protect=0

    • для предоставления доступа определенному серверу-инициатору (iSCSI-initiator) к цели (iSCSI-target) необходимо в список доступа (ACL) добавить идентификатор инициатора, который хранится в файле /etc/iscsi/initiatorname.iscsi на сервере-инициаторе (см. шаг 3 настройки iSCSI-initiator). Для этого следует выполнить команды:

      cd /iscsi/<идентификатор_цели>/tpgt1/acls

      create <идентификатор_инициатора>

      Пример

      cd /iscsi/iqn.2003-01.org.linux-iscsi.storage.x8664:sn.4668ea6d5709/tpgt1/acls
      create iqn.1993-08.org.debian:01:c1a92326f6b8

      Пример вывода после успешного выполнения команды create:

      Created Node ACL for iqn.1993-08.org.debian:01:c1a92326f6b8
      Created mapped LUN 0.
      CODE
  13. Повторить шаги 8 – 12 для добавления необходимого количества LUN.
  14. Выполнить сохранение настроек:

    / saveconfig
    Пример вывода после выполнения команды:

    Last 10 configs saved in /etc/rtslib-fb-target/backup.
    Configuration saved to /etc/rtslib-fb-target/saveconfig.json
    CODE
  15. Выйти из консоли управления:

    exit

В консоли управления Linux-IO Target версии 2.1.48-2 введена система бэкапов конфигурации. В связи с этим, после перезагрузки сервера сохраненная конфигурация не загружается автоматически. На текущий момент после перезагрузки сервера конфигурацию необходимо восстанавливать командой:

sudo targetcli restoreconfig

Пример вывода после выполнения команды:

Configuration restored from /etc/rtslib-fb-target/saveconfig.json
CODE

Для того чтобы автоматизировать восстановление конфигурации, необходимо выполнить следующие действия:

  1. Создать службу target, сформировав unit-файл, например с помощью тестового редактора nano, для этого выполнить команду:

    sudo nano /lib/systemd/system/target.service
    В открывшемся текстовом редакторе добавить следующие строки:

    [Unit]
    Description=Restore LIO kernel target configuration
    Requires=sys-kernel-config.mount
    After=sys-kernel-config.mount network.target local-fs.target
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/bin/targetctl restore
    ExecStop=/usr/bin/targetctl clear
    SyslogIdentifier=target
    [Install]
    WantedBy=multi-user.target
    CODE

    После этого сохранить unit-файл и закрыть текстовый редактор.

  2. Перезагрузить список служб командой:

    sudo systemctl daemon-reload

  3. Добавить службу target в автозагрузку командой:

    sudo systemctl enable target
    Пример вывода после выполнения команды:

    Created symlink /etc/systemd/system/multi-user.target.wants/target.service → /lib/systemd/system/target.service.
    CODE
  4. Для проверки следует перезагрузить сервер и вывести информацию о состоянии службы target:

    sudo systemctl status target

    Пример вывода после выполнения команды:

    ● target.service - Restore LIO kernel target configuration
       Loaded: loaded (/lib/systemd/system/target.service; enabled; vendor preset: enabled)
       Active: active (exited) since Mon 2023-03-20 16:28:26 MSK; 9min ago
      Process: 577 ExecStart=/usr/bin/targetctl restore (code=exited, status=0/SUCCESS)
     Main PID: 577 (code=exited, status=0/SUCCESS)
    CODE

Настройки сервера (iSCSI-initiator), которому презентованы сетевые блочные устройства

Действия описанные в этом пункте, должны быть выполнены на всех серверах - фронтальных машинах и узлах виртуализации.
  1. Установить пакет open-iscsi командой:

    sudo apt install open-iscsi

  2. Настроить автоматическое подключение LUN при перезагрузке сервера. Для этого в конфигурационном файле /etc/iscsi/iscsid.conf для параметра node.startup установить значение automatic:

    node.startup = automatic
    CODE
  3. Запустить службу клиента (iSCSI-initiator) командой:

    sudo systemctl start iscsi

    После первого запуска сервиса будет сгенерирован уникальный идентификатор инициатора, который можно просмотреть в файле /etc/iscsi/initiatorname.iscsi.

    Пример

    InitiatorName=iqn.1993-08.org.debian:01:c1a92326f6b8
    CODE

    Если для цели (iSCSI-target) настроен контроль доступа, то уникальный идентификатор инициатора необходимо добавить в список доступа (ACL) цели (iSCSI-target) – см. шаг 12 настройки iSCSI-target.

  4. Выполнить сканирование для поиска целей (iSCSI-target):

    sudo iscsiadm -m discovery -t st -p <IP-адрес_цели>
    где <IP-адрес_цели> – IP-адрес узла, предоставляющего доступ к блочному устройству.
    Пример вывода после успешного выполнения команды:

    192.168.55.41:3260,1 iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1 
    192.168.55.41:3260,1 iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.85eebbd1f098
    CODE
  5. Подключить найденную цель (iSCSI-target):

    sudo iscsiadm -m node -T <идентификатор_цели> -p <IP-адрес_цели> -l

    Пример

    sudo iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1 -p 192.168.55.41 -l

    Кроме того, можно автоматически подключить все найденные цели (iSCSI-target):

    sudo iscsiadm -m node -l
    Пример вывода после успешного выполнения команды:

    Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1, portal: 192.168.55.41,3260] (multiple)
    Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.85eebbd1f098, portal: 192.168.55.41,3260] (multiple)
    Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1, portal: 192.168.55.41,3260] successful.
    Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.85eebbd1f098, portal: 192.168.55.41,3260] successful.
    CODE

    В случае, если при подключении целей возникли ошибки, необходимо выполнить одну из следующих команд:

    • sudo iscsiadm -m session --rescan

    • sudo iscsiadm -m session -P3

    Если после выполнения команды, указанной выше, ошибка не была устранена, необходимо перезапустить службу iscsi командой:

    sudo systemctl restart iscsi
    или перезагрузить сервер командой:
    sudo reboot

  6. Для проверки выполнить команду:

    lsblk
    Пример вывода после выполнения команды:

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   24G  0 disk
    sdb      8:16   0   24G  0 disk
    sr0     11:0    1 1024M  0 rom 
    vda    252:0    0   64G  0 disk
    ├─vda1 252:1    0   63G  0 part /
    ├─vda2 252:2    0    1K  0 part
    └─vda5 252:5    0  975M  0 part [SWAP]
    CODE

    где в качестве локальных блочных устройств sda и sdb выступают сетевые блочные устройства.

Настройка хранилищ c драйвером FS_LVM

Особенности использования драйвера FS_LVM

Исходные образы хранятся как обычные файлы, по умолчанию установлен следующий путь размещения в хранилище образов: /var/lib/one/datastores/<идентификатор_хранилища>. При создании ВМ образы дисков выгружаются в логические тома (LV). Виртуальные машины запускаются из LV на узле виртуализации.

Для обеспечения совместного доступа всех узлов виртуализации к каталогу хранилища образов используется распределенная файловая система, такая как, например, NFS. При этом необходимо выполнить настройку каталога хранилища образов и точки монтирования так же, как и при использовании хранилища, построенном на базе файловой технологии хранения. Рекомендуется сначала выполнить развертывание хранилища образов, построенного на базе файловой технологии хранения. А затем, убедившись в его корректной работе, заменить его на хранилище LVM.

Сетевая файловая система NFS не поддерживает использование меток безопасности. Если планируется использование файловой системы NFS при построении облачного хранилища, функционирующего в мандатном контексте, то для ВМ следует установить уровень целостности, назначаемый по умолчанию, равным 0 (см. Ограничения, связанные с функционированием файловых систем NFS и OCFS2).

Параметры хранилищ

Для регистрации хранилищ необходимо указать значения следующих параметров:

  • для системного хранилища:

    ПараметрЗначение
    NAME<Имя хранилища>
    TYPESYSTEM_DS
    TM_MADfs_lvm
    BRIDGE_LIST

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

    Не используется, если фронтальная машина имеет прямой доступ к системе хранения данных. 

  • для хранилища образов:

    ПараметрЗначение
    NAME<Имя хранилища>
    TYPE

    IMAGE_DS

    DS_MAD

    fs

    TM_MADfs_lvm
    DISK_TYPEBLOCK
    BRIDGE_LIST

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

    Не используется, если фронтальная машина имеет прямой доступ к системе хранения данных. 

    SAFE_DIRS

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

    По умолчанию имеет значение "/var/tmp"

Регистрация хранилищ в интерфейсе командной строки

Пример

Регистрация системного хранилища с использованием конфигурационного файла:

  1. Создать файл systemds.txt следующего содержания:

    NAME 		= "<наименование_хранилища>"
    TYPE		= "SYSTEM_DS"
    TM_MAD		= "fs_lvm"
    BRIDGE_LIST = "<узел_виртуализации-1> <узел_виртуализации-2> ... <узел_виртуализации-N>"
    CODE
  2. Выполнить команду:

    onedatastore create systemds.txt
    После выполнения команды будет выведен идентификатор созданного хранилища, например:

    ID: 100
    CODE

Пример

Регистрация хранилища образов с использованием конфигурационного файла:

  1. Создать файл imageds.txt следующего содержания:

    NAME 		= "<наименование_хранилища>"
    TYPE		= "IMAGE_DS" 
    TM_MAD		= "fs_lvm"
    DS_MAD		= "fs" 
    DISK_TYPE	= "BLOCK" 
    BRIDGE_LIST = "<узел_виртуализации-1> <узел_виртуализации-2> ... <узел_виртуализации-N>"
    CODE
  2. Выполнить команду:

    onedatastore create imageds.txt
    После выполнения команды будет выведен идентификатор созданного хранилища, например:

    ID: 101
    CODE

Регистрация хранилищ в веб-интерфейсе

Пример

Регистрация системного хранилища.

  1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
  2. На открывшейся странице Создать хранилище:
    • перейти во вкладку Расширенный;
    • во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:

      NAME 		= "<наименование_хранилища>"
      TYPE		= "SYSTEM_DS"
      TM_MAD		= "fs_lvm"
      BRIDGE_LIST = "<узел_виртуализации-1> <узел_виртуализации-2> ... <узел_виртуализации-N>"
      CODE
    • нажать на кнопку [Создать].
  3. Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON

    В представленном примере системному хранилищу fs_lvm-system присвоен идентификатор 100.

Пример

Регистрация хранилища образов.

  1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
  2. На открывшейся странице Создать хранилище:
    • перейти во вкладку Расширенный;
    • во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:

      NAME 		= "<наименование_хранилища>"
      TYPE		= "IMAGE_DS" 
      TM_MAD		= "fs_lvm"
      DS_MAD		= "fs" 
      DISK_TYPE	= "BLOCK" 
      BRIDGE_LIST = "<узел_виртуализации-1> <узел_виртуализации-2> ... <узел_виртуализации-N>"
      CODE
    • нажать на кнопку [Создать].
  3. Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON

    В представленном примере хранилищу образов fs_lvm-images присвоен идентификатор 101.

Настройка ПК СВ для использования системного хранилища LVM

Все узлы виртуализации должны иметь доступ к одним и тем же сетевым блочным устройствам.

К фронтальной машине сетевые блочные устройства можно не подключать. Фронтальная машина может получить доступ к системному хранилищу через узлы виртуализации (параметр BRIDGE_LIST).

На основе совместно используемых сетевых блочных устройств для каждого хранилища должна быть создана группа томов с именем вида:
vg-one-<идентификатор_системного_хранилища>.

Формирование групп томов достаточно выполнить только на одном из узлов виртуализации.

Пример

  1. Инициализировать блочное устройство для работы с LVM командой:

    sudo pvcreate /dev/sda
    где /dev/sda – сетевое блочное устройство (см. подраздел Настройки сервера (iSCSI-initiator), которому презентованы сетевые блочные устройства).
    Пример вывода после успешного выполнения команды:

    Physical volume "/dev/sda" successfully created.
    CODE
  2. Создать группу томов (в представленном примере группа состоит из одного тома):

    sudo vgcreate vg-one-100 /dev/sda
    где 100 – идентификатор системного хранилища fs_lvm-system.
    Пример вывода после успешного выполнения команды:

    Volume group "vg-one-100" successfully created
    CODE

Настройка ПК СВ для использования хранилища образов

Необходимо обеспечить совместный доступ всех узлов виртуализации к каталогу хранилища образов. Для этого используется распределенная файловая система, такая как, например, NFS.

Дополнительная информация

Сетевая файловая система NFS

Ограничения, связанные с функционированием файловой системы NFS

Сетевая файловая система NFS не поддерживает использование меток безопасности.

Если в ПК СВ, функционирующем в дискреционном режиме, планируется использовать файловую систему NFS, то на каждом узле виртуализации следует установить уровень целостности, назначаемый по умолчанию для ВМ, равным 0. Для этого необходимо выполнить действия, описанные ниже.

  1. Остановить службу libvirtd командой:

    sudo systemctl stop libvirtd.service

  2. В конфигурационном файле /etc/libvirt/libvirtd.conf, установить значение параметра ilev_vm равное 0.

    ilev_vm = 0
    
    CODE
  3. Запустить службу libvirtd командой:

    sudo systemctl start libvirtd.service

Пример использования файловой системы NFS

В представленном примере описан процесс настройки сервера NAS, предоставляющего общий доступ к каталогам, в которые смонтированы блочные устройства. Чтобы обеспечить общий доступ к каталогам, на сервере NAS будет настроена служба сервера NFS, а на фронтальной машине и узлах виртуализации – служба клиента NFS.

Дополнительная информация

Сетевая файловая система NFS

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

  1. Вывести перечень блочных устройств:

    lsblk
    Пример вывода после выполнения команды:

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0     11:0    1  3,9G  0 rom 
    sda    252:0    0   12G  0 disk
    ├─sda1 252:1    0   11G  0 part /
    ├─sda2 252:2    0    1K  0 part
    └─sda5 252:5    0  975M  0 part [SWAP]
    sdb    252:16   0   24G  0 disk
    sdc    252:32   0   24G  0 disk
    CODE

    где:

    • sda – диск для размещения файлов ОС;
    • sdb и sdc – диски для монтирования в каталоги с общим доступом.

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

  2. Создать файловую систему ext4 на блочном устройстве sdb:

    sudo mkfs.ext4 /dev/sdb
    Пример вывода после успешного выполнения команды:

    Allocating group tables: done                            
    Writing inode tables: done                            
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done
    CODE
  3. Создать каталог, например /mnt/nfs-images, который будет выступать в качестве сетевого ресурса и в который будет смонтировано блочное устройство. Для этого выполнить команду:

    sudo mkdir /mnt/nfs-images

  4. На каталог назначить владельцем пользователя с UID равным 9869 (oneadmin). А в качестве группы-владельца – группу с GID равным 9869 (oneadmin). Для этого выполнить команду:

    sudo chown 9869:9869 /mnt/nfs-images

  5. Определить идентификаторы (UUID) блочных устройств командой:

    sudo blkid
    Пример вывода после выполнения команды:

    /dev/sda1: UUID="b5fd411a-4c96-491b-bfc0-b4e9e2670e9c" TYPE="ext4" PARTUUID="50741579-01"
    /dev/sda5: UUID="31daa40d-8e07-44cc-b851-d985f2121bb7" TYPE="swap" PARTUUID="50741579-05" 
    /dev/sdb: UUID="0bb98072-95ad-4042-bd33-7adf62102445" TYPE="ext4"
    /dev/sdc: UUID="093051cb-e9c2-4932-99a1-16cab2da8e1c" TYPE="ext4"
    CODE
  6. Настроить автоматическое монтирование блочного устройства в созданный ранее каталог. Для этого в файл /etc/fstab добавить следующую строку:

    UUID=0bb98072-95ad-4042-bd33-7adf62102445 /mnt/nfs-images ext4 _netdev,errors=remount-ro 0 0
    CODE
  7. Выполнить монтирование командой:

    sudo mount -a
    Результатом выполнения команды должен быть пустой вывод без ошибок.

Для того чтобы установить и настроить службу сервера NFS, на сервере NAS необходимо выполнить действия, описанные ниже.

  1. Установить службу сервера NFS:

    sudo apt install nfs-kernel-server

  2. В конфигурационном файле /etc/exports указать порядок доступа к каталогу. Для этого добавить строку вида:

    <полный_путь_каталога> <IP-адрес_клиента>(rw,async,no_subtree_check,no_root_squash)
    CODE

    где <IP-адрес_клиента> – IP-адрес фронтальной машины или узла виртуализации. Кроме того, может быть использовано сетевое имя сервера, или, для указания группы серверов, можно использовать адрес сети или подстановочные знаки (подробнее см. справку man exports).

    Пример

    Настройка доступа для фронтальной машины с сетевым именем front и узлов виртуализации, сетевое имя которых начинается с последовательности символов "node" (далее следует один любой символ):

    /mnt/nfs-images front(rw,async,no_subtree_check,no_root_squash)
    /mnt/nfs-images node?(rw,async,no_subtree_check,no_root_squash)
    CODE
  3. Обновить правила доступа к каталогам командой:

    sudo exportfs -ra

Для того чтобы установить и настроить службу клиента NFS, на фронтальной машине и каждом узле виртуализации необходимо выполнить действия, описанные ниже.

  1. Установить службу клиента NFS:

    sudo apt install nfs-common

  2. Просмотреть перечень доступных сетевых ресурсов:

    sudo showmount -e <IP-адрес_сервера_NAS>
    Пример вывода после успешного выполнения команды:

    Export list for 192.168.1.10: 
    /mnt/nfs-images node?,front
    CODE
  3. На каждом узле виртуализации необходимо создать каталог для зарегистрированного ранее хранилища образов. Для этого выполнить команду:

    sudo mkdir /var/lib/one/datastores/<идентификатор_хранилища_образов>

    Пример

    sudo mkdir /var/lib/one/datastores/101

  4. Настроить автоматическое монтирование сетевого ресурса в каталог хранилища образов. Для этого в файл /etc/fstab добавить строку вида:

    <IP-адрес_сервера_NFS>:<сетевой_ресурс> <каталог_хранилища> nfs _netdev,timeo=14,intr 0 0
    CODE

    Пример

    192.168.1.10:/mnt/nfs-images /var/lib/one/datastores/101 nfs _netdev,timeo=14,intr 0 0
    CODE
  5. Выполнить монтирование командой:

    sudo mount -a
    Результатом выполнения команды должен быть пустой вывод без ошибок.

Настройка хранилищ c драйвером LVM_LVM

Особенности использования драйвера LVM_LVM

Драйвер LVM_LVM позволяет организовать и хранилище образов, и системное хранилище в LVM. При этом, в отличие от использования драйвера FS_LVM, нет необходимости создавать общую сетевую файловую систему для хранилища образов. 

При использовании драйвера хранилища LVM_LVM необходимо наличие на всех узлах виртуализации общих блочных устройств хранения данных. 

Особенности функционирования драйвера хранилища LVM_LVM:

  • предварительно необходимо создать отдельные группы LVM-томов для хранилища образов и системного хранилища;
  • при загрузке образа диска ВМ в хранилище образов автоматически создается LVM-том, в который записывается загружаемый образ в формате RAW;
  • при развертывании ВМ в системном хранилище автоматически создается копия LVM-тома из хранилища образов;
  • при копирование образа в системное хранилище происходит посекторное  клонирование образа, что может занять длительное время. Рекомендуется создавать эталонный образ минимально необходимого объёма с последующим расширением его до необходимого размера при создании ВМ.

Драйвером хранилища LVM_LVM не поддерживается создание снапшотов диска и создание "тонких" дисков (подробнее о "тонких" дисках – см. Особенности использования драйвера LVM_THIN).

Параметры хранилищ

Для регистрации хранилищ необходимо указать значения следующих параметров:

  • для системного хранилища:

    ПараметрЗначение
    NAME<Имя хранилища>
    TYPESYSTEM_DS
    TM_MADlvm_lvm
    DRIVER

    raw

  • для хранилища образов:

    ПараметрЗначение
    NAME<Имя хранилища>
    TYPE

    IMAGE_DS

    DS_MAD

    lvm

    TM_MADlvm_lvm
    DISK_TYPEBLOCK
    DRIVER

    raw 

Регистрация хранилищ в интерфейсе командной строки

Пример

Регистрация системного хранилища с использованием конфигурационного файла:

  1. Создать файл systemds.txt следующего содержания:

    NAME	= "<наименование_хранилища>" 
    TYPE	= "SYSTEM_DS"
    TM_MAD	= "lvm_lvm"
    DRIVER	= "raw"
    CODE
  2. Выполнить команду:

    onedatastore create systemds.txt
    После выполнения команды будет выведен идентификатор созданного хранилища, например:

    ID: 100
    CODE

Пример

Регистрация хранилища образов с использованием конфигурационного файла:

  1. Создать файл imageds.txt следующего содержания:

    NAME 		= "<наименование_хранилища>"
    TYPE		= "IMAGE_DS" 
    TM_MAD		= "lvm_lvm"
    DS_MAD		= "lvm"  
    DRIVER		= "raw"
    DISK_TYPE	= "BLOCK"  
    CODE
  2. Выполнить команду:

    onedatastore create imageds.txt
    После выполнения команды будет выведен идентификатор созданного хранилища, например:

    ID: 101
    CODE

Регистрация хранилищ в веб-интерфейсе

Пример

Регистрация системного хранилища.

  1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
  2. На открывшейся странице Создать хранилище:
    • перейти во вкладку Расширенный;
    • во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:

      NAME	= "<наименование_хранилища>" 
      TYPE	= "SYSTEM_DS"
      TM_MAD	= "lvm_lvm"
      DRIVER	= "raw"
      CODE
    • нажать на кнопку [Создать].
  3. Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON

    В представленном примере системному хранилищу lvm_lvm-system присвоен идентификатор 100.

Пример

Регистрация хранилища образов.

  1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
  2. На открывшейся странице Создать хранилище:
    • перейти во вкладку Расширенный;
    • во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:

      NAME 		= "<наименование_хранилища>"
      TYPE		= "IMAGE_DS" 
      TM_MAD		= "lvm_lvm"
      DS_MAD		= "lvm"  
      DRIVER		= "raw"
      DISK_TYPE	= "BLOCK" 
      CODE
    • нажать на кнопку [Создать].
  3. Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON

    В представленном примере хранилищу образов lvm-lvm-images присвоен идентификатор 101.

Настройка ПК СВ для использования хранилищ LVM

Все сервера (фронтальные машины и узлы виртуализации) должны иметь доступ к одним и тем же сетевым блочным устройствам.

На одном из серверов для хранилища образов и системного хранилища необходимо создать отдельные группы томов с именем вида:
vg-one-<идентификатор_хранилища>.

Пример

Создание группы томов для системного хранилища.

  1. Инициализировать блочное устройство для работы с LVM командой:

    sudo pvcreate /dev/sda
    где /dev/sda – сетевое блочное устройство (см. подраздел Настройки сервера (iSCSI-initiator), которому презентованы сетевые блочные устройства).
    Пример вывода после успешного выполнения команды:

    Physical volume "/dev/sda" successfully created.
    CODE
  2. Создать группу томов (в представленном примере группа состоит из одного тома):

    sudo vgcreate vg-one-100 /dev/sda
    где 100 – идентификатор системного хранилища lvm-lvm-system.
    Пример вывода после успешного выполнения команды:

    Volume group "vg-one-100" successfully created
    CODE

Пример

Создание группы томов для хранилища образов.

  1. Инициализировать блочное устройство для работы с LVM командой:

    sudo pvcreate /dev/sdb
    где /dev/sdb – сетевое блочное устройство (см. подраздел Настройки сервера (iSCSI-initiator), которому презентованы сетевые блочные устройства).
    Пример вывода после успешного выполнения команды:

    Physical volume "/dev/sdb" successfully created.
    CODE
  2. Создать группу томов (в представленном примере группа состоит из одного тома):

    sudo vgcreate vg-one-101 /dev/sdb
    где 101 – идентификатор системного хранилища lvm-lvm-images.
    Пример вывода после успешного выполнения команды:

    Volume group "vg-one-101" successfully created
    CODE

Настройка хранилищ c драйвером LVM_THIN

Особенности использования драйвера LVM_THIN

Драйвер LVM_LVM позволяет организовать и хранилище образов, и системное хранилище в LVM. В отличие от драйвера LVM_LVM, при создании в системном хранилище нового логического тома LVM, его фактический размер соответствует объему имеющихся данных на исходном LVM-томе, и увеличивается по мере записи данных в этот том. Такой логический том LVM называют "тонким" LVM-томом. При этом для каждого узла виртуализации в общем системном хранилище организуется индивидуальный ресурс – пул "тонких" LVM-томов.

Тонкие LVM-тома не могут совместно использоваться несколькими узлами. В связи с этим, при использовании драйвера хранилища LVM_THIN не поддерживается миграция ВМ.

Особенности функционирования драйвера хранилища LVM_THIN:

  • предварительно необходимо создать отдельную группу LVM-томов для хранилища образов;
  • на каждом узле виртуализации предварительно необходимо создать отдельную группу LVM-томов с привязкой к общему системному хранилищу;
  • на каждом узле виртуализации предварительно необходимо создать отдельный пул "тонких" LVM-томов;
  • при загрузке образа диска ВМ в хранилище образов автоматически создается LVM-том, в который пишется загружаемый образ в формате RAW;
  • при развертывании ВМ в системном хранилище из исходного LVM-тома автоматически создается "тонкий" LVM-том в формате QCow2.

    Пример

    Для просмотра перечня имеющихся LVM-томов на узле виртуализации необходимо выполнить команду:

    sudo lvs

    Пример вывода после выполнения команды:

    LV             VG                   Attr       LSize  Pool        Origin Data%  Meta%  Move Log Cpy%Sync Convert
    onethinpool    vg-one-100-node1     twi-a-tz-- 34,00g                    0,00   10,46                           
    lv-one-vm-5-0  vg-one-100-node2     Vwi---tz-- 12,00g onethinpool                                               
    onethinpool    vg-one-100-node2     twi-aotz-- 20,00g                    30,09  18,40                           
    lv-one-image-2 vg-one-101           -wi-a----- 12,00g                                                           
    lv-one-image-3 vg-one-101           -wi-a-----  4,34g       
    CODE

    В представленном примере для диска с идентификатором 0 виртуальной машины с идентификатором 5 был создан "тонкий" LVM-том с наименованием lv-one-vm-5-0.

Параметры хранилищ

Для регистрации хранилищ необходимо указать значения следующих параметров:

  • для системного хранилища:

    ПараметрЗначение
    NAME<Имя хранилища>
    TYPESYSTEM_DS
    TM_MADlvm_thin
  • для хранилища образов:

    ПараметрЗначение
    NAME<Имя хранилища>
    TYPE

    IMAGE_DS

    DS_MAD

    lvm_thin

    TM_MADlvm_thin
    DISK_TYPEBLOCK
    DRIVER

    qcow2 

Регистрация хранилищ в интерфейсе командной строки

Пример

Регистрация системного хранилища с использованием конфигурационного файла:

  1. Создать файл systemds.txt следующего содержания:

    NAME	= "<наименование_хранилища>" 
    TYPE	= "SYSTEM_DS"
    TM_MAD	= "lvm_thin"
    CODE
  2. Выполнить команду:

    onedatastore create systemds.txt
    После выполнения команды будет выведен идентификатор созданного хранилища, например:

    ID: 100
    CODE

Пример

Регистрация хранилища образов с использованием конфигурационного файла:

  1. Создать файл imageds.txt следующего содержания:

    NAME 		= "<наименование_хранилища>"
    TYPE		= "IMAGE_DS" 
    TM_MAD		= "lvm_thin"
    DS_MAD		= "lvm_thin"  
    DRIVER		= "qcow2"
    DISK_TYPE	= "BLOCK"
    CODE
  2. Выполнить команду:

    onedatastore create imageds.txt
    После выполнения команды будет выведен идентификатор созданного хранилища, например:

    ID: 101
    CODE

Регистрация хранилищ в веб-интерфейсе

Пример

Регистрация системного хранилища.

  1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
  2. На открывшейся странице Создать хранилище:
    • перейти во вкладку Расширенный;
    • во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:

      NAME	= "<наименование_хранилища>" 
      TYPE	= "SYSTEM_DS"
      TM_MAD	= "lvm_thin"
      CODE
    • нажать на кнопку [Создать].
  3. Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON. 

    В представленном примере системному хранилищу lvm-thin-system присвоен идентификатор 100.

Пример

Регистрация хранилища образов.

  1. В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
  2. На открывшейся странице Создать хранилище:
    • перейти во вкладку Расширенный;
    • во вкладке Расширенный в поле Сохранить шаблон Хранилища здесь ввести следующие строки:

      NAME 		= "<наименование_хранилища>"
      TYPE		= "IMAGE_DS" 
      TM_MAD		= "lvm_thin"
      DS_MAD		= "lvm_thin"  
      DRIVER		= "qcow2"
      DISK_TYPE	= "BLOCK"
      CODE
    • нажать на кнопку [Создать].
  3. Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON

    В представленном примере хранилищу образов lvm-thin-images присвоен идентификатор 101.

Настройка ПК СВ для использования хранилища образов LVM

Все сервера (фронтальные машины и узлы виртуализации) должны иметь доступ к одним и тем же сетевым блочным устройствам.

На одном из серверов необходимо создать отдельную группу томов  для хранилища образов:
vg-one-<идентификатор_хранилища_образов>.

Пример

  1. Инициализировать блочное устройство для работы с LVM командой:

    sudo pvcreate /dev/sdb
    где /dev/sdb – сетевое блочное устройство (см. подраздел Настройки сервера (iSCSI-initiator), которому презентованы сетевые блочные устройства).
    Пример вывода после успешного выполнения команды:

    Physical volume "/dev/sdb" successfully created.
    CODE
  2. Создать группу томов (в представленном примере группа состоит из одного тома):

    sudo vgcreate vg-one-101 /dev/sdb
    где 101 – идентификатор системного хранилища lvm-thin-images.
    Пример вывода после успешного выполнения команды:

    Volume group "vg-one-101" successfully created
    CODE

Настройка ПК СВ для использования системного хранилища LVM

Все сервера (фронтальные машины и узлы виртуализации) должны иметь доступ к одним и тем же сетевым блочным устройствам.
  1. На каждом из узлов виртуализации необходимо создать отдельную группу томов с именем вида:
    vg-one-<идентификатор_системного_хранилища>-<имя_узла_виртуализации>.
  2. На каждом из узлов виртуализации в созданной группе томов необходимо создать пул логических томов с именем вида:
    vg-one-<идентификатор_системного_хранилища>-<имя_узла_виртуализации>/onethinpool.

Пример

  1. Инициализировать блочное устройство для работы с LVM командой:

    sudo pvcreate /dev/sda
    где /dev/sda – сетевое блочное устройство (см. подраздел Настройки сервера (iSCSI-initiator), которому презентованы сетевые блочные устройства).
    Пример вывода после успешного выполнения команды:

    Physical volume "/dev/sda" successfully created.
    CODE
  2. Создать группу томов (в представленном примере группа состоит из одного тома):

    sudo vgcreate vg-one-100-node1 /dev/sda
    где:

    • 100 – идентификатор системного хранилища lvm-thin-system;
    • node1 – сетевое имя узла виртуализации.

    Пример вывода после успешного выполнения команды:

    Volume group "vg-one-100-node1" successfully created
    CODE
  3. Создать пул логических томов:

    sudo lvcreate -T -L <размер>G vg-one-100-node1/onethinpool
    где <размер> – размер "тонкого" LVM-тома в ГБ, должен быть не больше размера локального блочного устройства (в представленном примере — /dev/sda).

    Пример вывода после успешного выполнения команды:

    Thin pool volume with chunk size 64,00 KiB can address at most 15,81 TiB of data.
    Logical volume "onethinpool" created.
    CODE

При создании "тонкого" LVM-тома дополнительно к исходному LVM-тому создаются два скрытых тома под метаданные (информация о выделенных блоках). При исчерпании свободного места в пуле логических томов возникает потеря метаданных на скрытых томах. Это приводит к повреждению файловых систем на "тонких" LVM-томах, что проявляется как ошибка записи.

Поврежденные метаданные возможно восстановить с помощью команды:

lvconvert --repair <наименование_группы>/<наименование_пула>

Драйвер LVM_THIN поддерживает автоматическое увеличение размера пула "тонких" логических томов при его заполнении. Для этого необходимо всегда оставлять свободное место в группе LVM-томов. Автоматическое увеличение размера томов по умолчанию выключено. Для того чтобы его включить, необходимо в конфигурационном файле /etc/lvm/lvm.conf скорректировать значения следующих параметров:

  • "thin_pool_autoextend_threshold" — пороговое значение (в процентах от заданного размера "тонкого" LVM-тома) при котором автоматически будет увеличен размер этого тома. По умолчанию имеет значение "100", в этом случае автоматическое расширение тома не производится;
  • "thin_pool_autoextend_percent" — объем дискового пространства (в процентах от заданного размера "тонкого" LVM-тома) на которое автоматически будет увеличен размер этого тома. По умолчанию имеет значение "20".

Пример

Автоматическое увеличение размера томов на 20%, когда объем дискового пространства, выделенный для "тонкого" LVM-тома заполнится на 70%.

thin_pool_autoextend_threshold = 70
thin_pool_autoextend_percent = 20
CODE

Например, был создан "тонкий" LVM-том размером 1 ГБ. Когда объем данных, размещенных на этом томе, достигнет размера 700 МБ, "тонкий" LVM-том будет автоматически расширен до 1,2 ГБ. После того как объем данных, размещенных на этом томе, достигнет размера 840 МБ, "тонкий" LVM-том будет автоматически расширен до 1,44 ГБ.