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,临时关闭测试:
测试后再根据需求调整SELinux规则。setenforce 0 - 若启用AppArmor,检查Qemu相关规则是否限制了模块加载,临时调整或关闭后测试。
- 若启用SELinux,临时关闭测试:
检查文件系统挂载属性
查看/usr/lib/x86_64-linux-gnu所在文件系统的挂载参数,确认无noexec、nodev等限制:mount | grep /usr/lib若存在限制,修改
/etc/fstab移除对应属性后重新挂载。
内容的提问来源于stack exchange,提问作者jlecour
相关产品推荐
相关产品推荐

