Почему сжатие NTFS занимает много места?

Почему сжатие NTFS занимает много места?

Чтобы сэкономить место на диске, я решил, что будет неплохой идеей сжать установленный у меня клиент VMware vSphere, поскольку я им почти не пользуюсь.

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

Я повторил цикл сжатия/распаковки три раза, чтобы убедиться, что другая программа случайно не заняла место на диске. Может быть примечательно, что папка содержит большое количество маленьких файлов (≈ 30k).

Почему это так и могу ли я как-то найти другие папки, которые мне нужны?распаковыватьдля экономии места на диске?


Без сжатия:

размер папки без сжатия свободное пространство без сжатия

С компрессией:

размер папки со сжатием свободное пространство со сжатием

решение1

Немного дополнительных сведений относительно предоставленных вами скриншотов размера папки:

Несжатый

Как и ожидалось, при наличии большого количества мелких файлов возникает много накладных расходов. Ваш жесткий диск разбит на разделы с определенным размером блока - 4 КБ по умолчанию для NTFS.

Каждый файл должен выделять кратное 4 КБ, то есть, независимо от того, есть ли у вас файл размером 1 КБ или 3,5 КБ, оба займут 4 КБ пространства. Если у вас файл размером 13 КБ, он будет использовать 16 КБ на вашем диске. Разница между "Размером" и "Размером на диске" заключается в накладных расходах, вызванных неиспользуемым пространством в блоках, так называемыхсоветы по кластеру.

Сжатый

После сжатия "Размер" остался прежним, так как объем чистых данных вообще не изменился. Однако сжатие позволило уменьшить общий размер примерно на 130 МБ. На самом деле даже больше, поскольку здесь также применяются накладные расходы.Таким образом, сжатие фактически сэкономило некоторое место в этой папке, и это также отображается в размере папки.

Теперь о поведении, которое вы видите с уменьшенным свободным местом на диске C: Это может иметь несколько причин. Нужно понимать, что свободное место на диске всегда будет меньше, чем

<Disk size> - <total size of all files>

Это связано с тем, что существует множество метаданных, которые также занимают место (снимки VSS, точки восстановления системы, MFT и т. д.).

Во время сжатия отдельных файлов NTFS временно сохранит исходный файл до завершения сжатия. Это делается для того, чтобы у вас осталась действительная версия файла в случае сбоя компьютера. Однако это должно быть только временно. Тем не менее, все указывает на то, что причиной этого являются метаданные NTFS.

Для более точной проверки результатов вы можете сделать следующее:

  • Начните с несжатой папки.
  • Отключить защиту системы для каждого тома (Свойства компьютера/Защита системы)
  • Удалить точки восстановления для каждого тома в том же диалоговом окне.
  • Используйте «Очистку диска» в свойствах тома C: для удаления временных файлов.
  • Обратите внимание на свободное место на диске.
  • Сжать папку
  • Перезагрузите компьютер
  • Повторите очистку диска.
  • Проверьте свободное место на вашем диске

Теоретически вы должны увидеть увеличение свободного пространства.

решение2

Недавно исследовав похожую проблему, я также могу сказать, что сжатый файл занимает не менее 4 килобайт пространства на файл и временное пространство размером 64 килобайта, что соответствует размеру одного «единицы сжатия» для NTFS с размером кластера 4 КБ.Статья на blogs.msdn.comтакже упоминается, что при сжатии файла дисковое пространство выделяется для хранения одного полного CU и освобождается в неопределенное время. Это должно быть причиной того, почему вы испытываете потерю 5 ГБ, хотя и временную (перезагрузка определенно должна исправить эту потерю, некоторые другие средства должны сделать это тоже, но не дефрагментация - пробовали и не смогли). По-видимому, то, что выделено, кажется намного больше (64kb*(31048+582) = 2072903680 или 1,93 ГБ), но это объяснимо, поскольку NTFS имеет транзакции, которые требуют времени и процессорных единиц для фиксации в необработанных данных, и когда этот процесс будет завершен, вы получите все 5 ГБ плюс 150 МБ пространства, освобожденного из-за сжатия.

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

решение3

У меня были те же явления:

Миграция сервера, я скопировал папки данных диска старого Windows Server 2012R2 (с 2 сжатыми папками) на новый диск Windows Server 2016 Datacenter того же размера, где я создал структуру папок и установил флаги сжатия для этих двух папок ранее в процессе копирования. Во время копирования у меня закончилось дисковое пространство, и где бы я ни посмотрел, используется только 3 ГБ из 20 ГБ, но сам диск сообщает мне, что используется 19.x ГБ. Коллега сказал мне снять флаг сжатия, и чудесным образом потерянные 17 ГБ снова появились.

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

Полагаю, в Windows Server 2016 может быть проблема (возможно, с тех пор), из-за которой внутренне созданные временные файлы не очищаются должным образом при копировании файлов в сжатую папку (в отличие от случая, когда флаг сжатия применяется к уже существующим файлам).

решение4

Дополнение: В дополнение к объяснениям выше, папка приложения может содержать файлы, которые просто плохо сжимаются - медиаформаты с уже сильно сжатыми данными (изображения jpeg, видеофайлы, аудио mp3...), уже сжатые файлы (многие форматы данных в наши дни создаются в виде архивов ZIP!), файлы с фактически случайными данными или чем-то напоминающим случайные данные, зашифрованные файлы - это может привести к тому, что для учета того, что было сжато, будет использоваться больше данных, чем было сохранено при сжатии...

Связанный контент