虚拟安装无法在符号链接后面找到图像

时间:2016-04-15 21:59:50

标签: symlink kvm

我在设置脚本以启动kvm实例时遇到了一些奇怪的行为,我希望你们都可以权衡这里发生的事情。

设定: 我有一个使用virt-install启动kvm的脚本。

virt-install ... --disk=image.qcow2 ...

我想在不同版本的image.qcow2上运行相同的脚本,所以我创建了一个到我最新图像的符号链接。

我的目录结构看起来像这样:

startKvm.sh
image.qcow2 -> image_v2.0.qcow2
image_v2.0.qcow2
image_v1.0.qcow2

但是,当我尝试运行virt-install命令时,它返回了以下错误。

  

错误内部错误:连接到监视器时退出进程:   datetime qemu-kvm:-drive file = / path / image.qcow2,if = none,id = drive-ide0-0-0,format = qcow2:无法打开   disk image /path/image.qcow2:无法打开文件:权限   拒绝

关于原因和替代解决方案的想法?

1 个答案:

答案 0 :(得分:0)

我有类似的想法使用符号链接,但是在我的场景中,我通过SSH运行virt-manager,使用X转发作为wheel(admin)组中的用户。创建虚拟客户机会产生相同的错误:

无法完成安装:'内部错误:连接到监视器时退出进程:2018-02-24T07:53:19.064452Z qemu-kvm:-drive file = / var / lib / libvirt / images / archlinux-2018.02.01-x86_64 .iso,format = raw,if = none,id = drive-ide0-0-1,readonly = on:无法打开磁盘映像/var/lib/libvirt/images/archlinux-2018.02.01-x86_64.iso:可以没有打开'/var/lib/libvirt/images/archlinux-2018.02.01-x86_64.iso':权限被拒绝'

问题实际上是权限。使用qemu-kvm设置.iso映像时,会在部署时将其所有权更改为用户/组qemu。我们需要确保用户qemu在整个文件路径中具有访问权限。

测试用例

用户正在运行virt-manager:yahol(wheel / admin group)
Iso或qcow2图像位置:/home/yahol/isos/archlinux-2018.02.01-x86_64.iso

注意:请忽略时间戳,因为我在2天内将这个答案整合在一起。已经很晚了,我太累了,不能在前一天完成它。

从用户主目录中的图像开始:

$ ll /home/yahol/isos/archlinux-2018.02.01-x86_64.iso
$ -rw-r--r--. 1 yahol yahol 565182464 Feb 24 08:49 archlinux-2018.02.01-x86_64.iso

在KVM图像的默认路径中以root身份创建符号链接:

# cd /var/lib/libvirt/images
# ln -s /home/yahol/isos/archlinux-2018.02.01-x86_64.iso
lrwxrwxrwx. 1 root root 48 Feb 23 21:35 archlinux-2018.02.01-x86_64.iso -> /home/yahol/isos/archlinux-2018.02.01-x86_64.iso

Symlink属于用户root,而实际文件仍然具有普通用户的用户/组。 通过virt-manager设置和部署虚拟机。注意图像文件的用户/组如何更改为qemu:

$ ll /home/yahol/isos/archlinux-2018.02.01-x86_64.iso
-rw-r--r--. 1 qemu qemu 565182464 Feb 24 08:49 archlinux-2018.02.01-x86_64.iso

此时VM管理器,无论是virt-manager还是virt-install,都会抛出上述错误。发生这种情况是因为用户qemu无法访问完整路径。用户yahol的主目录只能由用户yahol访问:

$ ll -d /home/yahol/
drwx------. 7 yahol yahol 258 Feb 24 08:37 /home/yahol/

现在让我们创建qemu具有完全访问权限的另一条路径:

# mkdir -p /Qemu/Test/Iso
# mv archlinux-2018.02.01-x86_64.iso /Qemu/Test/Iso/
# chown -R qemu:qemu /Qemu/
# cd /var/lib/libvirt/images
# ln -s /Qemu/Test/Iso/archlinux-2018.02.01-x86_64.iso
# ll /Qemu/Test/Iso/archlinux-2018.02.01-x86_64.iso
-rw-rw-r--. 1 qemu qemu 565182464 Feb 23 08:53 /Qemu/Test/Iso/archlinux-2018.02.01-x86_64.iso
# ll /var/lib/libvirt/images
lrwxrwxrwx. 1 root root 46 Feb 24 09:39 archlinux-2018.02.01-x86_64.iso -> /Qemu/Test/Iso/archlinux-2018.02.01-x86_64.iso

这非常好用,虚拟机已经部署并且正在运行。

可能的解决方案:

  • 将所有权更改为实际图像的整个路径到用户/组qemu

    # chown -R qemu:qemu /Qemu/
    
  • 将读取+执行权限授予他人(世界)到整个图像路径

    # chmod -R o+rx /Qemu/
    

警告:这可能会产生安全隐患!

  • 创建一个由user / group qemu拥有的目录,专用于将符号链接的iso图像

    # mkdir -p /Qemu/Test/Iso
    # chown -R qemu:qemu /Qemu/
    

要点:

即使所有内容都由具有root权限的用户完成,使用VM映像的实际用户也是qemu。将qemu添加到wheel组仍然需要提供进行身份验证的方法,因为它是一个非登录用户,所以它可能很棘手。