我读到了去年发布的Linux5.2补丁说明,我注意到他们开始使用对ext4 4文件系统中不区分大小写的名称的可选支持。
所以..。我想知道为什么内核中需要不区分大小写的选项(包括casefold和正常化)。我可以找到Krisman编写的另一篇文章,他编写了支持案例折叠文件系统的内核代码,但是case-insensitive file system allows us to resolve important bottlenecks for applications being ported from other operating systems
并没有触及我的心,我也无法理解规范化和折叠过程是如何允许我们优化磁盘存储的。
非常感谢你的帮助!
发布于 2020-10-24 03:23:53
不区分大小写的文件系统允许我们解决从其他操作系统移植的应用程序的重要瓶颈--这并不是我的心中有数,我也无法理解规范化和案例处理的过程是如何允许我们优化磁盘存储的。
葡萄酒、Samba和Android必须提供不区分大小写的文件系统语义。如果底层文件系统是区分大小写的,那么每次区分大小写的查找失败时,都会用到葡萄酒等.必须扫描每个目录,以证明没有不区分大小写的匹配(例如,如果查找/foo/bar/readme.txt
失败,则必须对foo/bar/*
中的所有文件和foo/*
中的所有目录以及/*
中的所有目录执行完整的目录列表和大小写比较)。
这方面有几个问题:
readme.txt
和README.txt
都存在,但是应用程序请求README.TXT
,那么返回哪个文件是未定义的。Android甚至通过使用FUSE/wrapfs以及内核内的SDCardFS来模仿大小写不敏感。然而,SDCardFS只是通过将这个过程转移到kenel space†来使一切变得更快。它仍然必须遍历文件系统(因此是IO绑定的),引入了争用条件,而且从根本上说是不健全的。因此,为什么谷歌资助了F2FS中本机目录大小写不敏感的†开发,并从那以后一直反对SDCardFS。
过去曾多次尝试通过VFS启用不区分大小写的查找。最近一次尝试在2018年允许安装一个文件系统不区分大小写的视图。Tso特别引用了wrapfs添加这个功能的问题,因为它至少会更快,并且(我相信)没有种族条件。然而,它仍然不健全(请求README.TXT
可以返回readme.txt
或README.txt
)。这被拒绝了,只是为了增加对大小写不敏感的每个目录的支持,而且不太可能进入VFS††。
此外,用户期望大小写不敏感,因此任何面向消费者的操作系统都必须提供它。Unix本机不能支持它,因为Unicode不存在,而字符串只是字节包。对于案例折叠是如何处理在过去的,人们有很多合理的批评,但是Unicode提供了一个不可变的 箱折函数,除了单一地点 (Turkic的,即使如此也只是两个代码点)。而文件系统b-树是实现此行为的唯一合理位置。
†AFAICT
EXT4和F2FS上的基于VFS的不区分大小写的查找和每个目录不区分大小写的支持的作者克里斯曼( Krisman )发了电子邮件。
发布于 2020-09-24 09:17:07
其他操作系统具有不区分大小写的文件系统。
例如: MacOS允许不区分大小写(默认)或区分大小写。和不能很好地处理区分大小写的文件系统。这意味着在Adobe程序中,可能有硬编码的路径,以不同的方式编写(可能是不同库中的“文档”和“文档”,或者只是在某个时候应用了一些过滤器(例如小写和删除空格,这可能与数据路径不同)。没人在乎,因为它只是起作用了。
因此,如果现在您想移植一个为我们时代的一些通用专有操作系统制作的程序,要么您应该修复所有路径,以便始终一致地使用文件名情况,要么您希望有一个文件系统为您处理这些问题。
Adobe不能为MacOS做这件事,所以对于其他供应商来说,这件事要困难得多(而且昂贵得多)。请参阅https://helpx.adobe.com/creative-suite/kb/error-case-sensitive-drives-supported.html
发布于 2020-09-24 10:29:14
我不知道有一个区分大小写的FS的原因:它所做的唯一的事情就是它完全混淆了用户。微软开发人员从get开始就明白了这一点,没有为一个坏的概念而费心。30年后的今天,一些Linux开发人员意识到不区分大小写更安全、更符合逻辑,并最终实现了它。
为什么第一个Unix文件系统区分大小写?这可能是因为CPU更容易使用它们。您不需要额外的函数来使用CPU周期来验证具有类似名称的文件是否已经存在,尽管它们的大写不同(此外,除了拉丁语/英语之外,实现大小写也不容易)。现在,有了现代超快的CPU,没什么大不了的。
https://unix.stackexchange.com/questions/611116
复制相似问题