web-dev-qa-db-ja.com

1つのディレクトリにいくつのファイルを保存できますか?

この質問は this one に関連しています。

私は通常、1つのディレクトリに格納されている多くのファイル(+/- 1,000,000)を生成するアニメーションを使用しています。 Mac Os Xでは、いくつかのバグが+/- 30,000以上のファイルで発生したため、以前はアニメーションをさまざまなディレクトリに分割していました。

Ubuntuでは、1つのディレクトリが保持できるファイルの数に制限はありますか?

21
H_7

Ubuntuはディレクトリのサイズを制限しません。ファイルシステムによって課されます。各ファイルとディレクトリは、いわゆるiノードです。 df -iを使用して、使用中のすべてのマウント済みファイルシステムで使用可能なiノードの数を確認できます。

50 GB(46 GiB)のext4ホームパーティションのiノード制限が十分に大きいため、問題なく100万と1つのファイルを作成しました。

touchユーティリティと組み合わせて、ファイルの作成にシェル拡張を使用しました。

mkdir test
cd test
touch {0..300000}
touch {300000..600000}
touch {600000..900000}
touch {900000..1000000}

これにより、ls | wc -lで検証可能な1000001ファイルが作成されます。 300000..600000ではなく300001..600000なのはなぜですか?私はその1を最後に置くのが面倒だったからです。

df -iは次のようになります。

/dev/sda6            3055616 1133635 1921981   38% /home

次に、テストファイルを削除します(cd ..&&rm -f testに時間がかかりました。そのため、ファイル名にはrmを使用してください):

rm {0..300000}
rm {300000..600000}
rm {600000..900000}
rm {900000..1000000}
cd ..
rmdir f

また、使用中のiノードの数は、ファイルを削除した直後に減少しました。

/dev/sda6            3055616  133634 2921982    5% /home

ファイルシステムがそのような多数のファイルを許可している場合でも、そのような大きなファイルを単一のディレクトリに保存するのは恐ろしい考えです。少なくともf/i/l/e/filename.extのような構造を持ついくつかのサブディレクトリを使用します。多くの場合、プログラムはこのような大量のファイルを予期していません。

32
Lekensteyn