Если вы когда-нибудь замечали, что файл «весит» в проводнике одно, а в свойствах или диспетчере задач показывает другое — это не ошибка системы. Размер на диске и объём занимаемой памяти действительно могут различаться, причём в обе стороны. Главный принцип простой: размер файла — это количество данных в нём, а место на диске — то, что файловая система физически выделяет под эти данные. Между этими величинами стоят кластеры, сжатие, метаданные и разные системы счисления. Разберём каждый фактор и покажем, как самостоятельно проверить, куда «уходит» разница.
- Два разных вопроса: сколько данных и сколько места занято
- Как работает кластеризация
- Единицы измерения: килобайты, кибибайты и маркетинговые гигабайты
- Сжатие: когда файл на диске меньше, чем его данные
- Метаданные и служебная информация
- Размер в оперативной памяти: третья цифра, которая всех путает
- Как проверить, куда уходит разница
- Типичные ошибки и заблуждения
- Что важно помнить на практике
Два разных вопроса: сколько данных и сколько места занято
Когда операционная система показывает размер файла, она отвечает на вопрос «сколько байт полезных данных записано в этом файле». Когда показывает размер на диске — вопрос другой: «какой объём физического хранилища зарезервирован под этот файл». Это разные вещи, потому что диск не умеет выделять место побайтово.
Файловая система делит накопитель на блоки фиксированного размера — кластеры (их также называют единицами распределения). Даже если файл занимает один байт, под него будет выделен целый кластер. Отсюда классическая ситуация: тысяча мелких текстовых файлов по 100–500 байт может занять на диске несколько мегабайт, потому что каждому достался свой кластер целиком.
Как работает кластеризация
Типичный размер кластера на современных дисках — 4 КБ (4096 байт), хотя он зависит от файловой системы, объёма раздела и настроек форматирования. Логика выделения места такая:
- файл размером до 4 КБ занимает один кластер — на диске он «весит» 4 КБ независимо от реального содержимого;
- файл размером 5 КБ занимает два кластера — 8 КБ на диске;
- файл размером ровно 4096 байт занимает один кластер без остатка — здесь цифры совпадут.
Поэтому для больших файлов (фильмы, архивы, образы) разница из-за кластеров почти незаметна — она не превышает одного кластера. А вот папки с десятками тысяч мелких файлов (кэш браузера, исходный код, фотографии небольшого разрешения) теряют заметно больше места, чем показывают суммарные размеры файлов.
Единицы измерения: килобайты, кибибайты и маркетинговые гигабайты
Вторая причина расхождений — путаница в системах счисления. Производители накопителей считают в десятичных единицах: 1 ГБ = 1 000 000 000 байт. Операционные системы традиционно используют двоичные: 1 ГиБ = 1 073 741 824 байта (1024³). Разница между ними — около 7% на каждом гигабайте.
Отсюда известный эффект: новый диск «на 1 ТБ» после форматирования показывает примерно 931 ГБ. Диск не обманывает и место не потеряно — просто числа пересчитаны в другую систему. Некоторые ОС постепенно переходят на корректные обозначения (КиБ, МиБ, ГиБ), но в быту все продолжают говорить «килобайты» и «гигабайты», подразумевая то одно, то другое.
| Десятичная единица (производители) | Двоичная единица (ОС) | Разница |
|---|---|---|
| 1 КБ = 1000 байт | 1 КиБ = 1024 байта | 2,4% |
| 1 МБ = 10⁶ байт | 1 МиБ = 1024² байт | около 4,9% |
| 1 ГБ = 10⁹ байт | 1 ГиБ = 1024³ байт | около 7,4% |
| 1 ТБ = 10¹² байт | 1 ТиБ = 1024⁴ байт | около 10% |
Практический вывод: если сравниваете размеры файлов и свободного места, смотрите, какую систему использует конкретная программа. Файловый менеджер и загрузчик могут показывать одну и ту же величину с разницей в несколько процентов только из-за округления.
Сжатие: когда файл на диске меньше, чем его данные
Место на диске может быть меньше логического размера файла, если данные хранятся в сжатом виде:
- Прозрачное сжатие файловой системы. NTFS умеет сжимать файлы и целые папки «на лету»: пользователь видит исходный размер, а физически занято меньше. Работает хорошо на текстах, плохо — на уже сжатых данных вроде видео и архивов.
- Архивы и контейнеры. ZIP-архив при открытии сообщает размер распакованного содержимого, а на диске занимает меньше. То же касается образов дисков и резервных копий.
- Дедупликация. Серверные системы могут хранить одинаковые блоки данных один раз, а файлам выдавать ссылки. Логический объём данных превышает физический, иногда многократно.
- Разрежённые файлы (sparse files). Если внутри файла есть длинные участки нулей, файловая система может их вообще не записывать на диск. Такой файл «весит», например, 10 ГБ, а физически занимает сотни мегабайт. Так работают образы виртуальных машин и некоторые базы данных.
Обратный случай тоже возможен: шифрованные и уже сжатые данные почти не сжимаются повторно, поэтому попытка заархивировать видеофайл обычно даёт экономию в доли процента.
Метаданные и служебная информация
Кроме самих данных, файловая система хранит о каждом файле дополнительную информацию: имя, права доступа, время создания и изменения, атрибуты, иногда альтернативные потоки данных. Эта информация тоже занимает место, но в размере файла не учитывается.
- В NTFS у каждого файла есть запись в таблице MFT; мелкие файлы могут целиком помещаться прямо в эту запись, но служебные структуры всё равно расходуют место.
- Журналируемые файловые системы ведут журнал операций — это страховка от повреждения при сбое питания, но и дополнительный расход ёмкости.
- У фотографий и видео метаданные (EXIF, GPS-координаты, настройки съёмки) могут занимать десятки килобайт — для тысячи снимков это уже мегабайты.
По отдельности вклад каждой позиции мал, но на накопителе с миллионами файлов суммарный «невидимый» объём становится ощутимым. Именно поэтому даже пустой только что отформатированный раздел показывает не ноль занятого места, а некоторый служебный минимум.
Размер в оперативной памяти: третья цифра, которая всех путает
Часто под «размером в памяти» имеют в виду объём, который процесс занимает в оперативной памяти, — например, в диспетчере задач. Здесь расхождения ещё больше, потому что память и диск устроены принципиально по-разному:
- Выравнивание страниц. Память выделяется страницами (обычно по 4 КБ), и каждая область данных округляется вверх до границы страницы.
- Загрузка секций. Программа на диске — это упакованный файл, а в памяти её код и данные размещаются с выравниванием и дополнительными структурами.
- Совместно используемые библиотеки. Одна и та же системная библиотека физически находится в памяти один раз, но учитывается в адресном пространстве многих процессов. В зависимости от того, считает ли диспетчер «рабочий набор» или «выделенную память», цифры будут разными.
- Сжатие и выгрузка. Часть памяти может быть сжата или отправлена в файл подкачки — тогда текущее значение меняется динамически.
Поэтому программа с установочным файлом на 200 МБ может занимать в памяти и 50 МБ, и 800 МБ — в зависимости от архитектуры, загруженных модулей и момента замера. Это нормально и не говорит ни о ошибке, ни о «прожорливости» программы саму по себе.
Как проверить, куда уходит разница
Большинство расхождений можно диагностировать самостоятельно, без специальных программ:
- Откройте свойства файла и сравните строки «Размер» и «Размер на диске». Если вторая больше и кратна 4 КБ — это обычная кластеризация, беспокоиться не о чем.
- Если «размер на диске» заметно меньше — проверьте, не сжат ли файл средствами файловой системы (атрибут сжатия) и не является ли он разрежённым или архивом.
- Для папки с множеством мелких файлов посмотрите её свойства: сумма размеров файлов будет меньше реально занятого места. Уменьшить потери можно, упаковать такие файлы в один архив или контейнер.
- Сравните суммарный объём всех файлов на разделе со свободным местом. Расхождение в несколько процентов — норма: это метаданные, журнал и служебные структуры. Большая необъяснимая разница может указывать на скрытые файлы (включите отображение системных файлов) или на проблемы с файловой системой.
- Проверьте размер кластера тома командой проверки файловой системы или утилитой информации о томе — это поможет точнее оценивать потери на мелких файлах.
Типичные ошибки и заблуждения
- «Диск продали с недостающим объёмом». Нет: производитель честно указал десятичные гигабайты, система показывает двоичные. Пересчитайте — цифры сойдутся.
- «Мелкие файлы ничего не весят». Каждый из них занимает минимум один кластер. Миллион файлов по 200 байт займёт несколько гигабайт.
- «Скопировал файл — стало вдвое больше места». Нет: копия занимает столько же, сколько оригинал, плюс свои метаданные. Двойной расход возникает только при одновременном хранении сжатой и несжатой версий.
- «Удалил файлы, а место не освободилось». Возможные причины: файлы попали в корзину, программа держит удалённые файлы открытыми, часть места занята теневыми копиями, точками восстановления или журналом. Проверьте корзину и настройки резервного копирования.
- «Размер в диспетчере задач должен совпадать с размером файла программы». Это разные величины: файл на диске и образ процесса в памяти связаны, но не равны.
Что важно помнить на практике
Главный ориентир: расхождение между размером файла и занятым местом — это не дефект, а следствие устройства хранилища. На решение влияют три фактора: размер кластера (важен для множества мелких файлов), сжатие и разрежённое хранение (меняют соотношение в любую сторону) и система счисления (даёт стабильную разницу около 7% на гигабайте).
Если вы выбираете накопитель, закладывайте запас: реальный доступный объём всегда меньше заявленного, а служебные структуры и особенности файловой системы съедают ещё немного. Если планируете хранить много мелких файлов — заранее оцените потери на кластерах или используйте архивы и контейнеры. Если цифры в конкретной программе кажутся странными — сравните их со свойствами файла и показателями другого файлового менеджера: так вы быстро поймёте, где именно возникает разница.
