web-dev-qa-db-ja.com

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

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

48
Bensuperpc

おそらく、「デバイスに空き容量がありません」というエラーが表示されます。

# 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でない場合、inode-spaceがstorage-spaceよりもはるかに早く不足します。別の比率を指定することが可能です(mke2fs -N number-of-inodesまたは-i bytes-per-inodeまたは-T usage-typeで定義されている/etc/mke2fs.conf)。

80
frostschutz

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

説明したシナリオでは、制限に達すると、通常、転送が中止されます。

52
Stephen Kitt