首页 文章

Virt-install无法找到符号链接背后的图像

提问于
浏览
1

我在设置脚本以启动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命令时,它返回以下错误 .

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

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

1 回答

  • 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/
    

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

    • 创建一个由user / group qemu拥有的目录,专用于将被符号链接的iso映像
    # mkdir -p /Qemu/Test/Iso
    # chown -R qemu:qemu /Qemu/
    

    摘要:

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

相关问题