注意

本文档适用于 Ceph 的开发版本。

快照

快照是某个特定时间点上图像的只读逻辑副本:一个检查点。Ceph 块设备的一项高级功能是,您可以为图像创建快照,以保留时间点状态历史记录。Ceph 还支持快照分层,这使您可以快速轻松地克隆图像(例如 VM 图像)。Ceph 块设备快照是使用 rbd 命令和几个更高级别的接口(包括 QEMUlibvirtOpenStackOpenNebulaCloudStack)进行管理的。

重要

要使用 RBD 快照,您必须拥有一个正在运行的 Ceph 集群。

注意

由于 RBD 不知道图像(卷)内的任何文件系统,因此除非在挂载(附加)操作系统中进行协调,否则快照只是 崩溃一致的。因此,我们建议在创建快照之前暂停或停止 I/O。

如果卷包含文件系统,则在创建快照之前,文件系统应处于内部一致状态。未经写入静默处理而创建的快照在重新挂载之前可能需要进行 fsck 检查。要静默 I/O,您可以使用 fsfreeze 命令。有关更多详细信息,请参阅 fsfreeze(8) 手册页。

对于虚拟机,可以使用 qemu-guest-agent 在创建快照时自动冻结文件系统。

Cephx Notes

启用 cephx 身份验证(默认启用)时,您必须指定用户名或 ID 以及包含相应密钥的密钥环的路径。有关详细信息,请参阅 用户管理

rbd --id {user-ID} --keyring /path/to/secret [commands]
rbd --name {username} --keyring /path/to/secret [commands]

例如

rbd --id admin --keyring /etc/ceph/ceph.keyring [commands]
rbd --name client.admin --keyring /etc/ceph/ceph.keyring [commands]

提示

将用户和密钥添加到 CEPH_ARGS 环境变量中,以避免重新输入这些参数。

Snapshot Basics

以下过程演示如何使用 rbd 命令创建、列出和删除快照。

Create Snapshot

要创建快照,请使用 rbd snap create 命令并指定池名称、图像名称和快照名称

rbd snap create {pool-name}/{image-name}@{snap-name}

例如

rbd snap create rbd/foo@snapname

List Snapshots

要列出图像的快照,请使用 rbd snap ls 命令并指定池名称和图像名称

rbd snap ls {pool-name}/{image-name}

例如

rbd snap ls rbd/foo

Roll back Snapshot

要回滚到快照,请使用 rbd snap rollback 命令并指定池名称、图像名称和快照名称

rbd snap rollback {pool-name}/{image-name}@{snap-name}

例如

rbd snap rollback rbd/foo@snapname

注意

将图像回滚到快照意味着用快照中的数据覆盖图像的当前版本。执行回滚所需的时间随着图像大小的增加而增加。从快照克隆比将图像回滚到快照更快。从快照克隆是返回到先前存在状态的首选方法。

Delete a Snapshot

要删除快照,请使用 rbd snap rm 命令并指定池名称、图像名称和快照名称

rbd snap rm {pool-name}/{image-name}@{snap-name}

例如

rbd snap rm rbd/foo@snapname

注意

Ceph OSD 异步删除数据,因此删除快照不会立即释放底层 OSD 的容量。此过程称为“snaptrim”,在 ceph status 输出中也如此称呼。

Purge Snapshots

要删除所有快照,请使用 rbd snap purge 命令并指定池名称和图像名称

rbd snap purge {pool-name}/{image-name}

例如

rbd snap purge rbd/foo

Layering

Ceph 支持创建块设备快照的多个写时复制 (COW) 克隆。快照分层使 Ceph 块设备客户端能够非常快速地创建图像。例如,您可以创建一个写入了 Linux VM 的块设备图像,对图像进行快照,保护快照,并根据需要创建任意数量的写时复制克隆。快照是只读的,因此克隆快照简化了语义,使得能够快速创建克隆。

注意

术语“父级”和“子级”分别指 Ceph 块设备快照(父级)和从快照克隆的相应图像(子级)。这些术语对于下面的命令行使用非常重要。

