+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
먼저 충분히 새로운 소프트웨어가 필요합니다.
- 리눅스 커널 >= 5.2EXT4의 커널 측 지원
- 사용자 레이어 도구:e2fsprogs >= 1.45(예: 버전 1.44만 출시된 Debian 10에서는 다음이 필요합니다.구축함 백포트). 무엇보다도 제공
mke2fs
(별칭mkfs.ext4
),tune2fs
그리고chattr
. - 고쳐 쓰다:
- e2fsprogs >= 1.45.7 필요활성화 허용접는
tune2fs
생성 후 마운트되지 않은 파일 시스템에서 사용하세요. - e2fsprogs >= 1.46.6 필요허용하다장애를 입히다 접는
tune2fs
활성화한 후 이 플래그가 있는 디렉토리가 없는 경우에만 사용됩니다+F
. - 파일 시스템 암호화를 사용할 수도 있습니다.필요 리눅스 커널 >= 5.13.
- e2fsprogs >= 1.45.7 필요활성화 허용접는
설치 후 설명서는 다음에서 제공됩니다.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