TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.52K subscribers
Post #649 551
Sparse files: почему файл на 100 ГБ может занимать несколько мегабайт

Размер файла и реально занятое место на диске не всегда совпадают.

Можно создать файл, который логически имеет размер 100 ГБ, но физически занимает всего несколько мегабайт.
Для этого используются sparse files.

▪️Создаём sparse-файл

truncate -s 100G test.img


Теперь:

ls -lh test.img


покажет:

-rw-r--r-- 1 user user 100G test.img


Но:

du -h test.img


может показать всего несколько килобайт.

ls смотрит на логический размер, а du - на реально выделенные filesystem blocks.

▪️Что произошло
Файл содержит большой диапазон нулей, для которого файловая система не обязана физически выделять блоки.

Условно:

логический файл:

[данные][ огромная область нулей ][данные]
↓ ↓ ↓
блоки hole блоки

Эта незаполненная область называется hole.

▪️Можно посмотреть оба размера

stat test.img

Обратите внимание на:

Size:
Blocks:

Size — логический размер файла.
Blocks — сколько filesystem blocks реально выделено.

▪️Почему это важно
Sparse files часто используются для образов виртуальных машин и контейнеров:

VM disk image → 100 GB
actual allocated space → 12 GB

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

Но если эти области постепенно заполняются, реальное потребление диска начинает расти.

▪️Как проверить sparse-файл

du -h test.img
du --apparent-size -h test.img


Второй вариант показывает размер так, будто sparse-областей нет.

Например:

8.0K    test.img
100G test.img


▪️Практический сценарий

Есть сервер виртуализации, и администратор видит:

ls -lh /var/lib/images/*


Образы занимают:

500G

Но:

du -sh /var/lib/images

показывает:

180G

Это не обязательно ошибка подсчёта.
Часть образов может быть sparse.

▪️Важный нюанс
Копирование sparse-файла не всегда сохраняет holes.
Например, некоторые способы копирования могут превратить разреженный файл в обычный и реально записать нулевые блоки.

Проверить результат можно снова через:

du -h file
du --apparent-size -h file


Поэтому при работе с большими VM-образами важно различать логический размер файла и реально выделенное дисковое пространство.

BashTex 📱 #bash #systemd
  • 👍 7
More from @bash_tex
  1. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  2. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  3. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  4. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  5. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
  6. Sep 29, 2026tee + process substitution: один поток и несколько получателей Иногда нужно одновременно:…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →