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