使用dd命令在Linux下创建大文件,批量大小文件生成方法

前沿:最近在开发自动从U盘拷贝大批量文件到linux系统的的功能。由于需要几十个G的大文件来做测试,如果自己去找这么多资源,然后再拷贝,非常麻烦。所以学了下dd命令,现在总结一下:

一、参数介绍

if=FILE         从FILE中读取数据,而不是默认的标准输入。   if可理解为:in  file
of=FILE        往FILE中写入数据,而不是默认的标准输出。  of可理解为:out file
ibs=BYTES   读取数据时,一次性读出BYTES大小的块,如果不指定,默认512字节。
obs=BYTES  写入数据时,一次性写入BYTES大小的块,如果不指定,默认512字节。
bs=bytes      #输入输出块大小。同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。 
cbs=bytes     #一次转换 bytes 个字节,即转换缓冲区大小。 。
skip=N          跳过N*ibs字节数再开始读取数据。
seek=N        跳过N*obs字节数再开始写入数据。
count=N      总共读取N*ibs字节数的数据,当然写入的数据也是这个大小。

二、创建指定文件大小,并且写入U盘

dd if=/dev/zero of=hi.mp4 bs=1M count=1000

在当前目录下会生成一个1000M的test文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源),但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢。

三、创建指定文件大小,但是不写入U盘(创建速度非常快)

我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘

dd if=/dev/zero of=test bs=1M count=0 seek=100000

此时创建的文件在文件系统中的显示大小为100000MB,但是并不实际占用block,因此创建速度与内存速度相当,seek的作用是跳过输出文件中指定大小的部分,这就达到了创建大文件,但是并不实际写入的目的。当然,因为不实际写入硬盘,所以你在容量只有10G的硬盘上创建100G的此类文件都是可以的。
 

四、批量随机生成 40个1G的大mp4文件,我用的就是这个:

seq 40 |xargs -i dd if=/dev/zero 0f={}.mp4 bs=1001001024 count=1

 

你可能感兴趣的:(Linux,系统编程,dd)