【问题标题】:Centos-Libvirt: For running vm, virsh vol-delete command fails while deleting SCSI disk image: cannot unlink file 'XXX': SuccessCentos-Libvirt:对于运行 vm,virsh vol-delete 命令在删除 SCSI 磁盘映像时失败:无法取消链接文件 'XXX':成功
【发布时间】:2016-02-11 12:30:35
【问题描述】:

问题描述:

在 Centos 机器上,如果我们尝试通过 virsh vol-delete 命令删除运行 vm 的 SCSI 磁盘映像(通过 virt-manager 添加),得到“cannot unlink file 'XXX': Success”错误。

此错误间歇性发生,仅当我们在 vm 运行时尝试删除磁盘映像时才会发生。

所选组件的版本号(如果适用):

操作系统:CentOS Linux 版本 7.2.1511

Libvirt: [root@CV-HJ-CentOS7-02 镜像]# virsh 版本 针对库编译:libvirt 1.2.17 使用库:libvirt 1.2.17 使用 API:QEMU 1.2.17 运行管理程序:QEMU 1.5.3

复制步骤:

  1. 将 SCSI 磁盘从 virt manager 添加到 VM
  2. 从 virt-manager 启动 VM 并确认磁盘已作为 SCSI 连接。
  3. 尝试使用 virsh vol-delete 命令删除新添加的 SCSI 磁盘: virsh # vol-delete /var/lib/libvirt/images/.img

实际结果:

它给出以下错误: 错误:无法删除 vol /var/lib/libvirt/images/.img 错误:无法取消链接文件'/var/lib/libvirt/images/.img':成功

【问题讨论】:

    标签: libvirt


    【解决方案1】:

    您似乎在尝试删除磁盘映像,然后再将其与正在运行的 VM 分离,这是不允许的。您需要先分离磁盘,然后刷新池,然后才能将其删除。

    这是一个使用“f23-tst_default”作为我的虚拟机(域)名称和一个名为“f23-test_default.qcow2”的磁盘的示例,我想删除它:

    # virsh domblklist f23-tst_default
    Target     Source
    ------------------------------------------------
    vda        /var/lib/libvirt/images/f23-tst_default.img
    sda        /var/lib/libvirt/images/f23-tst_default.qcow2
    
    # virsh detach-disk f23-tst_default --target sda
    Disk detached successfully
    
    # virsh domblklist f23-tst_default                                 
    Target     Source
    ------------------------------------------------
    vda        /var/lib/libvirt/images/f23-tst_default.img
    
    # virsh pool-refresh default
    Pool default refreshed
    
    # virsh vol-delete --pool default f23-tst_default.qcow2            
    Vol f23-tst_default.qcow2 deleted
    

    如果您不执行“池刷新”,则 virsh 不会意识到域不再使用该卷,因此不允许您将其删除。

    【讨论】:

    • 得到同样的错误,即使在完成所有这些步骤之后。
    【解决方案2】:

    我遇到了同样的问题,这是一个文件权限问题。从 Centos 7.1 升级到 7.2 后我也遇到过。

    要解决此问题,请确保存储映像的目录的所有者(默认池为 /var/lib/libvirt/images)是 /etc/libvirt/qemu.conf 中“用户”选项中定义的所有者(默认用户是 qemu)。

    如果您还没有触及默认值,那么:

    # chown qemu:qemu /var/lib/libvirt/images
    

    然后创建一个新图像并尝试将其删除。应该会成功的。

    【讨论】:

    • 这也修复了vagrant destroy在使用vagrant-libvirt时的权限错误。见github.com/vagrant-libvirt/vagrant-libvirt/issues/641
    • 很好的解决方案,但在 Ubuntu 16.04.1 上我得到 chown: invalid user: 'qemu:qemu'。相反,我不得不 sudo chown libvirt-qemu:libvirtd /var/lib/libvirt/images 并且它起作用了。
    猜你喜欢
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2022-12-15
    • 2021-09-25
    相关资源
    最近更新 更多