Создание файла определенного размера

Версия для печатиОтправить другуPDF version

Иногда возникает необходимость создания файла определенного размера. Сделать это можно разнообразными способами. Рассмотрим несколько из них. В примерах будем создавать файл размером 100MB.

  • СПОСОБ 1. С помощью утилиты dd
# 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

 

  • СПОСОБ 2. С помощью утилиты dd
# 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

 

  • СПОСОБ 3. С помощью утилиты truncate
# 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: Создание файла определенного размера

В системе отсутствует, но похоже, что утилита присутствует в портах:

# cd /usr/ports && make search name='mkfile'
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:

     seek=n   Seek n blocks from the beginning of the output before copying.
              On non-tape devices, an lseek(2) operation is used.  Otherwise,
              existing blocks are read and the data discarded.  If the user
              does not have read permission for the tape, it is positioned
              using the tape ioctl(2) function calls.  If the seek operation
              is past the end of file, space from the current end of file to
              the specified offset is filled with blocks of NUL bytes.

Тепер "на пальцях" щодо 1 способу... Беремо блок розміром 1 байт і звертаємось до нього 100М разів (як варіант, можна взяти блок розміром 1М і повторити його 100 разів, результат буде той же) перед копіюванням. Count рівний нулю, оскільки в нас немає вихідного потоку, звідки можна взяти дані.

Файли у всіх трьох випадках заповнені нулями. Перевіряв, контрольна сумма файла, створеного будь-яким наведеним способом, співпадає:

MD5 (test_file.100mb1) = 2f282b84e7e608d5852449ed940bfc51
MD5 (test_file.100mb2) = 2f282b84e7e608d5852449ed940bfc51
MD5 (test_file.100mb3) = 2f282b84e7e608d5852449ed940bfc51

Щодо третього способу, то утиліта truncate служить для "укорочення" чи "подовження" файлу до певного розміру. Оскільки вхідного файлу немає, то вона створить новий вказаного розміру. Рекомендую ознайомитись з man truncate.

Щодо продуктивності - потрібно виконати тести створюючи файли великих розмірів, при створенні файлу малого розміру різницю у використання ресурсів системи складно помітити. Скоріше всього, "вузьким" місцем буде продуктивність HDD, однак при деяких варіаціях роботи з dd є можливість "зловити" проблему з RAM при роботі з блоками. В будь-якому випадку, оскільки дані маніпуляції використовуються рідко, недоцільно витрачати час для виконання тестів з визначення оптимального способу щодо використання ресурсів системи.

 

Re: Создание файла определенного размера

дякую за пояснення

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература