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 配置选项来更改。

其它资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.