注意

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

孤立列表和相关工具

孤立对象是在其关联的 RGW 对象被移除后遗留下的 RADOS 对象。通常,这些 RADOS 对象会自动移除,要么立即移除,要么通过一个称为“垃圾回收”的过程移除。然而,在 RGW 的发展过程中,可能存在一些阻止这些 RADOS 对象被删除的错误,这些 RADOS 对象可能正在消耗 Ceph 集群上的空间而没有任何用处。从 RGW 的角度来看,我们称这些 RADOS 对象为“孤立对象”。

孤立查找 -- 已弃用

radosgw-admin 工具具有(或曾经具有)三个子命令来帮助管理孤立对象,然而这些子命令已被(或即将被)弃用。这些子命令是

radosgw-admin orphans find ...
radosgw-admin orphans finish ...
radosgw-admin orphans list-jobs ...

然而,这些子命令存在两个关键问题。首先,这些子命令没有得到积极维护,因此没有跟踪 RGW 在功能和更新方面的演变。因此,目前对这些子命令能否准确识别真正孤立对象的信心较低。

其次,这些子命令将中间结果存储在集群本身上。当集群管理员面临存储空间不足并希望通过移除孤立对象来解决问题时,这可能会带来问题。中间结果可能会进一步加剧现有的集群存储容量紧张。

由于这些原因,“孤立查找”已被弃用。

孤立列表

由于“孤立查找”已被弃用,RGW 现在包含了一个额外的工具——“rgw-orphan-list”。运行时,它将列出可用的池并提示用户输入数据池的名称。此时,该工具可能会在经过一段较长时间后,生成一个本地文件,其中包含来自指定池的、看似孤立的 RADOS 对象。管理员可以自由地检查此文件并决定采取行动,例如从指定池中移除这些 RADOS 对象。

所有中间结果都存储在本地文件系统而不是 Ceph 集群上。因此,运行“rgw-orphan-list”工具应该不会对集群存储消耗量产生明显影响。

警告:实验状态

“rgw-orphan-list”工具是新的,因此目前被认为是实验性的。生成的孤立对象列表应在用于大规模删除操作之前进行“健全性检查”。

警告:指定数据池

如果指定了除 RGW 数据池之外的池,则工具的结果将是错误的。在此类池上找到的所有 RADOS 对象都将被错误地指定为孤立对象。

警告:未索引的存储桶

RGW 允许未索引的存储桶,即不维护其内容索引的存储桶。这并非典型配置,但它受到支持。因为“rgw-orphan-list”工具使用存储桶索引来确定哪些 RADOS 对象应该存在,所以未索引存储桶中的对象将被错误地列为孤立对象。

RADOS 列表

计算孤立对象列表的子步骤之一是将每个 RGW 对象映射到其对应的 RADOS 对象集。这是使用“radosgw-admin”的一个子命令完成的。

radosgw-admin bucket radoslist [--bucket={bucket-name}]

该子命令将生成一个支持所有 RGW 对象的 RADOS 对象列表。如果指定了存储桶,则该子命令将仅生成对应于指定存储桶中 RGW 对象的 RADOS 对象列表。

注意:共享存储桶标记

一些管理员会知道用于命名对应于 RGW 对象的 RADOS 对象的编码方案,其中包括特定于给定存储桶的“标记”。

然而,对应于一个 RGW 存储桶内容的 RADOS 对象可能包含指定不同存储桶的标记。此行为是 RGW 使用的“浅拷贝”优化所致。当较大的对象从一个存储桶复制到另一个存储桶时,只有“头部”对象被实际复制,而尾部对象是共享的。这些共享对象将包含原始存储桶的标记。

由 Ceph 基金会为您呈现

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