ext4ファイルシステムでネストされたディレクトリの最大数に制限はありますか?たとえば、私が知っている限り、ISO-9660ファイルシステムは7つ以上のサブディレクトリレベルを持つことはできません。
答え1
ファイルシステムの設計自体と実験には本質的な制限はありません(ありがとう。イルカチョ)は、ディレクトリが無駄に予想されるよりも深くネストできることを示しています(PATH_MAX
Linuxでは4096ですが、これはシステムコールに渡されるパスの長さを制限し、相対パスを使用して解決できます)。
実装の一部では、指定されたファイルシステム内のフルパス長が絶対を超えないと仮定しますPATH_MAX
。ディレクトリハッシュ関数バイトを割り当てますPATH_MAX
。
唯一のディレクトリ関連の制限は次のとおりです。確認済みファイルシステムの実装ではシングルパスコンポーネントの長さ、255バイトに制限され、入れ子の深さには影響しません。
答え2
~によると内線(4)マニュアルページ、セクション情報dir_nlink
通常、ext4ではinodeへのハードリンクを65,000個以下で許可します。これは通常のファイルとディレクトリに適用されます。つまり、ディレクトリは64,998を超えるサブディレクトリを持つことはできません(すべての「.」および「..」エントリと、親ディレクトリにあるそのディレクトリのディレクトリエントリがハードリンクとして計算されるため)。この機能は、リンク数が最大数制限を超える可能性がある場合、ext4が未知のディレクトリへのハードリンク数を示すためにリンク数1を使用することによってこれらの制限を解放します。
つまり、dir_nlink
機能が有効な場合は制限がなく、それ以外の場合は64kサブディレクトリです。この機能が有効になっていることを確認できますsudo dumpe2fs /dev/sda1 | grep --color=always dir_nlink
。無効にして渡すことができますtune2fs
。
他のソース: