news 2026/3/17 10:56:03

ceph中librbd模式下的qemu+librbd

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ceph中librbd模式下的qemu+librbd

https://docs.ceph.com/en/latest/rbd/qemu-rbd/

下面我把我们前面讨论的关键点串起来,给你一份“从概念到可执行命令”的完整说明,帮助你在已有rbdpool/image的前提下,正确使用qemu + librbd来启动虚拟机、进入虚拟机、验证磁盘、以及测试结束后的清理。


1. 你目前上下文的核心结论

1) RBD 多客户端映射与一致性

  • 同一个 RBD 镜像可以被多个客户端“打开/映射”,但默认不允许多个写者同时写
  • Ceph 通过exclusive-lock(独占锁)来保护镜像,避免多个客户端不协调写导致文件系统/数据损坏。
  • 如果强行做多写(禁用锁或绕过协调),Ceph不会替你做写同步/缓存一致性,高概率出现数据损坏。

2) “客户端”到底是谁

在 qemu+librbd 方案里:

  • Ceph 的客户端是 QEMU 进程(准确说是 QEMU 通过 librbd 发 I/O)
  • 虚拟机(Guest OS)只看到一块“虚拟磁盘”(如/dev/vda),它不知道Ceph/RBD 的存在。

3) qemu + librbd 的真实作用

