Найти тему
BASH DAYS | Linux Factory

Разрежённый файл или заговор хостеров?

Оглавление

Сегодня продолжим тему с нулями, но на этот раз обсудим такое понятие как — Разрежённый файл. Или как их звать-величать «Дырявые файлы».

Ты всяко в курсе, когда в виртуалке создаешь жесткий диск размером 500 гигабайт, то физический размер этого диска на хостовой машине будет около 1-2х гигабайта, само собой с установленной Linux системой.

Ты суслика видишь? Нет. И я не вижу, а он есть.

А где же все остальное место? А нигде, есть только информация, которая хранится об этом размере в метаданных файловой системы. И по мере необходимости это физическое место на диске выделяется и используется. Сам же файл представляет собой последовательность тех самых нулевых байт (magic zero).

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


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

Чтобы стало понятнее, давай тыкать палкой.

Создаем дырявый файл:

dd if=/dev/zero of=./bashdays bs=1 count=0 seek=100M

Создался файл bashdays размером 4 мегабайта. Да, не 100, а именно 4ре. Открываем в режиме просмотра и видим в нём нули. По факту его можно растянуть как резиновое изделие до 100 мегабайт. Размер будет увеличиваться, по мере заполнения этого файла данными, но не сможет превысить 100 мегабайт.

Как альтернатива, ты можешь создать такой файл так:

truncate -s100M ./bashdays

Окей, файл есть и что дальше? А дальше этот файл нужно чем-то заполнить.

Дырявые файлы обычно применяются для:

- экономии места на диске
- виртуализации
- резервных копий
- баз данных
- файловых систем

Очевидно это связанно с оптимизацией, ну и чтобы твой любимый жесткий диск не насиловать физическими записанными нулями.

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

Чтобы примонтировать такой файл как ФС, делаешь так:

mkfs.ext4 ./bashdays
mount ./bashdays /mnt


Первая накатит туда ext4, а вторая смонтирует в /mnt. А еще в такой дырявый файл можно установить операционную систему и даже загрузится в неё. Короче тут кейсов много всяких, все зависит от твоих задач и предпочтений. Но тема да, прикольная. Всякие virtualbox и т.п. это активно используют.

Теперь про хостеров


Хостеры и не только, часто используют данную фичу, чтобы раскатывать тебе VPS за несколько секунд, единицы ставят ОС с нуля и выдают «честные» гигабайты на жестком диске.

Подпишись на BashDays в телеграм



Логично, что хостеры НЕ будут резервировать тебе 100 гигабайт места на диске. Возможно ты ими пользоваться вообще не будешь. Чо оно будет просто так болтаться? А денежку конечно же будут брать именно за 100 гигабайт. По факту ты платишь за дырявый файл, который возможно никогда и не заполнится до конца.

Например, если в яндекс облаке выключить все виртуалки, денежка все равно будет капать за дисковое пространство. Улавливаешь?

Как это работает: есть эталонные образы дырявого файла, разного размера. Ты выбираешь у хостера тариф например 2/2/30, затем берется заранее подготовленный дырявый файл с нужным размером диска и отдается тебе.

Ты видишь (через df -h) что на винте 30 гигабайт, радуешься, но на самом деле это место еще никак не распределено. Используется только 4-5 гигабайта. По мере заполнения данными, заполняется и твой дырявый файл, который тебе продали за 10$ в месяц. Получается так, что в большинстве случаев у тебя в запасе всегда болтается процентов 20 от объема диска, которые ты не используешь, но исправно оплачиваешь.

Такая вот замечательная бизнес модель, такие вот замечательные разрежённые файлы.

Казино всегда в плюсе и ставит на /dev/zero. Делайте ваши ставки, дамы и господа!

Рекомендую почитать