Иногда возникает необходимость создания файла определенного размера. Сделать это можно разнообразными способами. Рассмотрим несколько из них. В примерах будем создавать файл размером 100MB.
# dd of=test_file.100mb bs=1 count=0 seek=100M 0+0 records in 0+0 records out 0 bytes transferred in 0.000046 secs (0 bytes/sec) |
Проверяем размер созданного файла:
# ls -lh | grep test_file -rw-r--r-- 1 root wheel 100M 3 май 20:26 test_file.100mb |
# dd if=/dev/zero of=test_file.100mb bs=1M count=100 100+0 records in 100+0 records out 104857600 bytes transferred in 1.151160 secs (91088641 bytes/sec) |
Проверяем размер созданного файла:
# ls -lh | grep test_file -rw-r--r-- 1 root wheel 100M 3 май 20:33 test_file.100mb |
# truncate -s 100M test_file.100mb |
Проверяем размер созданного файла:
# ls -lh | grep test_file -rw-r--r-- 1 root wheel 100M 3 май 21:04 test_file.100mb |
Re: Создание файла определенного размера
mkfile еще есть,но не везде
;)
Re: Создание файла определенного размера
В системе отсутствует, но похоже, что утилита присутствует в портах:
Port: mkfile-1.1.3
Path: /usr/ports/sysutils/mkfile
Info: Create files suitable for use as swap files
Maint: hatanou [at] infolab [dot] ne [dot] jp
B-deps:
R-deps:
WWW: http://www.infolab.ne.jp/~hatanou/freebsd/mkfile/
Re: Создание файла определенного размера
Можна докладніше у чому принципова різниця між першим та другим способами?
Якщо з другим все зрозуміло: у якості джерела нулів використовуємо /dev/zero та наповнюємо цими нулями файл test_file.100mb влоками по 1M доки його розмір не сягне 100mb. В резальтаті отримаємо файл 100mb заповнений нулями, який дуже добре стискатиметься компресором.
То з першим способом не зовсім, що й звідки ми беремо, тобто чим буде наповнений файл, що означає seek=100M, і чому count=0.
Ще буду дуже вдячний за коротке пояснення третього способу, ну й пару слів про то у яких випадках який спосіб краще використовувати.
Re: Создание файла определенного размера
Згідно man dd:
Тепер "на пальцях" щодо 1 способу... Беремо блок розміром 1 байт і звертаємось до нього 100М разів (як варіант, можна взяти блок розміром 1М і повторити його 100 разів, результат буде той же) перед копіюванням. Count рівний нулю, оскільки в нас немає вихідного потоку, звідки можна взяти дані.
Файли у всіх трьох випадках заповнені нулями. Перевіряв, контрольна сумма файла, створеного будь-яким наведеним способом, співпадає:
MD5 (test_file.100mb2) = 2f282b84e7e608d5852449ed940bfc51
MD5 (test_file.100mb3) = 2f282b84e7e608d5852449ed940bfc51
Щодо третього способу, то утиліта truncate служить для "укорочення" чи "подовження" файлу до певного розміру. Оскільки вхідного файлу немає, то вона створить новий вказаного розміру. Рекомендую ознайомитись з man truncate.
Щодо продуктивності - потрібно виконати тести створюючи файли великих розмірів, при створенні файлу малого розміру різницю у використання ресурсів системи складно помітити. Скоріше всього, "вузьким" місцем буде продуктивність HDD, однак при деяких варіаціях роботи з dd є можливість "зловити" проблему з RAM при роботі з блоками. В будь-якому випадку, оскільки дані маніпуляції використовуються рідко, недоцільно витрачати час для виконання тестів з визначення оптимального способу щодо використання ресурсів системи.
Re: Создание файла определенного размера
дякую за пояснення