Bagaimana saya bisa dengan cepat membuat file besar?

26

Apa cara cepat dan mudah untuk membuat file dengan ukuran 2 GB?

ændrük
sumber

Jawaban:

36

Metode zero-fill (dimodifikasi di sini untuk menghindari potensi kemacetan memori ) memerlukan waktu 17 detik untuk membuat file 10 GB pada SSD dan menyebabkan antarmuka grafis Ubuntu menjadi tidak responsif.

$ 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 membuat file besar secara instan dengan secara langsung memanipulasi ruang disk yang dialokasikan file:

$ 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

truncate juga berfungsi secara instan, dan membuat file jarang yang tidak menggunakan ruang disk sebenarnya hingga data ditulis nanti:

$ 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
ændrük
sumber
dd ... bs=2G count=1membaca 2 GB ke dalam memori (dalam satu read(2)panggilan). Jika Anda memiliki tekanan memori, itu mungkin bukan cara yang tepat. Lebih banyak, blok yang lebih kecil mungkin lebih cepat jika itu artinya paging lebih sedikit.
claymation
19

Cara mudah adalah dengan menggunakan ddperintah untuk menulis file yang penuh dengan nol.

dd if=/dev/zero of=outputFile bs=2G count=1
  • if = input file
  • dari = file output
  • bs = byte

Gunakan G dalam argumen ukuran jika Anda ingin komputer (1024 * 1024 * 1024) gigabytes, atau GB jika Anda ingin manusia (1000 * 1000 * 1000) gigabytes.

MikeVB
sumber
1
saya hanya akan menambahkan bahwa jika Anda tidak ingin semua nol, Anda dapat memilih jika = / dev / random
Denwerko
Padahal / dev / acak akan membutuhkan lebih banyak waktu.
con-f-use
10
Menggunakan / dev / random akan mengambil mengerikan banyak waktu. Gunakan /dev/urandomdalam kasus itu (ini non-blocking, tetapi tidak dijamin memiliki tingkat keacakan yang sama). Menggambar 2 GB dari salah satu dari mereka hampir pasti benar-benar menguras entropi sistem Anda, jadi jangan lakukan kriptografi apa pun untuk sementara waktu sesudahnya.
CVn
1

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

atau Seek adalah ukuran file yang Anda inginkan dalam byte - 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
LanceBaynes
sumber