Я хочу создать файл объемом 2 ГБ, но меня не волнует его содержимое. В настоящее время я использую dd с /dev/zero , но это довольно медленно.

Можно ли создать файл и жесткую ссылку на него, не инициализируя содержимое файла (он может содержать данные об мусоре, которые ранее находились в этом месте на жестком диске)?

Примечание: я действительно хочу выделить хранилище. Я не хочу редких файлов.

2 ответа2

1

То, на что вы ссылаетесь, называется "разреженным" файлом.

С этой страницы

Разреженные файлы в основном похожи на любой другой файл, за исключением того, что блоки, которые содержат только нули (т. Е. Ничего), на самом деле не хранятся на диске. Это означает, что у вас может быть файл размером 16 ГБ - с 16 ГБ «данных» - занимающий только 1 ГБ места на диске.

Чтобы создать его с помощью dd вы можете использовать параметр seek= :

dd if=/dev/zero of=sparse-file bs=1 count=1 seek=1024k

Параметры seek и bs говорят, что он просто ищет конец файла после 1 блока, который должен дать вам разреженный файл, на который вы можете затем перейти по горячей ссылке, если хотите.

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

- = EDIT = -

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

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

Это явно плохой дизайн в операционных системах, которые любят думать о себе как о безопасных, и ни одна современная многопользовательская операционная система не сделает этого.

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

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

0

Это может быть то, что вам нужно, мгновенный сырой файл:

qemu-img create yourfile.img 2G
Formatting 'yourfile.img', fmt=raw size=2147483648

$ls -all
-rw-r--r--  1 mugen users 2147483648 Aug  8 23:48 yourfile.img

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

Именно поэтому был изобретен shred .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .