Я пытаюсь передать физический оптический привод гостю KVM.
Вот как у меня есть устройство, определенное в XML:
<controller type='scsi' index='0' model='virtio-scsi'/>
<hostdev mode='subsystem' type='scsi'>
<source>
<adapter name='scsi_host4'/>
<address type='scsi' bus='0' target='0' unit='0'/>
</source>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</hostdev>
К сожалению, когда я пытаюсь загрузить виртуальную машину, я получаю эту ошибку:
файл диска = / dev / sg0, если = нет, id = drive-hostdev0, readonly = on: не удается открыть '/ dev / sg0': разрешение запрещено
Как это исправить?
Сначала необходимо проверить, является ли это AppArmor, который блокирует устройство:
dmesg | grep /dev/sg0
Если Вы видите сообщение, подобное:
[159883.682167] аудит: аудит type=1400 (1534114680.047:392): apparmor = "ОТКЛОНЕННЫЙ" в операции = "file_lock" представляют = "libvirt-40d3ad0d-0574-4823-ae7d-eaf38afa7fb6" имя = "/dev/sg0"
Затем это блокируется AppArmor. Если поле профиля похоже выше с идентификатором домена, расположенным после profile=
часть затем, это - динамично созданный профиль, созданный KVM после домена, запускается как часть интеграции KVM с AppArmor.
Можно предоставить доступ некоторым или всем устройствам SCSI для хостов KVM путем редактирования шаблонного файла, обычно располагаемого в /etc/apparmor.d/libvirt
. Необходимо видеть A TEMPLATE.qemu
файл, который используется в качестве основания для динамично созданных профилей AppArmor. Можно добавить устройство (устройства) в белый список в этом файле или отредактировать файл, на который указывает включение, перечисленное в шаблонном файле, который обычно является /etc/apparmor.d/abstractions/libvirt-qemu
. Для белого списка просто добавьте записи на их собственных строках в файл как так:
Для чтения:
/dev/sg* rk,
Для чтения-записи:
/dev/sg* rwk,
При использовании GUI для редактирования устройств SCSI в домене, можно заметить, что устройства не обнаруживаются правильно в GUI. Например, при попытке пройти через оптический диск, он не может показать, что медиа находятся в диске, даже если некоторые присутствуют. Вы захотите к whilelist эти устройства к сервису KVM также путем добавления подобных записей в /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper
файл и затем говорит AppArmor перезагружать конфигурации:
service apparmor reload
Если устройства SCSI являются symlinked, Вы, возможно, должны добавить те symlinked устройства к своему белому списку также. Ошибки AppArmor сообщат, если это верно, поскольку Вы будете видеть обновленные ошибки, поскольку Вы добавляете устройства в белый список для чтения или пишете, нет ли у Вас их всех покрытыми.