每个克隆图像(子级)都存储对其父图像的引用,这使得克隆图像能够打开父快照并读取它。

快照的写时复制克隆的行为与任何其他 Ceph 块设备图像完全相同。您可以读取、写入、克隆和调整克隆图像的大小。对克隆图像没有特殊限制。但是,快照的写时复制克隆依赖于快照,因此在克隆快照之前必须保护快照。下图描述了此过程。

注意

Ceph 仅支持克隆“RBD format 2”图像(即,未指定 --image-format 1 创建的图像)。Linux 内核客户端从 3.10 版本开始支持克隆图像。

Getting Started with Layering

Ceph 块设备分层是一个简单的过程。您必须有一个图像。您必须创建该图像的快照。您必须保护该快照。执行完这些步骤后,您就可以开始克隆快照了。

克隆图像具有对父快照的引用,并包含池 ID、图像 ID 和快照 ID。包含池 ID 意味着您可以将快照从一个池克隆到另一个池中的图像。

  1. 图像模板: 块设备分层的常见用例是创建用作克隆模板的基础图像和快照。例如:用户可以为 Linux 发行版(例如 Ubuntu 22.04)创建图像,并创建其快照。用户可能偶尔会更新图像并创建新的快照(通过使用 sudo apt-get updatesudo apt-get upgradesudo apt-get dist-upgrade,然后使用 rbd snap create 等命令)。随着图像的成熟,用户可以克隆任何一个快照。

  2. 扩展模板: 更高级的用例包括扩展模板图像以提供比基础图像更多的信息。例如,用户可以克隆图像(例如 VM 模板)并安装其他软件(例如数据库、内容管理系统、分析系统),然后快照扩展图像,该图像本身可以像基础图像一样更新。

  3. 模板池: 使用块设备分层的一种方法是创建一个包含 (1) 用作模板的基础图像和 (2) 这些模板的快照的池。然后,您可以向用户扩展只读权限,以便他们可以克隆快照,即使他们没有允许他们在池中写入或执行的权限。

  4. 图像迁移/恢复: 使用块设备分层的一种方法是将数据从一个池迁移或恢复到另一个池。

Protecting a Snapshot

克隆会访问父快照。如果用户不小心删除了父快照,所有克隆都会损坏。为防止数据丢失,在克隆快照之前必须保护快照

rbd snap protect {pool-name}/{image-name}@{snapshot-name}

例如

rbd snap protect rbd/foo@snapname

注意

您不能删除受保护的快照。

Cloning a Snapshot

要克隆快照,请指定父池、父图像和父快照;以及子池和图像名称。在克隆快照之前必须保护快照

rbd clone {pool-name}/{parent-image-name}@{snap-name} {pool-name}/{child-image-name}

例如

rbd clone rbd/foo@snapname rbd/bar

注意

您可以将快照从一个池克隆到另一个池中的图像。例如,您可以将只读图像和快照作为模板保存在一个池中,并将可写入克隆保存在另一个池中。

Unprotecting a Snapshot

在删除快照之前,必须先取消保护它。此外,您不能删除具有克隆引用的快照。必须在取消保护快照之前平展或删除快照的每个克隆

rbd snap unprotect {pool-name}/{image-name}@{snapshot-name}

例如

rbd snap unprotect rbd/foo@snapname

Listing Children of a Snapshot

要列出快照的子级,请使用 rbd children 命令并指定池名称、图像名称和快照名称

rbd children {pool-name}/{image-name}@{snapshot-name}

例如

rbd children rbd/foo@snapname

Flattening a Cloned Image

克隆图像保留对父快照的引用。当您从克隆中删除对父快照的引用时,您通过将快照中存储的数据复制到克隆中来有效地“平展”克隆。平展克隆所需的时间随着快照大小的增加而增加。要删除快照,必须首先平展子图像(或删除它们)

rbd flatten {pool-name}/{image-name}

例如

rbd flatten rbd/bar

注意

由于平展图像包含快照中存储的所有数据,因此平展图像占用的存储空间比分层克隆多。

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入