Как создать файл с любым заданным размером в Linux? - PullRequest
9 голосов
/ 01 ноября 2011

Я прочитал этот вопрос: Как создать файл с заданным размером в Linux?

Но у меня нет ответа на мой вопрос.

Я хочу создать файл размером 372,07 МБ,

Я попробовал следующие команды в Ubuntu 10.08:

dd if=/dev/zero of=output.dat  bs=390143672  count=1
dd: memory exhausted
* * 390143672 1011 = 372,07 *1024* 1024

Есть ли другие методы?

Большое спасибо!

Edit: Как просмотреть размер файла в командной строке Linux с десятичной дробью. Я имею в виду, командная строка ls -hl просто говорит: «373M», но файл на самом деле «372.07M».

Ответы [ 4 ]

17 голосов
/ 01 ноября 2011

Разреженный файл

dd of=output.dat bs=1 seek=390143672 count=0

Это дает дополнительное преимущество создание файла разреженный , если соответствующая файловая система поддерживает это. Это означает, что пространство не будет потрачено впустую , если некоторые страницы (_блоки) когда-либо записываются, а создание файла происходит очень быстро .


Не разреженный (непрозрачный) файл:

Редактировать , поскольку люди справедливо указали, что редкие файлы имеют характеристики, которые могут быть невыгодны в некоторых сценариях, вот сладкий момент:

Вместо этого вы можете использовать fallocate (в Debian присутствует из-за util-linux):

fallocate -l 390143672 output.dat

Это все еще имеет то преимущество, что вам не нужно фактически записывать блоков, так что это так же быстро , как создание разреженного файла, , но это не редкий . Лучший из обоих миров.

7 голосов
/ 01 ноября 2011

Измените ваши параметры:

dd if=/dev/zero of=output.dat bs=1 count=390143672

в противном случае dd попытается создать буфер 370 МБ в памяти.

Если вы хотите сделать это более эффективно, сначала напишите 372 МБ частьблоки большого размера (скажем, 1M), затем запишите хвостовую часть с помощью 1-байтовых блоков, используя опцию seek, чтобы сначала перейти в конец файла.

Пример:

dd if=/dev/zero of=./output.dat bs=1M count=1
dd if=/dev/zero of=./output.dat seek=1M bs=1 count=42
1 голос
/ 15 октября 2013

усечь - уменьшить или расширить размер файла до указанного размера

В следующем примере файл putty.log усекается с 298 до 235 байтов.

root@ubuntu:~# ls -l putty.log 
-rw-r--r-- 1 root root 298 2013-10-11 03:01 putty.log
root@ubuntu:~# truncate putty.log -s 235
root@ubuntu:~# ls -l putty.log 
-rw-r--r-- 1 root root 235 2013-10-14 19:07 putty.log
0 голосов
/ 01 ноября 2011

Количество свопов и бс.bs байты будут в памяти, поэтому они не могут быть такими большими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...