Как я могу быстро сделать большой файл?


26

Какой быстрый и простой способ создать файл размером, скажем, 2 ГБ?

Ответы:


36

Метод нулевого заполнения (здесь измененный, чтобы избежать потенциальных узких мест в памяти ) занял 17 секунд, чтобы создать файл объемом 10 ГБ на SSD, и графический интерфейс 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

truncate также работает мгновенно и создает разреженные файлы, которые не занимают фактическое дисковое пространство, пока данные не будут записаны позже:

$ 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читает 2 ГБ в память (за один read(2)вызов). Если у вас есть давление памяти, это, вероятно, не тот путь. Больше, меньшие блоки могут быть быстрее, если это означает меньше подкачки.
claymation

19

Самый простой способ - использовать ddкоманду для записи файла, полного нулей.

dd if=/dev/zero of=outputFile bs=2G count=1
  • if = входной файл
  • of = выходной файл
  • bs = байты

Используйте G в аргументе размера, если вы хотите компьютер (1024 * 1024 * 1024) гигабайт, или ГБ, если вы хотите человеческий (1000 * 1000 * 1000) гигабайт.


1
Я просто добавлю, что если вам не нужны все нули, вы можете выбрать if = / dev / random
Denwerko

Хотя / dev / random займет больше времени.
Con-е использование

10
Использование / dev / random займет очень много времени. Используйте /dev/urandomв этом случае (это неблокирует, но не гарантированно иметь тот же уровень случайности). Получение 2 ГБ из любого из них почти наверняка полностью исчерпает энтропию вашей системы, поэтому не делайте ничего криптографического некоторое время спустя.
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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.