注意
本文档适用于 Ceph 开发版本。
Ceph 文件系统擦除
CephFS 提供了一组清理命令,供集群管理员(操作员)检查文件系统的完整性。清理可以分为两部分:
正向清理:清理操作从文件系统的根(或子目录)开始,检查层次结构中可以触及的所有内容以确保一致性。
反向清理:清理操作检查文件系统池中的每个 RADOS 对象,并将其映射回文件系统层次结构。
本文档详细介绍了启动和控制正向清理(以下简称清理)的命令。
警告
CephFS 正向清理在 rank 0 上启动和操作。所有清理命令必须指向 rank 0。
启动文件系统清理
要为目录树启动清理操作,请使用以下命令:
ceph tell mds.<fsname>:0 scrub start <path> [scrubopts] [tag]
其中scrubopts
是一个逗号分隔的列表,recursive
, force
或repair
和tag
是一个可选的自定义字符串标签(默认是生成的 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_mdsdir
和recursive
: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. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.