Ext5.2上的Linux Kernel 4将允许不区分大小写的搜索

不区分大小写

特德·ts'o,是ext2 / ext3 / ext4文件系统的作者, 接受Linux-next分支,创建Linux Kernel 5.2版本的基础,一组更改 实施支持 中的独立案例操作 Ext4文件系统。

补丁 它们还在文件名中添加了对UTF-8字符的支持。 使用新属性“ + F”(EXT4_CASEFOLD_FL),可以选择将非字符大小写操作模式包含在指向单独目录的链接中。

ext4不区分大小写

在目录中安装此属性后, 文件和子目录的所有操作 在她内心 不会区分大小写, 包括大小写的情况在搜索和打开文件时将被忽略(例如,相似目录中的Test.txt,test.txt和test.TXT将被视为相同)。

也就是说,它与目录条目匹配, 即使用户空间使用的名称不是与磁盘名称匹配的字节对字节,而是Unicode字符串的区分大小写的等效版本。

此操作称为不区分大小写的文件名查找。 该功能被配置为应用于目录并由其子级继承的inode属性。

这个属性 可以在空目录上启用用于支持编码功能的文件系统,从而避免仅因情况而异的文件名冲突。

默认情况下,除了具有“ + F”属性的目录外,文件系统仍然区分大小写。 为了控制不区分大小写的模式的包含,提供了一组经过修改的e2fsprogs实用程序。

该补丁基于功能位和存储在超级块中的编码,为ext4中不区分大小写的文件名查找实现了实际支持。

花了很长时间才完成的工作

这些补丁是由Collabora的贡献者Gabriel Krisman Bertazi准备的 并经过三年的发展和删除评论,摘自第七次尝试。

该实现不更改磁盘存储格式,仅在更改ext4_lookup()函数中的名称比较逻辑并替换dcache(目录名称查找缓存)结构中的哈希的级别上起作用。

“ + F”属性的值存储在各个目录的索引节点内,并适用于所有附加文件和子目录。 编码信息存储在超级块中。

目前,否定查询没有被推送到dcache中,因为无论如何它们都必须无效,因为我们不能相信丢失的文件。

这对性能不利,但是需要利用vfs层进行纠正。

我们可以像其他所有人一样暂时没有它。

避免碰撞 使用现有文件的名称, “ + F”属性只能在文件系统中的空目录上设置,在挂载阶段启用了文件名和目录名的Unicode支持模式。

激活了“ + F”属性的目录元素的名称 会自动转换为小写并以这种方式反映在dcache中,但它们以用户最初定义的形式存储在磁盘上。

新的磁盘哈希值是作为整个案例链的哈希值计算的,而不是直接作为整个案例链的哈希值。

也就是说,尽管名称处理不分大小写, 名称的显示和保存不会丢失有关字符大小写的信息(但系统将不允许您创建具有相同字符但大小写不同的文件名)。

即使先前的搜索中使用了等效的字符串,它也允许VFS代码在高速缓存中快速找到正确的条目。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。