Ubuntu 14.04 サーバーを使用していますが、65,000 ディレクトリを超えると新しいディレクトリを作成できません。 を実行しtune2fs -l
、フラグが設定されているのがわかりますdir_nlink
。これが発生するようにするには他に何をチェックすればよいか知っている人はいますか? このサーバー構成のクローンが他にもたくさんありますが、すべて 65,000 マークを超えており、期待どおりに動作しています。出力を比較しましたtune2fs -l
が、同じようです。まだ数百万の空き inode とブロックがあります。ファイル システムをアンマウントして再マウントしましたが、何も変わりませんでした。
答え1
Ext4 ディレクトリの制限
- 従来のほぼ直線的なディレクトリ
- ハッシュベースのディレクトリ
リニア ディレクトリには 65000 リンクの制限があり、その程度のサブディレクトリが可能です。ハッシュ ベースのディレクトリには制限はありません。
新しいファイル システムを作成する場合、デフォルトはハッシュ ディレクトリです。ディレクトリがまだ線形である場合は、古い ext3 パーティションをアップグレードしたためである可能性があります。(Ext3 には、後でハッシュ ベースのディレクトリ機能が追加されました。)
ディレクトリがほぼ線形かハッシュベースかをテストする
$ sudo debugfs /dev/partition
$ htree /
htree: Not a hash-indexed directory
変換
- パーティションをアンマウントする
dir_index
(ハッシュベースのディレクトリ) およびdir_nlink
(無制限のリンク) 機能を有効にします。sudo tune2fs -O dir_index,dir_nlink /dev/partition
新しく作成されたすべてのディレクトリは、無制限のサブディレクトリを保持できるようになりました。
既存のディレクトリを変換する場合は、次の手順を実行します。
- パーティションをアンマウントする(データ損失を防ぐために重要)
fsck にディレクトリ インデックスを再構築するように指示します。
sudo e2fsck -f -D /dev/partition
-f
ディスクがクリーンな状態であっても fsck にディスクのチェックを強制する
-D
e2fsck にインデックスを再構築するよう指示します:
このオプションにより、e2fsck は、ファイルシステムがディレクトリのインデックス作成をサポートしている場合はディレクトリの再インデックス作成、小さいディレクトリの場合はディレクトリの並べ替えと圧縮、または従来の線形ディレクトリを使用するファイルシステムの場合はディレクトリの並べ替えと圧縮によって、すべてのディレクトリを最適化しようとします。