Назад | Перейти на главную страницу

Быстрое создание файла linux

Я хочу создать пустой (не обнуленный) файл в файловой системе ext4. Я могу сделать это с помощью:

dd if=/dev/zero of=file count=xxxx

Но это займет некоторое время, если x составляет около 0,5T. Полагаю, есть способ быстро создать такой файл. Он может содержать тарабарщину, неважно.

Вы можете создать разреженный файл, но может не иметь желаемых результатов в зависимости от того, почему вы это делаете:

dd if=/dev/zero of=sparse_file bs=1 count=1 seek=512M

ls -l sparse_file        
-rw-rw-r-- 1 kbrandt kbrandt 536870913 2010-03-03 08:30 sparse_file

Проблема в том, что если программа не знает, как обрабатывать разреженные файлы, когда вы делаете что-то вроде копирования файла, она заполняет его нулями. Например, см. это предыдущее сообщение serverfault. Вы можете увидеть разницу с du также:

[kbrandt@kbrandt-opadmin: /bigfiles] du sparse_file
12  sparse_file
[kbrandt@kbrandt-opadmin: /bigfiles] du sparse_file --apparent-size
524289  sparse_file
[kbrandt@kbrandt-opadmin: /bigfiles] #cat is not sparse aware, watch what happens
[kbrandt@kbrandt-opadmin: /bigfiles] cat sparse_file > sparse_file2 
[kbrandt@kbrandt-opadmin: /bigfiles] du sparse_file2
524808  sparse_file2

Наконец, если вы действительно хотите ввести нули, если вы установите более высокий bs, это может быть немного быстрее, например, bs = 4096. Вот ссылка кому-то, кто действительно сделал несколько тестов с размерами блоков dd.

Достаточно ли разреженного файла?

% dd if=/dev/zero of=sparsefile bs=1k seek=500M count=1
1+0 records in
1+0 records out
1024 bytes transferred in 0.000224 secs (4569114 bytes/sec)

% ls -lh sparsefile
-rw-------  1 james  james   500G  3 Mar 13:30 sparsefile

Использование:

truncate -s 500G filename

это действительно быстро, если ваша файловая система поддерживает разреженные файлы.

Содержимое файла всегда обнуляется. Linux не позволит вам повторно использовать сектора диска без их обнуления, поскольку это представляет угрозу безопасности. Для разреженных файлов секторы выделяются только при первой записи.