4.3. Ceph 文件系统
在 日志导入过程中
,无效的标头不再会导致分段错误
在以前的版本中,cephfs-journal-tool
在 日志导入
操作过程中不会检查标头。这将导致分段错误。
在这个版本中,在运行 journal import
命令时检查标头,缺失的标头不再会出现分段错误。
在灾难恢复过程中 CephFS-data-scan
现在可以按预期完成
在以前的版本中,在某些情况下,cephfs-data-scan
在灾难恢复过程中运行,但没有从 backtraces 创建缺少的目录片段或创建重复链接。因此,目录无法访问或崩溃 MDS。
在这个版本中,cephfs-data-scan
可以正确地重新创建缺少的目录片段,并按预期更正重复链接。
inode invalidation 操作现在可以更快地完成
在以前的版本中,在某些情况下会对内节点进行额外的引用。因此,需要内节点无效的操作会延迟到超时前,使其非常慢。
在这个版本中,避免额外的引用,允许这些操作在不造成不必要的延迟的情况下更快地完成。
不再分配大于 NFS 导出磁盘大小的空间
在以前的版本中,可以在没有分配存储块的情况下创建一个空文件。这些空文件可能会导致写操作在写入所需的文件区域时失败,带有 fallocate
等命令。
在这个版本中,fallocate
命令在 NFS 挂载点上失败,并显示 "Operation not supported" 错误,且不会在没有分配存储块的情况下创建空文件。
现在,代理守护进程日志会立即更新
在以前的版本中,glibc 库会缓冲代理守护进程中的日志消息,从而导致日志文件更新延迟。因此,当出现崩溃时,一些日志条目可能会丢失,从而进行故障排除和调试变得更加困难。
在这个版本中,信息会被直接写入日志文件中,绕过 glibc 缓冲,确保日志会立即看到。
async 写入死锁已在 OSD 完整条件下修复
在以前的版本中,当异步写入持续,并且 OSD 已满时,客户端会收到取消写入的通知。取消写入后调用的 cancellation 方法和回调在这两个尝试获取相同的锁定后调用的回调。因此,这会导致死锁,从而导致客户端在 OSD 完整场景中无限期挂起。
在这个版本中,客户端代码中的死锁已被解决。因此,在 OSD 完整场景中异步写入不再会导致客户端挂起。
扩展了对 CephFS 虚拟扩展属性的 removexattr
支持
在以前的版本中,所有适当的 Ceph 虚拟扩展属性都不支持 removexattr
,从而导致尝试删除扩展属性失败,并显示 "No such attribute" 错误。
在这个版本中,对 removexattr
的支持已扩展,以覆盖所有相关的 CephFS 虚拟扩展属性。现在,您可以正确使用 removexattr
删除属性。您还可以删除 root 内节点中的布局。删除布局会将配置恢复到默认布局。
现在,在健康警告检查失败命令过程中验证 MDS 和 FS ID
在以前的版本中,在执行 ceph mds 失败时
不会检查 MDS 和 FS ID,ceph fs fail
命令。因此,当集群中的另一个实例出现健康警告时,这些命令会失败,对健康 MDS 或 FS 实例出现 "permission denied" 错误。
在这个版本中,系统会在健康警告检查过程中验证 MDS 和 FS ID。此更改可确保 ceph mds fail
和 ceph fs fail
命令对健康的实例成功,即使集群中的其他 MDS 或 FS 实例都有健康警告。
错误映射现在显示特定的错误消息
在以前的版本中,对用户消息的错误代码映射不正确会导致显示通用消息。因此,用户没有看到遇到的错误的具体详情。
在这个版本中,映射已被修正来显示特定于错误的消息,确保用户收到对该错误的详细反馈。
fscrypt
现在解密长文件名
在以前的版本中,所有解密情况下都不提供包含文件名原始加密版本的备用名称。因此,长文件名没有正确解密,并且生成不完整的目录条目数据。
在这个版本中,备用名称在解密过程中提供,因此 fscrypt
现在可以正确解密长文件名。
快照名称现在以纯文本形式存储
在以前的版本中,无论是否存在 fscrypt
密钥,都可创建快照。当在没有密钥的情况下使用 mgr subvolume snapshot create
命令创建快照时,快照名称不会在创建过程中加密。因此,后续尝试解密纯文本名称生成的不可读输出。
在这个版本中,快照名称以纯文本形式存储,而不加密。这个更改有助于确保快照名称保持可读,无论 fscrypt
密钥是否存在。