주어진 디렉토리에서 ext4에 대한 커널 5.2의 대소 문자를 구분하지 않는 새로운 기능을 활성화하는 방법은 무엇입니까?

주어진 디렉토리에서 ext4에 대한 커널 5.2의 대소 문자를 구분하지 않는 새로운 기능을 활성화하는 방법은 무엇입니까?

+F나는 커널 5.2가 inode에서 비트를 뒤집어 각 디렉토리에 대해 ext4 대소문자 구분을 처리하는 것을 보았습니다 .

이 EXT4 대소문자를 구분하지 않는 파일 이름 조회 기능은 +F inode 속성을 뒤집어 빈 디렉토리가 활성화된 경우 디렉토리별로 작동합니다.

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

하지만 어떻게 해야 할까요? 이 문제를 처리할 수 있는 chmod가 있습니까? 내 배포판은 이렇지 않습니다.

그러면 이 기능을 어떻게 사용하나요?

답변1

먼저 충분히 새로운 소프트웨어가 필요합니다.

설치 후 설명서는 다음에서 제공됩니다.man ext4이 기능의 존재를 반영합니다.

접는

이 ext4 기능은 디렉토리에 대한 파일 시스템 수준 문자 인코딩 지원을 제공합니다.접기(+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.
#

고쳐 쓰다: 부터이번에 제출하세요tune2fs활성화하는 데 사용할 수 있습니다.접는마운트 해제된 파일 시스템에서. 이 답변이 작성되었을 당시에는 이 기능을 아직 사용할 수 없었습니다.

# tune2fs -O casefold /tmp/image.raw
tune2fs 1.47.0 (5-Feb-2023)
#

따라서 포맷할 때 다음 기능이 활성화됩니다.

# mkfs.ext4 -O casefold /tmp/image.raw 

또는 기본 인코딩 대신 다른 인코딩을 지정합니다(UTF8). 현재는 그런 것 같다오직utf8-12.1, 안에UTF8어쨌든 별칭입니다.

# mkfs.ext4 -E encoding=utf8-12.1 /tmp/image.raw 

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

이제 이 기능을 사용하세요:

# 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

관련 정보