Створення файлу великого розміру за менший час


18

Я хочу створити великий файл ~ 10G, заповнений нулями та випадковими значеннями. Я спробував використовувати:

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

Він створює файл розміром близько 2 Гбіт і виходить зі статусом виходу "0". Я не розумію, чому?

Я також спробував створити файл, використовуючи:

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

На його створення знадобиться близько 28-30 хвилин. Але я хочу, щоб це створювалося швидше. У когось є рішення?

Також я хочу створити кілька файлів з однаковим (псевдо) випадковим малюнком для порівняння. Хтось знає спосіб це зробити?


Ласкаво просимо до AskUbuntu! Ви, ймовірно, отримуєте помилку ddчерез розмір блоку. Ви можете поглянути на цю публікацію stackoverflow.com/questions/6161823/…, вона має кілька хороших відповідей, як обчислити найкращий розмір блоку, а також деякі сценарії / програми користувача та інші пропозиції з використанням dd.
Час

1
Крім того , подивіться на stackoverflow.com/questions/257844 / ...
Муру

Відповіді:


12

Щодо використання fallocate, цей інструмент дозволяє попередньо виділити місце для файлу (якщо файлова система підтримує цю функцію). Наприклад, виділяючи 5 Гб даних у файл, який називається "приклад", можна зробити:

fallocate -l 5G example

Це набагато швидше, ніж дд, і виділить простір дуже швидко.


Чи містить цей файл випадкові дані чи він містить те, що трапилося на виділеному дисковому просторі?
cprn

Він буде містити всі нулі. В основному простір попередньо розподілено, і якщо ви не модифікуєте дані, він вважатиметься рівним нулю.
Колін Іан Кінг

Як це може бути швидше, ніж скидання /dev/zero?
cprn

1
Це дуже швидко, тому що це один системний виклик, який блокує попереднє розташування (наприклад, він резервує простір, але робить мінімальний введення-вивід), де, оскільки dd'ing з / dev / zero у файл включає навантаження читання / запису.
Колін Іан Кінг

Я піднімаю цю. Останнє запитання, хоча ... Я використовував truncateраніше і з'ясував, що він фізично не виділяє файл на пристрої, а просто створює довільний великий файл до доступу, незалежно від наявного місця. Ви впевнені, що це не так fallocate? Я б перевірив це, але я на мобільному ...
cprn

9

Ви можете 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). Це тому, що 10М не надто великий, але він все ще дає хороший розмір буфера. Це має бути досить швидким, але це завжди залежить від швидкості вашого диска та потужності обробки.


5

Використовуючи dd, це має створити 10 Гб файл, заповнений випадковими даними:

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

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

Джерело: stackoverflow - Як створити файл із заданим розміром в Linux?


Я щойно спробував dd if=/dev/urandom of=10Gfile bs=500M count=20, що дало мені 10237226010 байт за трохи менше 20 хвилин.
Джос

1

Відповідаючи на першу частину вашого питання:

Спроба написати буфер об'ємом 5 Гб одночасно - це не дуже гарна ідея, оскільки ваше ядро, ймовірно, не підтримує цього. Це не дасть вам жодної користі від продуктивності в будь-якому випадку. Писати 1М за один раз - хороший максимум.


0

Це питання було відкрито 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/ .


1
Спочатку я дивлюся на це ddдосить швидко, і це називається libEAT-MY-DATA чомусь.
karel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.