Я хочу создать большой файл ~ 10G, заполненный нулями и случайными значениями. Я пытался с помощью:
dd if=/dev/urandom of=10Gfile bs=5G count=10
Он создает файл размером около 2 ГБ и выходит со статусом выхода «0». Я не понимаю, почему?
Я также попытался создать файл, используя:
head -c 10G </dev/urandom >myfile
Это займет около 28-30 минут, чтобы создать его. Но я хочу, чтобы это создавалось быстрее. У кого-нибудь есть решение?
Также я хочу создать несколько файлов с одинаковым (псевдо) случайным рисунком для сравнения. Кто-нибудь знает способ сделать это?
dd
из-за размера блока. Возможно, вы захотите взглянуть на этот пост stackoverflow.com/questions/6161823/… там есть несколько хороших ответов о том, как рассчитать наилучший размер блока, а также некоторые пользовательские скрипты / программы и другие предложения по их использованиюdd
.Ответы:
Как насчет использования fallocate, этот инструмент позволяет нам предварительно выделить место для файла (если файловая система поддерживает эту функцию). Например, выделив 5 ГБ данных в файл с именем «example», можно сделать:
Это намного быстрее, чем dd, и очень быстро выделит место.
источник
/dev/zero
?truncate
в прошлом и обнаружил, что он физически не распределяет файл на устройстве, а просто создает произвольный большой файл до тех пор, пока к нему нет доступа, независимо от доступного пространства. Вы уверены, что это не так сfallocate
? Я бы проверил это, но я на мобильном ...Вы можете использовать
dd
для создания файла, состоящего исключительно из нулей. Пример:Это очень быстро, потому что только один байт действительно записывается на физический диск. Однако некоторые файловые системы не поддерживают это.
Если вы хотите создать файл, содержащий псевдослучайное содержимое, запустите:
Я предлагаю вам использовать 10M в качестве размера буфера (
bs
). Это связано с тем, что 10M не слишком велик, но все же дает хороший размер буфера. Это должно быть довольно быстро, но это всегда зависит от скорости вашего диска и вычислительной мощности.источник
Используя dd, это должно создать файл размером 10 ГБ, заполненный случайными данными:
count
в мегабайтах.Источник: stackoverflow - Как создать файл с заданным размером в Linux?
источник
dd if=/dev/urandom of=10Gfile bs=500M count=20
, что дало мне 10237226010 байт чуть менее чем за 20 минут.Отвечая на первую часть вашего вопроса:
Попытка записать буфер по 5 ГБ за раз не очень хорошая идея, поскольку ваше ядро, вероятно, не поддерживает это. Это не даст вам никакого выигрыша в производительности в любом случае. Написание 1M за один раз - это хороший максимум.
источник
Этот вопрос был открыт 5 лет назад. Я просто наткнулся на это и хотел добавить свои выводы.
Если вы просто используете
это будет работать значительно быстрее, как объясняет xiaodongjie. Но вы можете сделать это еще быстрее, используя
eatmydata
какЧто
eatmydata
делает, это отключает fsync, заставляя диск записывать быстрее.Вы можете узнать больше об этом на https://flamingspork.com/projects/libeatmydata/ .
источник
dd
начала я достаточно быстр, и по какой-то причине он называется libEAT-MY-DATA.