Как быстро создать сотни гигабайт больших файлов за 1 с?

Linux

Распространенные способы создания файлов:

  1. touch
  2. vi(m)
  3. tee
  4. >или>>

Но эти типы подходят только для создания небольших текстовых файлов, в некоторых случаях для нужд тестирования нужно быстро создать очень большой файл, который может стоить сотни ГБ. В настоящее время, чтобы использовать вышеуказанные команды, вам, возможно, придется подождать сутки, что очень неэффективно.

Ниже приведены некоторые из методов, которые я обычно использую

1. dd

Команда dd может считывать данные из стандартного ввода или из указанного файла и копировать их в новый файл.

$ dd if=/dev/zero of=big_file count=10 bs=1G

Используйте команду Time, вы можете рассчитать файл, чтобы создать 10G, требуется много времени?

$ time dd if=/dev/zero of=big_file count=10 bs=1G
10+0 records in
10+0 records out
10737418240 bytes (11 GB) copied, 7.93627 s, 1.4 GB/s

real    0m7.941s
user    0m0.000s
sys    0m7.935s

Это заняло почти 8 секунд

$ ls -lh big_file 
-rw-r--r-- 1 root root 10G Jun  2 10:57 big_file

2. fallocate

Команда fallocate может предварительно выделить физическое пространство для файлов.-lЗа ним следует размер пространства, единицей измерения по умолчанию являются байты. За ним также могут следовать k, m, g, t, p, e, чтобы указать единицу измерения, представляющую КБ, МБ, ГБ, ТБ, ПБ, ЭБ соответственно.

$ fallocate -l 10G big_file

Используя команду time, сколько времени потребуется для создания файла 10G?

$ time fallocate -l 10G big_file
real    0m0.002s
user    0m0.000s
sys    0m0.001s

На самом деле всего 0,001 секунды.

$ ls -lh big_file 
-rw-r--r-- 1 root root 10G Jun  2 11:01 big_file

Используйте команду du, чтобы узнать, действительно ли файл размером 10G создал файл размером 10G? Судя по результатам, да.

$ du -sh big_file
10G    big_file

3. truncate

Команда Trunchate может уменьшить или расширить файл до указанного размера, используя-sПараметр устанавливает размер.

$ truncate -s 10G big_file

Используя команду time, сколько времени потребуется для создания файла 10G?

$ time truncate -s 10G big_file
real    0m0.001s
user    0m0.000s
sys    0m0.001s

Тоже всего 0,001 секунды.

Однако, в отличие от fallocate, файл, созданный с помощью allocate, имеет реальный размер, а файл, созданный с помощью truncate, — нет.

При использовании команд ls и du результаты будут другими.

$ ls -lh big_file 
-rw-r--r-- 1 root root 10G Jun  2 11:11 big_file

$ du -sh big_file 
0    big_file

Видно, что роль truncate заключается в указании размера файла, и если файл не существует, он будет создан. Если размер указанного файла меньше исходного размера, содержимое будет потеряно.

Размер файла, указанный этой командой, на самом деле является виртуальным. Просто отображаемый размер. Если вы укажете очень большой файл. На самом деле, остальное пространство на сервере не уменьшится.


Выше приведены несколько методов, которые я обычно использую для создания больших файлов, которые можно выбирать в соответствии с различными сценариями использования.Я обычно использую fallocate, который достаточно быстр и также занимает место на диске в реальной жизни, что соответствует реальному тесту. сценарии.