Linux下单个文件夹下创建100万个文件测试 郝伟 2021/07/09 [TOC]

1. 前言

在大数据处理里,往往会生成大量的小文件,这时一个文件夹能存在的文件数量就比较重要了,但是至少一个文件夹下可以放多少文件暂时发现官方说法。所以通过本实验,初步探寻答案。

2. 1 实验目的

验证在Linux的一个文件中是否可以放100万个文件。在本测试中使用的文件系统是 ext4(可使用 df -T 查看)。

3. 2 实验设计

3.1. 2.1 文件命名

在创建100万个文件的过程中,需要保证文件不同名,所以使用数字进行顺序编号。同时,为了使100万个文件看上去比较好看,避免出现 file1 和 file999999 这样长短不一的文件名,所以文件编号从100万开始,即数字为顺序编号值范围为 [1000000, 1999999] 同时加上 file 前缀,即文件名为 file + 7位数字 组成,如 file1529364

3.2. 2.2 文件存储

为了不影响其他文件,所以的文件都存储在临时创建的目录 filecout 中。

3.3. 2.3 文件生成

1、单个文件生成 使用系统自带的 touch 命令创建,如 touch file1529364 以创建文件 file1529364

2、多个文件生成 使用 for 循环,命令为:

for id in {100000..999999}; do touch file$id; done &

由于文件创建时间较长,为避免被意外中断,故在命令末尾加入 &,使命令以后台形式运行。

3.4. 2.4 文件数量统计

在创建完成以后,我们需要统计文件的数量,统计命令为:

ll filecount/ | grep "^-" | wc -l

其原理为使用 ll 按行输出 temp 文件夹中所有的文件,然后使用 grep + 正则 的方式读取所有文件,最后再使用 wc -l 进行行数统计。

4. 3 实验过程

1、在创建了文件夹 filecount 后 2、使用以下命令进行文件生成。

for id in {100000..999999}; do touch ./filecount/file$id; done &

整个生成过程持续了约40分钟,相当于每秒约生成400个文件。 3、最后,再使用2.4的方法统计文件,输出如下:

root@server00:~/temp# ll filecount/ | grep "^-" | wc -l
1000000

最后再补充一点,使用 rm -rf filecount 删除整个测试文件夹用时约82秒,相当于每秒可以删除约1.2万个文件。

5. 4 结论

通过本实验我们可以确认,Linux系统在单个文件中,至少可以存储100万个文件。至于是否有上限,暂时没有定论,但是可以相信100万个文件在绝大多数的应用场景中是足够用了。

另外,根据文献[1]的结论:

Ext3 目前只支持 32,000 个子目录,而 Ext4 本身支持无限数量的子目录,前提是分区inodes数量足够,一个文件需要占用一个inodes,一个15g分区最大支持1500万个inodes,30g就是最大支持3000万个inodes,具体计算为分区大小转换为kb,因为一个inodes至少需要占用1kb,所以在分区或者挂盘的时候,就需要自己指定最大inodes,既然一个inodes占用1kb,一个文件使用一个inodes,而一个文件不止1kb,所以可以说ext4本身就是支持无限量子目录,分区有多大就能存多少。

每个文件占用1个inodes,而每个inodex 1kb,所以只要存储空间够大,文件的数量是足够的。

根据文献[2],在ext3文件系统中,一级子目录的数量最多有32000个的限制。

6. 参考资料

[1] linux 下 ext4最大文件数,https://blog.csdn.net/LLQ_200/article/details/80493738 [2] Linux 目录个数和文件个数限制(单个目录下最大文件数),https://blog.csdn.net/dapinxiaohuo/article/details/60871853

results matching ""

    No results matching ""