环境:CentOS 7.6,win7镜像
利用qemu-nbd连接镜像文件,raw格式需要指定--format raw,不然会有告警

qemu-nbd --format=raw -c /dev/nbd0 rbd:vms/bb4d8022-542c-43d3-addc-283d8b32e1a5_disk

连接成功,但是/dev/nbd0px未出现,这和连接本地qcow2文件表现不一样,同时lsblk是能看到设备的nbd0px的,这让我一度怀疑qemu-nbd直接连接ceph pool是不行的,但是qemu-nbd又没有报错,无意中翻到一个帖子
https://tuxera.com/forum/viewtopic.php?f=2&t=1120&start=0
查看了/dev/mapper 目录,果然在

ps:在试qemu-nbd之前,也试过其他方法,这里小结一下
rbd-nbd:效果和qemu-nbd一样,因为也是没有/dev/nbd0px,以为不行,后来重新试了下,也在/dev/mapper目录
rbd-fuse:貌似只能把一个池全部映射出来,并且需要对文件kpartx -av,这样是挂载到设备/dev/loop0,同样在/dev/mapper目录下存在分区
guestfish/guestmount ,不支持ntfs,从CentOS7.2版本之后就不支持了,有官方说明,如果需要支持,需要下载源码修改编译
https://libguestfs.org/guestfs-faq.1.html#mount:-unsupported-filesystem-type-with-ntfs-in-rhel-7.2

libgusetfs自带的工具virt-copy-in,也可以拷贝文件到虚机内部
以上都是修改shutoff状态下虚机磁盘的方式,至于处于active状态的,貌似有qemu-guest-agent和cloud-init,这个如果有需求再研究

更新:
原来直接编译的nbd.ko 直接insmod nbd.ko,多个虚机同时修改,发现/dev/mapper下只有/dev/mapper/nbd0 的信息,后来重启了把nbd.ko 放入/lib/modules/$(uname -r)/extra/ ,执行

depmod -a
modprobe nbd max_part=16

连接之后又不在/dev/mapper下了,而是就在/dev/nbdxx下。。。真奇怪。。。另外连接到/dev/nbd之后,需要partprobe才能看到分区