特德·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代码在高速缓存中快速找到正确的条目。