如何快速制作大文件?


Answers:


36

所述填零方法(这里修改以避免潜在的内存瓶颈)花了17秒,以创建上的SSD 10 GB的文件和引起Ubuntu的图形界面无响应。

$ time sh -c 'dd if=/dev/zero iflag=count_bytes count=10G bs=1M of=large; sync'
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 17.2003 s, 624 MB/s

real    0m17.642s
user    0m0.008s
sys     0m9.404s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
10737422336     large

fallocate通过直接操纵文件分配的磁盘空间来立即创建大文件:

$ time sh -c 'fallocate -l 10G large; sync'

real    0m0.038s
user    0m0.000s
sys     0m0.016s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
10737422336     large

截断还可以立即工作,并创建稀疏文件,这些文件在以后写入数据之前不会消耗实际的磁盘空间:

$ time sh -c 'truncate -s 10G large; sync'

real    0m0.014s
user    0m0.000s
sys     0m0.004s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
0       large

dd ... bs=2G count=1(一次read(2)调用)将2 GB读取到内存中。如果您有内存压力,那可能不是解决之道。如果块越小,则更多,更小的块可能会更快。
claymation'4

19

一种简单的方法是使用dd命令来写一个全为零的文件。

dd if=/dev/zero of=outputFile bs=2G count=1
  • 如果=输入文件
  • of =输出文件
  • bs =字节

如果要计算机(1024 * 1024 * 1024)千兆字节,请在size参数中使用G;如果要人用(1000 * 1000 * 1000)千兆字节,请使用GB。


1
我会补充一点,如果您不希望全为零,则可以选择if = / dev / random
Denwerko 2011年

虽然/ dev / random将花费更多时间。
混淆使用

10
使用的/ dev /随机将一个可怕的很多时间。/dev/urandom在这种情况下使用(它是非阻塞的,但不能保证具有相同的随机性)。从任何一个中抽取2 GB几乎可以肯定完全耗尽了系统的熵,因此以后不要做任何加密操作。
的CVn

1

ftp://ftp.fsf.hu/testfiles/maketestfiles.sh

或Seek是您想要的文件大小,以字节为单位-1。

dd if=/dev/zero of=filename.big bs=1 count=1 seek=1048575 # 1 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=10485759 # 10 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=104857599 # 100 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=1073741823 # 1024 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=42949672959 # 40960 MByte
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.