Можно ли создать файл и жесткую ссылку на него без инициализации данных?
Я хочу создать файл объемом 2 ГБ, но меня не волнует его содержимое. Я сейчас пользуюсь dd
с /dev/zero
, но это довольно медленно.
Можно ли создать файл и жесткую ссылку на него, не инициализируя содержимое файла (он может содержать данные об мусоре, которые ранее находились в этом месте на жестком диске)?
Примечание: я действительно хочу выделить хранилище. Я не хочу редких файлов.
2 ответа
То, на что вы ссылаетесь, называется "разреженным" файлом.
Разреженные файлы в основном похожи на любой другой файл, за исключением того, что блоки, которые содержат только нули (т. Е. Ничего), на самом деле не хранятся на диске. Это означает, что у вас может быть файл размером 16 ГБ - с 16 ГБ "данных" - занимающий только 1 ГБ места на диске.
Чтобы создать один, используя dd
Вы можете использовать seek=
параметр:
dd if=/dev/zero of=sparse-file bs=1 count=1 seek=1024k
seek
а также bs
Параметры говорят ему просто искать в конце файла после 1 блока, что должно дать вам разреженный файл, на который вы можете затем перейти по горячей ссылке, если хотите.
Это даст вам совершенно пустой файл, который не займет места на диске, пока он не будет записан. Его создание также должно быть почти мгновенным.
- = EDIT = -
Если вы хотите, чтобы файл был выделен и не заботились о его содержимом, пока вы не напишите в него, вам нужен разреженный файл, но, как правило, по соображениям безопасности файловой системы это считается "плохой формой", чтобы позволить непривилегированному приложению создать файл, используя данные, которые уже существует на диске.
Это связано с тем, что если пользовательское приложение может сделать это, оно потенциально может предоставлять конфиденциальные данные другим пользователям, выделяя файл размером со все свободное пространство на диске и просматривая его, ища пароли и другие конфиденциальные данные, которые мог сохранить другой пользователь. скопированы или удалены.
Это явно плохой дизайн в операционных системах, которые любят думать о себе как о безопасных, и ни одна современная многопользовательская операционная система не сделает этого.
Это еще одна причина, по которой разреженным файлам при чтении по умолчанию присваивается ноль, а не разрешается выделять область диска.
Если вы хотите быстро создать файл произвольных данных без предварительного выделения блоков, вам нужен разреженный файл, если вы хотите фактически выделить эти блоки, вам нужно явно что-то записать в них.
Это может быть то, что вам нужно, мгновенный сырой файл:
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
был изобретен для.