首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Virt-install找不到符号链接后面的图像

Virt-install找不到符号链接后面的图像
EN

Stack Overflow用户
提问于 2016-04-15 21:59:49
回答 1查看 1.5K关注 0票数 1

今天我在设置一个启动kvm实例的脚本时遇到了一些奇怪的行为,我希望大家能够权衡一下这里发生的事情。

安装程序:我有一个用启动kvm的脚本。

代码语言:javascript
复制
virt-install ... --disk=image.qcow2 ...

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

我的目录结构应该如下所示:

代码语言:javascript
复制
startKvm.sh
image.qcow2 -> image_v2.0.qcow2
image_v2.0.qcow2
image_v1.0.qcow2

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

错误内部错误:连接到监视器时已退出进程: datetime:-drive file=/path/Image.qau 2,if=none,id=drid-ide0-0,format=qcow2:未能打开磁盘映像/路径/Image.qco 2:无法打开文件:拒绝权限

对原因和解决方案的思考?

EN

回答 1

Stack Overflow用户

发布于 2018-02-24 09:20:19

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

无法完成安装:“内部错误:在连接到监视器时已退出进程: 2018-02-24T07:53:19.064452Z qemu-kvm:-drive /var/lib/libvirt/images/archlinux-2018.02.01-x86_64.iso: format=raw,if=none,id=驱动器-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':权限”

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

测试用例

运行virt-manager的用户: yahol (轮/管理组)

Iso或qcow2图像定位:/home/yahol/isos/archlinux-2018.02.01-x86_64.iso

注:请忽略时间戳,因为我已经黑了这个答案超过两天。已经很晚了,我太累了,无法在前一天完成它。

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

代码语言:javascript
复制
$ 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:

代码语言:javascript
复制
# 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属于用户根,而实际文件仍然有普通用户的用户/组。通过virt-manager建立和部署虚拟机。请注意用户/图像文件组如何更改为qemu:

代码语言:javascript
复制
$ 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

此时,无论是virt-manager还是virt-install,VM管理器都会抛出前面提到的错误。这是因为用户qemu没有访问完整路径的权限。用户yahol的主页只供用户yahol访问:

代码语言:javascript
复制
$ ll -d /home/yahol/
drwx------. 7 yahol yahol 258 Feb 24 08:37 /home/yahol/

现在,让我们创建另一条qemu可以完全访问的路径:

代码语言:javascript
复制
# 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

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

可能的解决办法:

  • 将所有权更改为整个路径到实际映像,以用户/组qemuchown -R qemu:qemu /Qemu/
  • 将read+execute权限授予其他人(世界)到imagechmod -R o+rx /Qemu/的整个路径

警告:,这可能对安全有影响!

  • 创建一个用户/组qemu所拥有的目录,该目录将是symlinkedmkdir -p /Qemu/Test/Iso # chown -R qemu:qemu /Qemu/

摘要:

尽管所有操作都是由具有根权限的用户完成的,但处理VM映像的实际用户是qemu。将qemu添加到would组仍然需要提供身份验证的方法,而且,由于它是一个非登录用户,这可能会很棘手。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36657536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档