web-dev-qa-db-ja.com

Ubuntuサーバーext4が65000サブディレクトリの制限に達しています

65,000ディレクトリを超える新しいディレクトリの作成に失敗しているUbuntu14.04サーバーがあります。 tune2fs -lを実行しましたが、dir_nlinkフラグが設定されていることがわかります。これを可能にするために他に何をチェックできるか知っている人はいますか?このサーバー構成の他の多くのクローンがあり、それらはすべて65,000マークを超えており、期待どおりに機能しています。 tune2fs -lの出力を比較しましたが、同じように見えます。私はまだ数百万の無料のiノードとブロックを持っています。ファイルシステムをアンマウントして再マウントしましたが、何も変更されていません。

5
gregjkm

Ext4ディレクトリ制限

Ext4は2種類のディレクトリをサポートします

  • 従来のほぼ線形のディレクトリ
  • ハッシュベースのディレクトリ

線形ディレクトリには65000リンクの制限があります。つまり、その周りに多くのサブディレクトリが可能です。ハッシュベースのディレクトリには制限がありません。

新しいファイルシステムを作成する場合、デフォルトはハッシュディレクトリです。ディレクトリがまだ線形である場合は、古いext3パーティションをアップグレードしたことが原因である可能性があります。 (Ext3は後でハッシュベースのディレクトリ機能を取得しました。)

ディレクトリがほぼ線形であるかハッシュベースであるかをテストします

$ Sudo debugfs /dev/partition
$ htree /
htree: Not a hash-indexed directory

変換

  1. パーティションをアンマウントします
  2. dir_index(ハッシュベースのdir)およびdir_nlink(無制限のリンク)機能を有効にします。

    Sudo tune2fs -O dir_index,dir_nlink /dev/partition
    

新しく作成されたすべてのディレクトリは、無制限のサブディレクトリを保持できるようになりました。

既存のディレクトリを変換する場合は、次の手順を実行します。

  1. パーティションをアンマウントします(データの損失を防ぐために重要です)
  2. Fsckにディレクトリインデックスを再構築するように指示します。

    Sudo e2fsck -f -D /dev/partition
    

-fは、ディスクがクリーンな状態であっても、fsckにディスクのチェックを強制します

-Dは、e2fsckにインデックスを再構築するように指示します。

このオプションにより、e2fsckは、ファイルシステムがディレクトリインデックスをサポートしている場合はインデックスを再作成するか、ディレクトリを小さいディレクトリまたは従来の線形ディレクトリを使用するファイルシステム用に並べ替えて圧縮することにより、すべてのディレクトリを最適化しようとします。

4
Georg Schölly