Linux 系统下命令生成创建任意指定大小文件方法

在 Linux 系统下需测试硬盘或网络的传输的过程中,需要找一些体积大的软件做数据测试,下载或重新寻找测试文件都是一个麻烦事,所以找到了相关命令可以再 Linux 系统下使用命令快速生成任意大小,来解决测试环境中遇到的困境,希望对各位玩家有所帮助。

下面就介绍 Linux 系统下 dd 、 fallocate 和 truncate 命令包含于 GNU coreutils 软件包中,不需要单独安装。

使用 fallocate 命令创建大文件

fallocate 是最高效的方法,它直接为文件分配磁盘空间而不写入实际数据。

使用 fallocate 命令创建指定大小的文件:fallocate -l 500m test-500m.data

示例:

# 生成 10GB 大小的文件
fallocate -l 10G dummy

# 生成 1TB 大小的文件
fallocate -l 1T large_file.bin

# 生成 500MB 大小的文件
fallocate -l 500M test_file.dat

参数说明:

  • -l--length 指定文件大小
  • 支持的单位:K(KB) 、 M(MB) 、 G(GB) 、 T(TB) 、 P(PB)
  • 文件名可以自定义,如 dummytest.bin

优点:

  • 极快:瞬间完成,不写入实际数据
  • 💾节省 I/O:不产生磁盘写入操作
  • 🔧支持稀疏文件

注意事项:

  • 需要文件系统支持(ext4 、 XFS 、 Btrfs 等现代文件系统都支持)
  • 某些旧文件系统可能不支持此命令

使用 dd 命令创建大文件

Linux 系统下的 dd 命令很是强大,可以直接使用 dd 命令来创建指定大小的文件,一般系统都会自带,不需要额外安装。

dd(device driver) 命令常用来复制备份文件,与 cp 命令具有以下区别:

  • dd 是对块进行操作,操作磁盘的扇区字节,
  • cp 操作文件或目录,对于不能以文件或目录格式呈现的数据 cp 无法复制。
  • dd 是对磁盘连续的读取,也就是完全的数据搬移,cp 复制的数据排列不是按顺序的。

也可以使用这个 dd 命令来创建特定大小的文件,适用于所有文件系统 ,但速度较慢。

生成固定大小文件,命令的格式为:dd if=/dev/zero of=要生成的文件 bs=读入的 block 大小 count=读取的 block 个数

示例:在/home 目录下创建一个后缀名为.dat 的文件

#命令用法:(注意空格)
dd if=/dev/zero of=要生成的文件 bs=读入的 block 大小 count=读取的 block 个数

# 创建 100MB 的文件示例:
dd if=/dev/zero of=/home/100MB.dat bs=1M count=100
#其中/home/代表路径、 100MB.dat 代表文件名称。

#使用/dev/zero 创建 1GB 的全零文件示例:
dd if=/dev/zero of=/home/1GB.dat bs=1M count=1024

#使用/dev/zero 创建 10GB 的全零文件示例:
dd if=/dev/zero of=/home/10GB.dat bs=1M count=10240

# 使用/dev/urandom 生成随机数据文件
dd if=/dev/urandom of=/home/512M.dat bs=1M count=512

# 显示进度(status=progress)
dd if=/dev/zero of=large_file bs=1M count=2048 status=progress

参数说明

  • if 指定输入文件:/dev/urandom/dev/random/dev/zero/dev/null 介绍:
    • /dev/urandom/dev/random 都可以产生随机的 ASCII 码字符流
      • /dev/random 依赖系统中断,当系统中断不足时,/dev/random 设备会 “挂起” 。
      • /dev/urandom 不依赖系统中断,所以在生成特定大小文件时一般使用/dev/urandom,不使用/dev/urandom
    • /dev/zero“零” 设备可以无限的提供空字符,产生二进制的零流
    • /dev/null“空” 设备,像” 黑洞 “一样,所有写入它的内容都会永远丢失,也不会读取到任何内容。常用于禁止标准输出和标准错误的输出,比如抓包命令:tcpdump -i eth1 -w /tmp/packet.pcap >/dev/null &
  • of=:输出文件名
  • bs=:块大小(建议 1M 或 4M)
  • count=:块数量
  • seek:指定一开始跳过的区块数量
  • status=progress:显示进度信息

使用 truncate 命令创建大文件

truncate 创建稀疏文件,实际不占用磁盘空间直到写入数据。

# 创建 10GB 的稀疏文件
truncate -s 10G sparse_file

# 创建 100MB 文件
truncate -s 100M small_file.bin

适用场景:

  • 测试文件系统对稀疏文件的支持
  • 创建占位文件但不立即占用磁盘空间

选择建议

  1. Linux 性能测试:优先使用 fallocate,最快,推荐用于性能测试
  2. Linux 兼容性测试:使用 dd if=/dev/zero,最通用,适合所有场景

扩展阅读

  • Linux 系统中快速生成指定大小的文件,https://zhuanlan.zhihu.com/p/639721287
  • Windows 和 Linux 快速生成大容量文件的完整指南,https://blog.csdn.net/weixin_46191006/article/details/162732932
上一篇 Windows系统下命令生成创建任意指定大小文件方法