[Решено] Невозможно получить доступ к файлу хранилища, в доступе отказано. Ошибка в 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.