Я хочу создать большой файл ~ 10G, заполненный нулями и случайными значениями. Я попытался с помощью:
dd if=/dev/urandom of=10Gfile bs=5G count=10
Он создает файл около 2 ГБ и выходит со статусом выхода «0». Я не понимаю, почему?
Я также пытался создать файл, используя:
head -c 10G </dev/urandom >myfile
На его создание уходит около 28-30 минут. Но я хочу, чтобы это создавалось быстрее. У кого-нибудь есть решение?
Также я хочу создать несколько файлов с одинаковым (псевдо) случайным шаблоном для сравнения. Кто-нибудь знает способ сделать это?
Можно использовать 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 не является слишком большим, но это все еще дает Вам хороший размер буфера. Это должно быть довольно быстро, но это всегда зависит от Вашей скорости диска и вычислительной мощности.
Используя dd, это должно создать файл на 10 ГБ, заполненный случайными данными:
dd if=/dev/urandom of=test1 bs=1M count=10240
count
находится в мегабайтах.
Источник: stackoverflow - Как создать файл с данным размером в Linux?
Ответ на первую часть Вашего вопроса:
Попытка записать буфер 5 ГБ за один раз не является хорошей идеей, поскольку Ваше ядро, вероятно, не поддерживает это. Это не даст Вам выигрыша в производительности в любом случае. Запись 1M за один раз является хорошим максимумом.
Как насчет того, чтобы использовать fallocate, этот инструмент позволяет нам предварительно выделять пространство для файла (если файловая система поддерживает эту функцию). Например, выделение 5 ГБ данных в файл назвало 'пример', можно сделать:
fallocate -l 5G example
Это намного быстрее, чем dd и выделит место очень быстро.
Этот вопрос был открыт 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 / .