Создание файла большого размера за меньшее время

Я хочу создать большой файл ~ 10G, заполненный нулями и случайными значениями. Я попытался с помощью:

dd if=/dev/urandom of=10Gfile bs=5G count=10

Он создает файл около 2 ГБ и выходит со статусом выхода «0». Я не понимаю, почему?

Я также пытался создать файл, используя:

head -c 10G </dev/urandom >myfile

На его создание уходит около 28-30 минут. Но я хочу, чтобы это создавалось быстрее. У кого-нибудь есть решение?

Также я хочу создать несколько файлов с одинаковым (псевдо) случайным шаблоном для сравнения. Кто-нибудь знает способ сделать это?

17
задан 5 August 2014 в 01:53

5 ответов

Можно использовать dd для создания файла, состоящего только из нулей. Пример:

dd if=/dev/zero of=zeros.img count=1 bs=1 seek=$((10 * 1024 * 1024 * 1024 - 1))

Это очень быстро, потому что только один байт действительно записан в физический диск. Однако некоторые файловые системы не поддерживают это.

, Если Вы хотите создать файл, содержащий псевдослучайное содержание, работайте:

dd if=/dev/urandom of=random.img count=1024 bs=10M

я предлагаю, чтобы Вы использовали 10M в качестве размера буфера (bs). Это вызвано тем, что 10M не является слишком большим, но это все еще дает Вам хороший размер буфера. Это должно быть довольно быстро, но это всегда зависит от Вашей скорости диска и вычислительной мощности.

8
ответ дан 5 August 2014 в 01:53

Используя dd, это должно создать файл на 10 ГБ, заполненный случайными данными:

dd if=/dev/urandom of=test1 bs=1M count=10240

count находится в мегабайтах.

Источник: stackoverflow - Как создать файл с данным размером в Linux?

5
ответ дан 5 August 2014 в 01:53

Ответ на первую часть Вашего вопроса:

Попытка записать буфер 5 ГБ за один раз не является хорошей идеей, поскольку Ваше ядро, вероятно, не поддерживает это. Это не даст Вам выигрыша в производительности в любом случае. Запись 1M за один раз является хорошим максимумом.

1
ответ дан 5 August 2014 в 01:53

Как насчет того, чтобы использовать fallocate, этот инструмент позволяет нам предварительно выделять пространство для файла (если файловая система поддерживает эту функцию). Например, выделение 5 ГБ данных в файл назвало 'пример', можно сделать:

fallocate -l 5G example

Это намного быстрее, чем dd и выделит место очень быстро.

12
ответ дан 5 August 2014 в 01:53

Этот вопрос был открыт 5 лет назад. Я просто споткнулся через это и хотел добавить свои результаты.

, Если Вы просто используете

dd if=/dev/urandom of=random.img count=1024 bs=10M

, это будет работать значительно быстрее, как объяснено xiaodongjie. Но, можно сделать его еще быстрее при помощи eatmydata как

eatmydata dd if=/dev/urandom of=random.img count=1024 bs=10M

, Что eatmydata делает это, отключает fsync создание записи на диск быстрее.

можно читать больше об этом в https://flamingspork.com/projects/libeatmydata / .

0
ответ дан 7 October 2019 в 09:59

Другие вопросы по тегам:

Похожие вопросы: