Я хочу создать пустой (не обнуленный) файл в файловой системе 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 не позволит вам повторно использовать сектора диска без их обнуления, поскольку это представляет угрозу безопасности. Для разреженных файлов секторы выделяются только при первой записи.