注意
本文档适用于 Ceph 的开发版本。
MDS 内部数据结构
- CInode
CInode 包含文件的元数据,每个文件有一个 CInode。CInode 存储文件所有者、文件大小等信息。
- CDentry
CDentry 通过将 inode 与文件/目录名称相关联来将 inode 和文件连接在一起。一个 CDentry 最多链接到一个 CInode(它可能不链接到任何 CInode)。一个 CInode 可以被多个 CDentry 链接。
- CDir
CDir 仅存在于目录 inode,它用于链接目录下的 CDentry。当目录被分段时,一个 CInode 可以有多个 CDir。
这些数据结构按如下方式链接在一起
CInode
CDir
| \
| \
| \
CDentry CDentry
CInode CInode
CDir CDir
| | \
| | \
| | \
CDentry CDentry CDentry
CInode CInode CInode
在撰写本文档时,CInode 的大小约为 1400 字节,CDentry 的大小约为 400 字节,CDir 的大小约为 700 字节。这些数据结构相当大。如果您想向其中添加新字段,请务必小心。
- OpenFileTable
打开文件表跟踪打开的文件及其祖先目录。恢复 MDS 可以轻松获取打开文件的路径,从而显著减少加载打开文件 inode 的时间。表中的每个条目对应一个 inode,它记录 inode 的链接信息(父 inode 和 dentry 名称)。MDS 可以通过递归查找父 inode 的链接来构造 inode 的路径。打开文件表存储在 RADOS 对象的 omap 中,表条目对应于 omap 中的 KV 对。