QEMU 负责“虚拟机(CPU/内存/设备)”,librbd 负责把 “Ceph RBD 镜像”作为“虚拟机磁盘后端”。

  • 你不需要rbd map(不会出现/dev/rbdX
  • 虚拟机里会出现标准块设备(/dev/vda等)
  • Ceph 侧锁/缓存/高级特性主要由 librbd 路径支撑,适合虚拟化工作负载

2. qemu + librbd 的 I/O 关系图(便于对号入座)

虚拟机内:/dev/vda 读写 ↓(virtio) 宿主机:QEMU 进程 ↓(librbd) Ceph:RBD(rbdpool/image)→ OSD

3. 开始前的准备(宿主机侧)

3.1 宿主机需要能访问 Ceph

通常需要:

  • /etc/ceph/ceph.conf
  • 一个具备 rbd 权限的 keyring(建议专用用户,如client.qemu

验证宿主机能访问镜像(这一步很关键):

rbd -p rbdpool info image

3.2 建议创建最小权限用户(推荐做法)

在任意有ceph命令权限的机器上:

ceph auth get-or-create client.qemu\mon'profile rbd'\osd'profile rbd pool=rbdpool'\-o /etc/ceph/ceph.client.qemu.keyring

然后把 keyring 放到你的宿主机/etc/ceph/,并验证:

rbd --id qemu -p rbdpool info image

4. 使用 qemu + librbd 启动虚拟机(核心命令)

4.1 最直观的启动命令(virtio 磁盘,串口模式)

sudoqemu-system-x86_64\-enable-kvm\-m4096-smp2\-drivefile=rbd:rbdpool/image:conf=/etc/ceph/ceph.conf:id=qemu:keyring=/etc/ceph/ceph.client.qemu.keyring,format=raw,if=virtio,cache=none\-nographic

你需要理解的点:

  • file=rbd:rbdpool/image:...:QEMU 直接用 librbd 打开 RBD 作为磁盘
  • if=virtio:虚拟机里通常显示为/dev/vda
  • -nographic:把虚拟机控制台绑定到当前终端(适合服务器无桌面环境)

5. 运行后如何“进入虚拟机”

5.1 你用的是-nographic

  • 当前运行 QEMU 的终端就是虚拟机控制台
  • 如果镜像里已经安装了可启动系统,你会看到启动日志,最终出现login:提示

5.2 如何退出(结束本次 VM 运行)

在该终端输入 QEMU 的退出组合键:

  • Ctrl + A,然后按X

退出后:

  • 虚拟机立刻停止(QEMU 进程结束)
  • 但 RBD 镜像里的数据仍然保留(下次启动还能继续用)

6. 如果你“什么都看不到”,通常是这两类原因

6.1 镜像是空盘(没有 OS)

这是最常见情况:你启动的只是一个空块设备,没有可引导系统。

解决:挂载 ISO 安装系统到这个 RBD 镜像。

6.2 系统没有串口输出

有些系统默认只输出到 VGA,不输出到串口,-nographic看起来就像“黑屏”。

解决:用 VNC 方式启动更直观。


7. 安装系统的推荐做法(挂 ISO + VNC 最稳)

如果rbdpool/image还没装系统,建议这样做:

7.1 用 VNC 启动并挂载 ISO

sudoqemu-system-x86_64\-enable-kvm\-m4096-smp2\-drivefile=rbd:rbdpool/image:conf=/etc/ceph/ceph.conf:id=qemu:keyring=/etc/ceph/ceph.client.qemu.keyring,format=raw,if=virtio,cache=none\-cdrom ubuntu-22.04-live-server-amd64.iso\-boot d\-vnc :0

然后用 VNC 客户端连接:

  • 宿主机IP:0

安装完成后,下次不挂 ISO,直接启动即可。


8. 启动后在虚拟机里验证“磁盘确实存在”

在虚拟机里执行:

lsblk

你应该看到类似:

vda 50G disk └─vda1 ... part /

这说明:

  • 虚拟机看到了一块磁盘(虚拟磁盘)
  • 这块虚拟磁盘的后端就是rbdpool/image

9. 测试结束后如何删除/清理环境(按你做过的步骤删)

9.1 关闭虚拟机

-nographicCtrl + AX
或在宿主机 kill QEMU 进程。

9.2 如果你创建了client.qemu(可选清理)

ceph auth del client.qemusudorm-f /etc/ceph/ceph.client.qemu.keyring

9.3 如果镜像是测试镜像并希望删除

先确认没有 watcher:

rbd status rbdpool/image

然后删除:

rbdrmrbdpool/image

qemu+librbd 本身不会在宿主机创建/dev/rbdX,所以通常不会遗留块设备映射需要清理。


10. 使用上的关键注意事项(避免踩坑)

  1. 同一个 RBD 镜像建议单写者(单 VM / 单 QEMU 进程 RW)

  2. 如果你发现无法启动或报 “resource busy”,要考虑:

    • 另一个客户端还在打开该镜像
    • exclusive-lock 正在被其他写者持有
  3. 若你的目标是“多节点共享读写同一份数据”,通常应该选CephFS,不是多写 RBD


如果你愿意把下面三条信息告诉我,我可以把命令进一步“按你环境定制到一次成功”:

  1. 你的rbdpool/image目前是空盘还是已经装了系统
  2. 宿主机发行版与 QEMU 版本(以及是否有桌面/VNC 条件)
  3. 你希望用串口登录(-nographic)还是更直观的 VNC/SSH 方式

你这个问题非常关键,而且确实是我前面漏掉的一步。下面我把QEMU 是什么、为什么要装、以及在常见系统上如何安装一次性讲清楚,并且和qemu + librbd强关联起来。


一、先说结论:QEMU 不是下载一个文件,而是安装软件包

QEMU 是一个虚拟化程序(用户态进程),
通常通过操作系统的软件包管理器安装,而不是手动下载源码。

安装完成后,你才能使用:

qemu-system-x86_64

二、为什么一定要装 QEMU(结合你的上下文)

qemu + librbd方案中:

  • QEMU = 虚拟机本身
  • librbd = QEMU 访问 Ceph RBD 的方式

没有 QEMU:

  • 就没有虚拟机
  • 也就谈不上 “qemu + librbd”

三、不同系统上如何安装 QEMU(最重要部分)

下面我按你最可能用的几种环境来讲。


1️⃣ Ubuntu / Debian 系(最常见)

1. 安装基础包(推荐)

sudoaptupdatesudoaptinstall-y qemu-kvm qemu-system-x86 qemu-utils

说明:

  • qemu-system-x86
    → 提供qemu-system-x86_64
  • qemu-kvm
    → 启用 KVM 加速(必须)
  • qemu-utils
    → 包含qemu-img等工具

2. 安装 Ceph 用户态库(librbd)

sudoaptinstall-y ceph-common

这一步非常关键:

  • 提供librbd
  • 提供librados
  • QEMU 才能支持rbd:后端

3. 验证是否安装成功

qemu-system-x86_64 --version

再验证 QEMU 是否支持 RBD:

qemu-img --help|greprbd

如果能看到rbd,说明qemu + librbd 条件满足


2️⃣ CentOS / Rocky / Alma / RHEL 系

1. 安装 QEMU + KVM

sudodnfinstall-y qemu-kvm qemu-img qemu-system-x86

2. 安装 Ceph 客户端库

sudodnfinstall-y ceph-common

3️⃣ openEuler(你前面提到过这个环境,我单独说)

1. 安装 QEMU

sudodnfinstall-y qemu qemu-kvm

2. 安装 Ceph 客户端

sudodnfinstall-y ceph-common

3. 验证

qemu-system-x86_64 --version qemu-img --help|greprbd

4️⃣ 验证 KVM 是否可用(强烈建议)

QEMU 能跑 ≠ 有硬件加速。

1. CPU 是否支持虚拟化

egrep-c'(vmx|svm)'/proc/cpuinfo

输出 > 0 即支持

2. KVM 设备是否存在

ls/dev/kvm

如果不存在:

  • BIOS 可能没开虚拟化
  • 或内核没加载 KVM 模块

四、QEMU 安装后,你“到底得到了什么”

安装完成后,你会得到:

命令作用
qemu-system-x86_64启动虚拟机
qemu-img管理磁盘镜像
librbd让 QEMU 能访问 Ceph RBD
/dev/kvm硬件加速(如果支持)

五、和你前面完整流程的对应关系(串起来)

1️⃣ 安装 QEMU
2️⃣ 安装 ceph-common(librbd)
3️⃣ 准备rbdpool/image
4️⃣ 执行:

qemu-system-x86_64...file=rbd:rbdpool/image...

5️⃣ 虚拟机启动,虚拟机里看到磁盘/dev/vda


六、常见“坑”提前提醒(很重要)

1️⃣ QEMU 装了,但不支持 rbd

  • 原因:没装ceph-common
  • 表现:启动时报unknown protocol 'rbd'

2️⃣ QEMU 能跑,但非常慢

  • 原因:没启用 KVM
  • 解决:确认/dev/kvm存在 +-enable-kvm

七、一句话终极总结(你可以直接记)

QEMU 是虚拟机本身,通过系统包管理器安装;
安装 ceph-common 后,QEMU 才能通过 librbd 使用 Ceph RBD;
qemu + librbd = 用 Ceph RBD 作为虚拟机磁盘后端。


如果你愿意,下一步我可以帮你:

  • 一步一步从“空服务器”到“跑起来一台 Ceph-backed VM”
  • 或把你现在的环境(发行版 + 版本)告诉我,我给你精确到一条命令的安装清单

这个官方文档页面“QEMU and Block Devices”(对应 Ceph 文档的qemu-rbd部分)讲解了如何用 QEMU(虚拟机管理器)与 Ceph RBD(RADOS Block Device)结合使用块设备镜像,主要内容包括用途、基本使用方式和相关操作细节。以下是提炼后的结构化总结: (docs.ceph.com)


1. 目的和使用场景

这个页面说明了 Ceph RBD 与 QEMU/KVM 的典型使用场景:

  • 最常见的是将 Ceph RBD 镜像作为虚拟机的块设备后端,可以高效地为虚拟机提供磁盘。 (docs.ceph.com)
  • 用户可以先创建一个包含操作系统、应用等内容的“金盘镜像”,对其做快照,再克隆给多个虚拟机使用。这样即可快速部署多个虚拟机实例,而不用每次都完整复制整个磁盘镜像。 (docs.ceph.com)

2. 准备条件

为了在 QEMU 中使用 Ceph RBD:

  • 必须有一个正在运行的 Ceph 集群。 (docs.ceph.com)
  • QEMU 需要能够访问 Ceph 配置(如ceph.conf)和相应的 keyring,以获取监视器和 OSD 服务的访问权限。默认情况下,QEMU 会假定配置文件在/etc/ceph/$cluster.conf,并默认使用client.admin,除非指定其他用户。 (docs.ceph.com)
  • 在命令或配置中指定用户时,应使用用户 ID 而不是完整的client.<id>形式。 (docs.ceph.com)

3. 基本操作与命令

3.1 QEMU-img 操作 RBD 镜像

文档列举了如何使用qemu-img操作 RBD 镜像的基本方法: (docs.ceph.com)

  • 创建一个 RBD 镜像(block 设备):

    qemu-img create -f raw rbd:{pool-name}/{image-name}{size}

    建议使用raw格式,因为其他格式可能带来性能开销或影响 live migration 等功能。 (docs.ceph.com)

  • 调整大小(resize):

    qemu-img resize rbd:{pool-name}/{image-name}{size}

    用于在线或离线调整 RBD 镜像容量。 (docs.ceph.com)

  • 查看信息

    qemu-img info rbd:{pool-name}/{image-name}

    显示镜像的基本属性、大小等信息。 (docs.ceph.com)


4. 在 QEMU 中使用 RBD 镜像

文档说明了如何在 QEMU 命令行中使用 RBD 镜像作为虚拟机的磁盘后端:

  • QEMU 自 0.15 版本起,无需先在宿主机内核做rbd map,可以直接用 librbd 在用户态把 RBD 镜像当作块设备传递给虚拟机。这样的好处是:

    • 避免额外的上下文切换
    • 能利用 RBD 缓存机制提升性能

    示例说明:可以将一个 RBD 镜像转换成 QEMU 支持的虚拟磁盘镜像,然后直接在 QEMU 启动命令中引用,例如: (docs.ceph.com)

    qemu -m1024-driveformat=raw,file=rbd:data/squeeze

    这表示直接在 QEMU 中挂载名为data/squeeze的 RBD 镜像作为虚拟机磁盘。 (docs.ceph.com)


5. 性能与缓存

文档还提到:

  • QEMU 的缓存选项可以与 RBD 缓存一起工作,用于优化性能。默认情况下,RBD 的缓存策略可以被 QEMU 的 cache 设置覆盖(例如使用 writeback 模式等)。 (docs.ceph.com)
  • 需要注意,在某些组合配置下,不正确的缓存设置可能导致数据不一致或在 QEMU 异常退出时造成文件系统损坏,因此必须在使用时谨慎选择 cache 参数。 (docs.ceph.com)

6. 支持的高级功能

该节还提及 RBD 与 QEMU 集成支持的一些高级功能配置:

  • 支持 TRIM/Discard操作,让虚拟机内的文件系统在删除数据后能通知底层 RBD 镜像回收空间,这需要在 QEMU 命令或 libvirt 配置中显式启用。 (docs.ceph.com)

简要总结

这个页面主要讲解了:

  • 如何在 QEMU 环境下使用 Ceph RBD 作为虚拟机块设备
  • 如何通过 qemu-img 创建、调整和查看 RBD 镜像
  • 如何在 QEMU 启动命令中直接引用 RBD 镜像,并利用 librbd 做用户态访问,从而提升效率
  • cache 与高级 I/O 配置注意事项

整体核心是:

Ceph RBD 与 QEMU/KVM 的集成提供了高效、灵活的虚拟机块存储方案,通过 librbd 可以在用户态直接向 Ceph 读取/写入块数据,从而实现可扩展、可缓存的 VM 存储后端。(docs.ceph.com)


如你需要,我也可以把这个页的内容整理成命令示例 + 参数解释版本(便于实验/实践使用)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/12 11:52:06

打造专属AI客服:基于LobeChat与GPU算力的完整方案

打造专属AI客服&#xff1a;基于LobeChat与GPU算力的完整方案 在企业服务智能化浪潮中&#xff0c;一个真实而紧迫的问题正不断浮现&#xff1a;如何在保障数据安全的前提下&#xff0c;构建响应迅速、可扩展且成本可控的AI客服系统&#xff1f;许多公司曾寄希望于OpenAI等云服…

作者头像 李华
网站建设 2026/3/13 1:48:36

Swagger2Word完整指南:快速将API文档转为专业Word格式

Swagger2Word完整指南&#xff1a;快速将API文档转为专业Word格式 【免费下载链接】swagger2word 项目地址: https://gitcode.com/gh_mirrors/swa/swagger2word Swagger2Word是一款功能强大的开源工具&#xff0c;专门用于将Swagger/OpenAPI接口文档转换为格式规范的Wo…

作者头像 李华
网站建设 2026/3/13 7:29:15

FEMM软件下载与安装

FEMM软件下载与安装 官网下载地址 Finite Element Method Magnetics:Finite Element Method Magnetics Finite Element Method Magnetics / Wiki / Download 下载 安装包非常小, 只有7.5MB. 安装 双击启动可执行程序;点击我接受; 选择安装路径; 选择开始菜单, 保持默认; 开…

作者头像 李华
网站建设 2026/3/7 23:50:30

LobeChat支持Markdown渲染:技术文档输出利器

LobeChat支持Markdown渲染&#xff1a;技术文档输出利器 在今天&#xff0c;一个工程师与AI助手的日常对话可能不再是简单的问答&#xff0c;而是这样一幕&#xff1a;你输入“请帮我写一份关于微服务鉴权方案的技术文档”&#xff0c;几秒钟后&#xff0c;屏幕上跳出一篇结构清…

作者头像 李华
网站建设 2026/3/14 22:39:42

关于数组和指针的一些问题

#include <stdio.h> #include <string.h> int main() {//指针和数组笔试题解析int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));//16 a&a[0]//sizeof(数组名)&#xff0c;计算的是整个数组的大小单位是字节printf("%d\n", sizeof(a0));/…

作者头像 李华