Поиск по сайту:

[Решено] Невозможно получить доступ к файлу хранилища, в доступе отказано. Ошибка в KVM Libvirt.

Сегодня я запустил свою виртуальную машину Arch Linux с помощью команды virsh start и получил эту ошибку: Не удалось запустить домен «Archlinux_default». Ошибка: невозможно получить доступ к файлу хранилища «/home/sk/». local/share/libvirt/images/Archlinux_default.img' (как uid:107, gid:107): разрешение отклонено. На самом деле это машина Vagrant, созданная с помощью поставщика KVM Libvirt.

Затем я снова попытался запустить виртуальную машину с помощью команды vagrant up. Он также отображал ту же ошибку.

 Bringing machine 'default' up with 'libvirt' provider…
 ==> default: Checking if box 'archlinux/archlinux' version '20210601.24453' is up to date…
 ==> default: Starting domain.
 There was an error talking to Libvirt. The error message is shown
 below:
 Call to virDomainCreateWithFlags failed: Cannot access storage file '/home/sk/.local/share/libvirt/images/Archlinux_default.img' (as uid:107, gid:107): Permission denied

Не удалось запустить домен, невозможно получить доступ к файлу хранилища, ошибка в разрешении

На всякий случай я еще раз попробовал запустить виртуальную машину из графического приложения Virt-manager. На этот раз он вернул ту же ошибку.

Не удалось запустить домен, невозможно получить доступ к файлу хранилища, ошибка в разрешении в вирт-менеджере

Во всех сообщениях об ошибках явно говорится, что у пользователя qemu нет разрешения на чтение каталога хранилища Libvirt.

В этом кратком руководстве я покажу вам, как исправить «ошибку: не удалось запустить домен… ошибка: невозможно получить доступ к файлу хранилища… (как uid:107, gid:107): разрешение отклонено» в KVM Libvirt .

Исправить «Невозможно получить доступ к файлу хранилища, ошибка в разрешении» в KVM Libvirt.

Это одна из распространенных ошибок KVM Libvirt. Эта ошибка обычно возникает после изменения пути к каталогу хранения Libvirt по умолчанию.

Несколько дней назад я переместил хранилище Libvirt в свой каталог $HOME. Вот почему я получаю эту ошибку.

Мы можем исправить это двумя способами.

Метод 1:

Шаг 1. Отредактируйте файл /etc/libvirt/qemu.conf:

sudo nano /etc/libvirt/qemu.conf

Шаг 2. Найдите директивы user и group. По умолчанию оба имеют значение "root".

 [...] 
 Some examples of valid values are:
 #
 user = "qemu"   # A user named "qemu"
 user = "+0"     # Super user (uid=0)
 user = "100"    # A user named "100" or a user with uid=100
 #
 #user = "root"
 The group for QEMU processes run by the system instance. It can be
 specified in a similar way to user.
 #group = "root"
 [...]

Раскомментируйте обе строки и замените root своим именем пользователя и сгруппируйте его с помощью libvirt, как показано ниже:

 [...] 
 Some examples of valid values are:
 #
 user = "qemu"   # A user named "qemu"
 user = "+0"     # Super user (uid=0)
 user = "100"    # A user named "100" or a user with uid=100
 #
 user = "sk"
 The group for QEMU processes run by the system instance. It can be
 specified in a similar way to user.
 group = "libvirt"
 [...]

Настройте пользователя и группу для kvm libvirt

Нажмите CTRL+O и нажмите ENTER, чтобы сохранить изменения, и нажмите CTRL+X, чтобы выйти из файла.

Шаг 3. Перезапустите службу libvirtd:

sudo systemctl restart libvirtd

Шаг 4. Убедитесь, что пользователь является членом группы libvirt. Если нет, добавьте пользователя в группу libvirt с помощью команды:

sudo usermod -a -G libvirt $(whoami)

Шаг 5. Наконец запустите виртуальную машину:

virsh start

Если вы предпочитаете использовать vagrant, запустите вместо этого следующее:

vagrant up

На этот раз виртуальная машина должна запуститься.

Шаг 6. Проверьте состояние виртуальной машины:

virsh list

Или,

vagrant status

Проверьте состояние виртуальной машины kvm libvirt

Метод 2:

Другой способ решить проблему с разрешениями KVM Libvirt — установить правильное разрешение ACL для каталога пула хранения Libvirt. В моем случае каталог моего пула хранения находится в каталоге $HOME.

Шаг 1: Давайте получим текущие разрешения ACL для каталога $HOME.

sudo getfacl -e /home/sk/

Пример вывода:

 getfacl: Removing leading '/' from absolute path names
 file: home/sk/
 owner: sk
 group: sk
 user::rwx
 user:qemu:--x            #effective:--x
 group::---            #effective:---
 mask::--x
 other::---

Как видно из приведенного выше вывода, пользователь qemu не имеет разрешения чтение для расположения пула носителей. В некоторых дистрибутивах имя пользователя может быть libvirt-qemu.

Шаг 2. Установите разрешения на чтение и выполнение для пользователя qemu с помощью команды:

sudo setfacl -m u:qemu:rx /home/sk/

Замените qemu и /home/sk/ своими собственными.

Теперь пользователь qemu имеет разрешение на чтение и выполнение файлов в каталоге пула хранения. Вы можете проверить это с помощью команды:

sudo getfacl -e /home/sk/

Пример вывода:

 getfacl: Removing leading '/' from absolute path names
 file: home/sk/
 owner: sk
 group: sk
 user::rwx
 user:qemu:r-x            #effective:--x
 group::---            #effective:---
 mask::--x
 other::---

Шаг 3. Перезапустите службу libvirtd:

sudo systemctl restart libvirtd

Теперь гостевые машины Libvirt запустятся без проблем.

Заключение

В этом руководстве мы обсудили, почему мы получаем ошибку «Невозможно получить доступ к файлу хранилища, отказано» в KVM libvirt и как исправить ее двумя разными способами в Linux.

Статьи по данной тематике