如何在给定目录上为 ext4 启用内核 5.2 中的 new 不区分大小写?

Krz*_*soń 4 linux ext4 case-sensitivity

我看到内核 5.2 通过+F在 inode 中翻转一点来处理每个目录的 ext4 不区分大小写。

当通过翻转 +F inode 属性启用空目录时,此 EXT4 不区分大小写的文件名查找功能在每个目录的基础上工作。

https://www.phoronix.com/scan.php?page=news_item&px=EXT4-Case-Insensitive-Linux-5.2

但是怎么做呢?有没有 chmod 处理这个?我的发行版看起来不像。

那么我该如何使用这个功能呢?

A.B*_*A.B 6

首先你需要足够新的软件:

安装后,文档确实反映了此功能的存在。

man ext4

案例折叠

此 ext4 功能为启用casefold (+F) 标志的目录提供文件系统级字符编码支持。此功能在磁盘上保留名称,但它允许应用程序使用文件名的编码等效版本在文件系统中查找文件。

该功能必须作为文件系统范围的 ext4 选项启用。遗憾的是,我无法在已经格式化的文件系统上启用它。因此,使用创建的稀疏文件在dd if=/dev/zero of=/tmp/image.raw bs=1 count=1 seek=$((2**32-1))新创建的文件系统上进行测试。

# tune2fs -O casefold /tmp/image.raw 
tune2fs 1.45.3 (14-Jul-2019)
Setting filesystem feature 'casefold' not supported.
Run Code Online (Sandbox Code Playgroud)

因此,在格式化时,这将启用该功能:

# mkfs.ext4 -O casefold /tmp/image.raw 
Run Code Online (Sandbox Code Playgroud)

或者指定其他编码而不是默认编码(utf8)。看来目前只有utf8-12.1,其中utf8无论如何都是别名:

# mkfs.ext4 -E encoding=utf8-12.1 /tmp/image.raw 
Run Code Online (Sandbox Code Playgroud)

您可以验证 tune2fs 做了什么:

# tune2fs -l /tmp/image.raw |egrep 'features|encoding'
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg casefold sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Character encoding:       utf8-12.1
Run Code Online (Sandbox Code Playgroud)

现在使用该功能:

# mount -o loop /tmp/image.raw /mnt
# mkdir /mnt/caseinsensitivedir
# chattr +F /mnt/caseinsensitivedir
# touch /mnt/caseinsensitivedir/camelCaseFile
# ls /mnt/caseinsensitivedir/
camelCaseFile
# ls /mnt/caseinsensitivedir/camelcasefile
/mnt/caseinsensitivedir/camelcasefile
# mv /mnt/caseinsensitivedir/camelcasefile /mnt/caseinsensitivedir/Camelcasefile
mv: '/mnt/caseinsensitivedir/camelcasefile' and '/mnt/caseinsensitivedir/Camelcasefile' are the same file
Run Code Online (Sandbox Code Playgroud)