+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
まず、十分に新しいソフトウェアが必要です。
- Linuxカーネル>= 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
。 - ファイルシステム暗号化を使用することもできます。必要 Linuxカーネル>= 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