You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Libvirt迁移带Ceph RBD卷的VM失败:未知协议'rbd'

KVM/Qemu迁移挂载Ceph RBD卷的VM时RBD协议未知错误排查

问题复现

执行VM在线迁移命令:

virsh migrate --live --unsafe --verbose myvm qemu+ssh://IP/system tcp://IP

出现错误:

Failed to open module: /usr/lib/x86_64-linux-gnu/qemu/block-rbd.so: failed to map segment from shared object
2024-12-04T20:18:11.464782Z qemu-system-x86_64: -drive file=rbd:rbd/myvm_volume:id=libvirt:auth_supported=cephx\;none:mon_host=ceph01\:6789\;ceph02\:6789\;ceph03\:6789,file.password-secret=virtio-disk2-secret0,format=raw,if=none,id=drive-virtio-disk2: Unknown protocol 'rbd'

目标主机/var/log/libvirt/qemu/myvm.log中同样记录该错误。

排查与解决思路

  • 确认目标主机已安装Qemu RBD模块包
    Debian/Ubuntu系统需安装qemu-block-extra,RHEL/CentOS系统需安装qemu-kvm-block-rbd。
    检查安装状态:

    # Debian/Ubuntu
    dpkg -l | grep qemu-block-extra
    # RHEL/CentOS
    rpm -qa | grep qemu-kvm-block-rbd
    

    未安装则执行对应安装命令:

    # Debian/Ubuntu
    apt install qemu-block-extra
    # RHEL/CentOS
    yum install qemu-kvm-block-rbd
    
  • 检查RBD模块文件的权限与依赖
    查看文件权限,确保qemu用户有读取权限:

    ls -l /usr/lib/x86_64-linux-gnu/qemu/block-rbd.so
    

    检查模块依赖是否完整:

    ldd /usr/lib/x86_64-linux-gnu/qemu/block-rbd.so
    

    若缺失依赖(如librados.so、librbd.so),安装Ceph客户端包ceph-common。

  • 验证源/目标主机Qemu版本兼容性
    两端Qemu版本差异过大可能导致模块加载失败,对比版本:

    qemu-system-x86_64 --version
    

    尽量保持两端Qemu版本一致,必要时升级或降级。

  • 排查安全策略限制

    • 若启用SELinux,临时关闭测试:
      setenforce 0
      
      测试后再根据需求调整SELinux规则。
    • 若启用AppArmor,检查Qemu相关规则是否限制了模块加载,临时调整或关闭后测试。
  • 检查文件系统挂载属性
    查看/usr/lib/x86_64-linux-gnu所在文件系统的挂载参数,确认无noexec、nodev等限制:

    mount | grep /usr/lib
    

    若存在限制,修改/etc/fstab移除对应属性后重新挂载。

内容的提问来源于stack exchange,提问作者jlecour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:22:31