linux系统中快速创建一个10G文件

在工作中,经常遇到想快速创建一个大文件,比如:创建一个100G的文件,达到提升磁盘使用率的目的,下面介绍几种创建大文件的方法。

1. dd命令

创建一个自定义大小的文件

语法
dd if=[source] of=[destination] bs=[block-size] count=[counter]

source 读取并拷贝内容到 destination, source 和 destination 都是文件,前者是读取的文件,后者是写入的文件

  • bs : 表示块的大小,单位是字节,如1M、1G、10G

  • count : 表示块的数量,表示 dd 命令需要执行多少次读取并写入的操作,bs 乘以 count 其实就表示目标文件的大小,也即需要创建的文件的大小

示例:创建一个10G的文件
dd if=/dev/zero of=/log/db.log bs=1G count=10

上面的命令表示从 /dev/zero文件每次读取 1G大小的数据并写入/log/db.log文件中, bs=1G count=10 表示块大小是1G,总共有10个块, 所以目标文件最终的大小是: 1G * 10 = 10G

/dev/zero 是一个特殊的字符设备文件,当读取它的时候,它会返回空数据,这里表示从 /dev/zero读取空的数据写入 /log/db.log 中
在这里插入图片描述
从结果可以得知,用 dd 命令创建一个 10G 大小的文件花费了约 32.1 秒

2. yes命令

dd 命令创建的是空字符的文件,如果想文件中包含自定义的字符,可以使用 yes 命令。

它的作用是循环输出一行指定的字符串,直到进程结束,为了控制文件的大小并打破循环,我们借助 head 命令来实现,使用 yes 命令创建包含指定内容文件的语法如下:

yes [string] | head -c [size of file] > [name of file]
  • string 是写入文件每一行的字符串

  • head -c [size of file] 是接收指定大小的字符串,单位是字节,后面也可以接 K、KB、M、MB、G、GB等单位

下面的实例是往 yes.log 文件写入,每行的内容是: this is a test content , 一直到文件大小达到 10G

time yes "This is a test content" | head -c 10G > yes.log

在这里插入图片描述
上述命令中的time命令是为了统计创建文件所消耗的时间,从结果来看,yes命令创建一个10G的文件花费时间和dd命令差不多。

3. fallocate命令

fallocate 命令可以通过下面的语法创建大文件。

fallocate -l [size of file] [name of file]
  • -l 选项表示文件大小,单位是字节,后面可以接K、KB、M、MB、G、GB等单位;

下面的命令是创建一个10G大小的文件:

time fallocate -l 10G fallocate.log

在这里插入图片描述

从结果来看,fallocate 命令创建一个10G大小的文件竟然只花费了0.01秒,通过ll命令查看创建的文件可以看出也确实创建出了10G的文件。

创建速度的差异

从上面的几个实例可以看出,同样是创建一个 10G的文件, fallocate 命令只需要不到 0.1 秒的时间,但是 dd 和 yes 命令需要 20多秒,为什么会有这么大的差别呢?

  • fallocate 将空间分配给文件,但是不会往文件中写入任何数据

  • dd 和 yes 都有写文件操作,而这需要大量的 IO 时间,所以同样创建 10G 的文件,它们比 fallocate 要慢很多

如何选择

dd 、yes、fallocate 这几个命令都可以创建大文件, 在日常的使用中,我们该如何选择呢 ?

对速度没有很高的要求的情况下,一般首选 dd ,如果希望创建的文件中写入自定义的内容的话,使用 yes。

如果想快速的创建大文件,比如 1 秒内创建一个 100G 的文件,选择 fallocate

大部分情况下,fallocate 都能满足要求,所以不想仔细分析的话,使用 fallocate 就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jepson2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值