ext4パーティションで40億ファイルの制限を超えた場合はどうなりますか?


46

ext4パーティションで40億のファイルの制限を超えた場合、たとえば50億のファイルを転送するとどうなりますか?

回答:


79

おそらく、「デバイスにスペースが残っていません」というエラーが表示されます。

# truncate -s 100M foobar.img
# mkfs.ext4 foobar.img
Creating filesystem with 102400 1k blocks and 25688 inodes
---> number of inodes determined at mkfs time ^^^^^
# mount -o loop foobar.img loop/
# touch loop/{1..25688}
touch: cannot touch 'loop/25678': No space left on device
touch: cannot touch 'loop/25679': No space left on device
touch: cannot touch 'loop/25680': No space left on device

そして実際には、「40億ファイル」よりもずっと早くこの制限に達しています。両方df -hでファイルシステムをチェックし、df -i残っている空き容量を確認してください。

# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       93M  2.1M   84M   3% /dev/shm/loop
# df -i loop/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/loop0      25688 25688     0  100% /dev/shm/loop

この例では、ファイルのサイズが平均で4Kでない場合、ストレージスペースよりもはるかに早くiノードスペースが不足します。それは別の比率を指定することが可能です(mke2fs -N number-of-inodesまたは-i bytes-per-inodeまたは-T usage-typeで定義されています/etc/mke2fs.conf)。


1
それが起こるとしたら、それはセキュリティのためだった、あなたの答えをありがとういつか私が心配して、私は私のメインのパーティション(RAID 50)に400以上の百万のファイルを持って、私は多くのgitリポジトリを持っている
Bensuperpc

5
@ensuperpc:多くのファイルが定期的に使用されていない場合(バックアップ目的のためだけに)、各プロジェクトを独自のtarファイルに入れることを検討してください。これにより、ファイル数が大幅に削減され、圧縮オプションを使用した場合に占有されるスペースも削減されます。
jamesqf

27
@jamesqfまだ行っていない場合はgit repack、各gitリポジトリで実行して、個別のオブジェクトをすべてパックファイルに結合してみてください。
user253751

13
+1を使用しているだけなのでtouch、空想echoではなく、重要な点とよくある誤解も示します。空のファイルでディスクをいっぱいにすることは可能です。
レックスコギタン

6
@jamesqf git repackは機能を失うことはなく、機能的には同じgitリポジトリでありtar、プロジェクトまたはgitリポジトリを必要とする多くのプログラムで読み取り不能になります
Ferrybig

52

制限に達すると、以降のファイル作成の試行はで失敗しENOSPC、ターゲットファイルシステムに新しいファイル用のスペースがないことを示します。

あなたが説明するシナリオでは、これは通常、制限に達すると転送が中断される結果になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.