Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
- Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
Подготовка хост-машины
Предполагается, что на хост-машине установлена система виртуализации QEMU/KVM и создана по крайней мере одна виртуальная машина (ВМ).
Для предоставления доступа из ВМ к каталогу на хост-машине (т.н. "проброс каталога в ВМ") выполнить на хост-машине следующие действия:
Создать каталог, к которому будет предоставляться доступ (далее - разделяемый каталог). В примере ниже это каталог kvm_share, который создается в домашнем каталоге текущего пользователя:
mkdir ~/kvm_share- Настроить доступ к разделяемому каталогу для службы виртуальных машин. Подробнее про управление доступом см. Списки управления доступом к файловым объектам (ACL) в Astra Linux. В примере в качестве разделяемого используется подкаталог домашнего каталога текущего пользователя, что позволяет использовать его без привилегий суперпользователя. При ином размещении разделяемого каталога может понадобиться выполнять команды от имени суперпользователя (суперпользователя с высоким уровнем целостности при работе в Astra Linux Special Edition с включенным МРД). Настройка прав доступа:
- Настройка прав доступа со стороны виртуальной машины. Права доступа могут быть предоставлены служебному пользователя libvirt-qemu или служебной группе libvirt. Далее в примерах используются права для пользователя libvirt-qemu:
Разрешить поиск и чтение в каталоге, в котором находится разделяемый каталог (в примере - в домашнем каталоге текущего пользователя). Поиск ("x") можно не разрешать, при этом файловые объекты будут доступны при полном указании их имени. Пример:
setfacl -m u:libvirt-qemu:rx $HOMEРазрешить чтение, запись, поиск в разделяемом каталоге:
setfacl -m u:libvirt-qemu:rwx ~/kvm_shareСо стороны хоста файловые объекты в разделяемом каталоге будут создаваться от имени пользователей хоста.Чтобы служба виртуальных машин получала к ним доступ установить наследование прав:
setfacl -dm u:libvirt-qemu:rwx ~/kvm_share
- Настройка прав доступа со стороны хост-машины (для текущего пользователя):
Со стороны виртуальной машины файловые объекты в разделяемом каталоге будут создаваться от имени текущего пользователя и с группой-владельцем libvirt-qemu (при использовании virtio-9p) или группой-владельцем пользователя (при использовании virtiofs). При этом пользователь будет иметь доступ к файлам по умолчанию.
- Настройка прав доступа со стороны виртуальной машины. Права доступа могут быть предоставлены служебному пользователя libvirt-qemu или служебной группе libvirt. Далее в примерах используются права для пользователя libvirt-qemu:
- При работе в Astra Linux Special Edition с включенным МРД добавить в параметры загрузчика параметр parsec.ccnr_relax=1 (см. Параметры модуля ядра Parsec, задаваемые в загрузчике) и перезагрузить ОС.
Настройка виртуальной машины
Настройка виртуальной машины на хост-машине
Настроить виртуальную машину, для чего:
- Запустить графический менеджер виртуальных машин (virt-manager): "Пуск" - "Системные" - "Менеджер виртуальных машин".
- Выбрать виртуальную машину.
- В настройках виртуальной машины:
- Для использования драйвера virtiofs в разделе "Память" включить разделяемую память, отметив соответствующий чек-бокс.
- Нажать кнопку "Добавить оборудование".
- Выбрать вариант оборудования "Файловая система"
- Выбрать драйвер virtio-9p или virtiofs.
- Ввести путь к созданному каталогу (для примера - /home/user/kvm_share) ("Путь на хосте"). Если созданный каталог недоступен - создать пул с этим каталогом.
- Ввести название ресурса, например, hostfs. Это не название каталога монитирования, это имя ресурса. Каталог монтирования выбирается при монтировании ресурса в виртуальной машине.
- При необходимости указать, что монтирование выполняется в режиме "только чтение":
- Применить сделанные изменения. Если ВМ в это время запущена - то изменения можно сохранить, но применены они будут после выключения ВМ.
Также возможно напрямую отредактировать файл настроек виртуальной машины:
Для драйвера virtio-9p:
<filesystem type='mount' accessmode='mapped'> <source dir='/home/user/kvm_share'/> <target dir='hostsfs'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> </filesystem>
Для драйвера virtiofs:
<filesystem type="mount" accessmode="passthrough"> <driver type="virtiofs"/> <binary path="/usr/lib/qemu/virtiofsd"/> <source dir="/home/user/kvm_share"/> <target dir="hostfs"/> <alias name="fs1"/> <address type="pci" domain="0x0000" bus="0x08" slot="0x00" function="0x0"/> </filesystem>
Настройка виртуальной машины на виртуальной машине
На виртуальной машине:
Создать каталог, куда будет монтироваться каталог хост-машины:
sudo mkdir /hostfiles
Примонтировать в нее каталог хост-машины:
или:sudo mount -t 9p -o trans=virtio hostfs /hostfiles/
sudo mount -t virtiofs hostfs /hostfiles/
Для автоматического монтирования добавить запись в файл /etc/fstab. При этом рекомендуется использовать опцию монтирования nofail, позволяющую игнорировать ошибки монтирования. Это позволит запускать виртуальную машину в случае отсутствия (недоступности) разделяемого ресурса. Например:
hostfs /hostfiles 9p trans=virtio,version=9p2000.L,rw,nofail 0 0
hostfs /hostfiles virtiofs,nofail rw 0 0
Устранение возможных ошибок
При возникновении ошибок при загрузке виртуальной машины добавить на хост-машине в файл /etc/initramfs-tools/modules следующие модули
9pnet 9pnet_virtio
После чего обновить initramfs