如果 ext4 分区中超过 40 亿个文件的限制会发生什么?

如果 ext4 分区中超过 40 亿个文件的限制会发生什么?

如果在 ext4 分区中超出 40 亿个文件的限制(例如传输 50 亿个文件),会发生什么情况?

答案1

据推测,您会看到一些“设备上没有剩余空间”错误:

# 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 -hdf -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 空间会比存储空间更快耗尽。可以指定另一个比率(mke2fs -N number-of-inodes-i bytes-per-inode-T usage-type中定义的/etc/mke2fs.conf)。

答案2

一旦达到限制,后续创建文件的尝试将失败ENOSPC,表明目标文件系统没有空间容纳新文件。

在您描述的场景中,一旦达到限制,这通常会导致传输中止。

相关内容