当前位置: 代码迷 >> 综合 >> CephFS限制和 POSIX 标准
  详细解决方案

CephFS限制和 POSIX 标准

热度:28   发布时间:2023-12-08 11:55:40.0

默认情况下,在一个Ceph Storage 集群上创建多个CephFS是禁用的。 尝试创建额外的 CephFS会失败,并显示以下错误消息:

Error EINVAL: Creation of multiple filesystems is disabled.

虽然技术上可行,但红帽不支持在一个Ceph 存储集群上拥有多个CephFS。 这样做会导致 MDS 或 CephFS 客户端节点意外终止。

CephFS在以下方面与严格的 POSIX 语义不同:

  • 如果客户端尝试写一个文件失败,写操作不一定是原子的。也就是说,客户端可能会对一个带有8MB缓冲区的O_SYNC标志打开的文件调用**write()**系统调用,然后意外终止,写入操作只能被部分应用。几乎所有的文件系统,甚至本地文件系统,都有这种行为。
  • 在写操作同时发生的情况下,超出对象边界的写操作不一定是原子的。 例如,写入者 A 写“aa|aa”, 写入者B 同时写“bb|bb”,其中“|” 是对象边界,写的是“aa|bb”而不是正确的“aa|aa”或“bb|bb”。
  • POSIX 包括 telldir()seekdir() 系统调用,它们允许您获取当前目录偏移量并返回到它。 因为 CephFS 可以随时对目录进行分片,所以很难为目录返回一个稳定的整数偏移量。 因此,将 seekdir() 系统调用调用到非零偏移量通常可能有效,但不能保证这样做。 调用 seekdir() 偏移 0 将始终有效。 这等效于 rewinddir() 系统调用。
  • 稀疏文件错误地传播到 stat() 系统调用的 st_blocks 字段。 CephFS 不会显式跟踪文件中分配或写入的部分,因为 st_blocks 字段总是由文件大小除以块大小的商来填充。 此行为会导致实用程序(例如 **du)**高估已用空间。
  • mmap() 系统调用将文件映射到多个主机上的内存时,写入操作不会连贯地传播到其他主机的缓存。 也就是说,如果一个页面缓存在主机 A 上,然后在主机 B 上更新,则主机 A 的页面不会连贯地失效。
  • CephFS 客户端提供一个隐藏的 .snap 目录,用于访问、创建、删除和重命名快照。 尽管该目录被排除在 readdir() 系统调用之外,但任何尝试创建同名文件或目录的进程都会返回错误。 此隐藏目录的名称可以在挂载时使用 -o snapdirname=.<new_name> 选项或使用 client_snapdir 配置选项进行更改。