1.4. Ceph 文件系统限制和 POSIX 标准
Ceph 文件系统通过以下方式偏离严格的 POSIX 语义:
-
如果客户端尝试编写文件失败,写入操作不一定是原子的。也就是说,客户端可能会在使用带有 8MB 缓冲区的
O_SYNC
标志打开的文件上调用write()
系统调用,然后意外终止写入操作,只能部分应用写入操作。几乎所有文件系统(甚至本地文件系统)都有此行为。 - 在同时发生写操作的情况下,超过对象边界的写入操作不一定是原子的。例如,写入器 A 写入 "aa|aa" 和 writer B 同时写入 "bb|bb",其中 "|" 是对象边界,编写 "aa|bb" 而不是正确的 "aa|aa" 或 "bb|bb"。
-
POSIX 包含
telldir()
和searchdir()
系统调用,允许您获取当前目录偏移并返回该偏移。由于 CephFS 可能会随时对目录进行碎片整理,因此难以为目录返回稳定的整数偏移。因此,调用searchdir()
系统调用到非零偏移通常可以正常工作,但不保证这样做。调用seekdir()
以偏移 0 将始终正常工作。这等同于rewinddir()
系统调用。 -
稀疏文件传播错误地传播到
stat()
系统调用的st_blocks
字段。CephFS 不会显式跟踪已分配或写入的文件部分,因为st_blocks
字段始终由按块大小划分的法定文件大小填充。此行为可导致du
等实用程序过量使用的空间。 -
当
mmap()
系统调用将文件映射到多个主机上的内存时,写入操作不会被一致的传播到其他主机的缓存中。也就是说,如果页面缓存在主机 A 上,然后在主机 B 上更新,则主机 A 页面不会被统一无效。 -
CephFS 客户端提供隐藏的
.snap
目录,用于访问、创建、删除和重命名快照。虽然该目录不包括在readdir()
系统调用中,但尝试创建同名文件或目录的任何进程都会返回错误。此隐藏目录的名称可以在挂载时通过-o snapdirname=.<new_name>
选项或使用client_snapdir
配置选项来更改。
其它资源
- 请参阅文件系统指南中的 Ceph 编排器部分管理 MDS 服务,以安装 Ceph 元数据服务器。
- 请参阅 Red Hat Ceph Storage File System Guide 中的 Ceph 文件系统部署一节,以创建 Ceph 文件系统。