TGStat
TGStat
Type to search
Advanced channel search
  • flag English
    Site language
    flag Russian flag English flag Uzbek
  • Sign In
  • Catalog
    Channels and groups catalog Regional compilations Thematic compilations Платные каналы Search for channels
    Add a channel/group
  • Ratings
    Rating of channels Rating of groups Posts rating
    Ratings of brands and people
  • Analytics
  • Search by posts
  • Telegram monitoring
  • Promotion
    Advertising through Yandex Business Advertising in channels through TGStat Agency Advertising on TGStat.ru website
BashTex | Linux

16 Sep, 12:15

Open in Telegram Share Report

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

542 0 18 1 7
Catalog
Channels and groups catalog Channels compilations Search for channels Add a channel/group
Ratings
Rating of Telegram channels Rating of Telegram groups Posts rating Ratings of brands and people
API
API statistics Search API of posts API Callback
Our channels
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Read
Академия TGStat Telegram Research 2019 Telegram Research 2021 Telegram Research 2023
Contacts
Справочный центр Support Email Jobs
Miscellaneous
Terms and conditions Privacy policy Public offer
Our bots
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot