web-dev-qa-db-ja.com

特定のディレクトリでext4のカーネル5.2の新しい大文字と小文字を区別しないようにするにはどうすればよいですか?

カーネル5.2が+F inodeのビット。

このEXT4の大文字と小文字を区別しないファイル名検索機能は、+ F inode属性を反転して空のディレクトリを有効にすると、ディレクトリごとに機能します。

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

しかし、それを行う方法は? chmodはそれを処理しますか?私のディストリビューションはそのようには見えません。

それで、この機能をどのように使用しますか?

3

まず、最新の十分なソフトウェアが必要です。

これがインストールされている場合、ドキュメントにはこの機能の存在が反映されています。

_man ext4_

casefold

この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.
_

したがって、フォーマットすると、機能が有効になります。

_# 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
_
4
A.B