注意

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

Ceph 文件系统擦除

CephFS 提供了一组清理命令,供集群管理员(操作员)检查文件系统的完整性。清理可以分为两部分:

  1. 正向清理:清理操作从文件系统的根(或子目录)开始,检查层次结构中可以触及的所有内容以确保一致性。

  2. 反向清理:清理操作检查文件系统池中的每个 RADOS 对象,并将其映射回文件系统层次结构。

本文档详细介绍了启动和控制正向清理(以下简称清理)的命令。

警告

CephFS 正向清理在 rank 0 上启动和操作。所有清理命令必须指向 rank 0。

启动文件系统清理

要为目录树启动清理操作,请使用以下命令:

ceph tell mds.<fsname>:0 scrub start <path> [scrubopts] [tag]

其中scrubopts是一个逗号分隔的列表,recursive, forcerepairtag是一个可选的自定义字符串标签(默认是生成的 UUID)。一个示例命令是:

ceph tell mds.cephfs:0 scrub start / recursive
{
    "return_code": 0,
    "scrub_tag": "6f0d204c-6cfd-4300-9e02-73f382fd23c1",
    "mode": "asynchronous"
}

递归清理是异步的(如输出中所示)。 in the output above). Asynchronous scrubs must be polled using scrub status来轮询以确定

清理标签用于区分清理,并将每个 inode 在默认数据池中的第一个数据对象(其中存储了回溯信息)标记为scrub_tag扩展属性,其值为标签。您可以通过使用 RADOS 实用程序查看扩展属性来验证 inode 是否已清理。

清理适用于多个活动的 MDS(多个 rank)。清理由 rank 0 管理,并适当分配到 MDS。

监控(进行中)文件系统清理

可以使用scrub status命令监控和轮询进行中的清理状态。该命令列出了进行中的清理(通过标签标识)以及启动清理时使用的路径和选项:

ceph tell mds.cephfs:0 scrub status
{
    "status": "scrub active (85 inodes in the stack)",
    "scrubs": {
        "6f0d204c-6cfd-4300-9e02-73f382fd23c1": {
            "path": "/",
            "options": "recursive"
        }
    }
}

status显示在任何给定时间计划清理的 inode 数量,因此,可能会在后续scrub status调用中更改。此外,还会显示清理操作的摘要(包括操作状态和触发清理的路径):ceph状态:

ceph status
[...]

task status:
  scrub status:
      mds.0: active [paths:/]

[...]

当清理不再出现在此列表中时,清理即完成(尽管未来版本中可能会更改)。任何损坏将通过集群健康警告报告。

控制(进行中)文件系统清理

  • 暂停:暂停进行中的清理操作会导致在飞行中的 RADOS 操作(对于当前正在清理的 inode)完成后,不再清理新的或挂起的 inode:

    ceph tell mds.cephfs:0 scrub pause
    {
        "return_code": 0
    }
    

    The scrub status暂停后反映了暂停状态。在此状态下,通过scrub start启动新的清理操作将只是将 inode 加入清理队列:

    ceph tell mds.cephfs:0 scrub status
    {
        "status": "PAUSED (66 inodes in the stack)",
        "scrubs": {
            "6f0d204c-6cfd-4300-9e02-73f382fd23c1": {
                "path": "/",
                "options": "recursive"
            }
        }
    }
    
  • 恢复:恢复操作会重新启动暂停的清理操作:

    ceph tell mds.cephfs:0 scrub resume
    {
        "return_code": 0
    }
    
  • 中止:中止进行中的清理操作会在飞行中的 RADOS 操作(对于当前正在清理的 inode)完成后,从清理队列中移除挂起的 inode(从而中止清理):

    ceph tell mds.cephfs:0 scrub abort
    {
        "return_code": 0
    }
    

损坏

文件系统清理可以报告和修复以下类型的损坏:

  • DENTRY:inode 的 dentry 缺失。

  • DIR_FRAG:inode 的目录片段缺失。

  • BACKTRACE:inode 在数据池中的回溯信息损坏。

可以使用以下命令修复上述命名的 MDS 损坏:

ceph tell mds.<fsname>:0 scrub start /path recursive, repair, force

如果清理能够修复损坏,相应的条目将自动从损坏表中删除。

使用递归清理评估异常

  • 为了评估异常,即清除~mdsdir中的异常目录,请使用以下命令:

    ceph tell mds.<fsname>:0 scrub start ~mdsdir recursive
    
  • ~mdsdir在 CephFS 根目录进行清理时,默认情况下不会将scrub_mdsdirrecursive:

    ceph tell mds.<fsname>:0 scrub start / recursive,scrub_mdsdir
    

加入队列。为了在根目录执行异常评估,请使用标志

  • 在特定 MDS 上抽取异常文件夹内容,请使用以下命令:

    ceph tell mds.<fsname>:0 dump stray
    {
    "strays": [
        {
            "ino": "0x100000001f7",
            "stray_prior_path": "/dir/dir1",
            "client_caps": [
                {
                    "client_id": 4156,
                    "pending": "pAsLsXsFscr",
                    "issued": "pAsLsXsFscr",
                    "wanted": "-",
                    "last_sent": 3
                }
            ],
            "loner": -1,
            "want_loner": -1,
            "mds_caps_wanted": [],
            "is_subvolume": false
        }
    ]}
    

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.