NTFS+LZX: Новый метод сжатия файлов в Windows 10
Думаю, многие тут знакомы с понятием файловой системы со сжатием. Возможно, вы даже пользовались btrfs или сжатием ntfs.
В Windows 10 была добавлена новая реализация сжатия файловой системы — LZX, и вроде бы очень интересная переспективая открылась, но почему-то никто данную возможность не афишировал, и нигде о ней не написано. Поэтому наткнуться на данное чудо можно лишь случайно, что со мной и произошло.
Сравнение с обычным сжатием NTFS
+ степень сжатия гораздо выше, почти на уровне zip.
— сжатие производится вручную, а также файл при изменении разжимается, и процедуру сжатия приходится выполнять снова.
ВНИМАНИЕ! Файлы, сжатые в Windows 10 алгоритмом LZX, будет невозможно открыть во всех предыдущих версиях Windows!
Целесообразность
LZX, также как и стандартное сжатие NTFS, при мощности современных многоядерных процессоров абсолютно прозрачен для пользователя и при чтении не сказывается на производительности.
Исходя из особенностей данного вида сжатия, он не подходит для динамически записываемых файлов, то есть временные папки сжимать нет смысла. Но в случае со статическими файлами, которые всегда используются только на чтение, например, директория с установленными программами или играми, системные папки, а также просто файловые хранилища.
Шах и мат, разработчиков игры явно не волновало занимаемое место:
Как видите, новое сжатие может дать очень ощутимую экономию места, в зависимости от сжимаемых данных.
Стоит учесть, что точно не имеет смысла сжимать файлы изображений, музыки или видео, и тем более архивы, так как они сами уже внутри находятся под сжатием.
Использование
Сжатие производится при помощи консольной утилиты compact, входящей стандартную в поставку Windows.
Сжатие одного файла:
Сжатие всех файлов в указанной директории и всех поддиректориях:
Примечание: если файлы до этого уже были сжаты другим сжатием NTFS, то нужно добавить флаг /f в команду, иначе они будут проигнорированы.
Также имена файлов, сжатых при помощи данного метода, не будут подсвечиваться в проводнике синим.
- Папка WinSxS уже находится под аналогичным сжатием.
- Сжатие загрузочных файлов из папки boot, в том числе файла bootmgr из корня диска, приведет к невозможности запуска системы.
Сжимать в системной директории рекомендуется только особо «жирные» папки, например System32, SysWOW64, Installer, Assembly, Microsoft.NET, Fonts итд, главное не трогать вышеобозначенные вещи (boot, WinSxS)!
Справку по всем возможным флагам утилиты можете посмотреть через compact /?
Заключение
Объемы носителей информации неуклонно растут и экономия места на них потихоньку уходит в прошлое.
Но данный метод сжатия, в первую очередь, оценят владельцы SSD, место на которых пока ещё ограничено и стоит довольно дорого. Плюс даже некоторый прирост в скорости чтения, так как диску придется считывать меньше данных (но если у вас слабый ЦП, то прирост, скорее всего, нивелируется затратами времени на разжатие данных).
У некоторых это, возможно, даже станет поводом для перехода на Win10.
Автор: устаршой по званию
Рекомендованный контент
После парочки тестов, теперь понятно, почему мелкомягкие не афишировали внедрения LZX – он хоть и лучше сжимает LZNT1 (стандартное сжатие в NTFS), но некорректно отображает объём сжатых данных.
Ну знаете, очень трудно ужать уже сжатый 50 гигабайтный архив FreeArc в 1,8 гига.
Не, сперва меня заинтересовал сжатый файл san_francisco.dat ( Watch_Dogs2\data_win64\worlds\san_francisco ), который чудом сжался с 7.32 Гб до 2.43 Гб, хотя 7zip и FreeArc смогли ужать лишь до
5,9 Гб этот файлик, вот тогда у меня и закралось подозрение…
В общем, тут пару примеров
1) Сколько байт данных
2) Сколько отображается, что занимает на диске
3) Сколько на самом деле занимает (вычисляется путём количества освобождённого места после удаления всего каталога)
======
Assassin’s Creed Origins
52,4 ГБ (56 309 377 783 байт)
32,3 ГБ (34 694 205 440 байт)
В итоге
48.3 ГБ (51 874 299 904)
======
Fortnite
18,0 ГБ (19 352 298 965 байт)
8,36 ГБ (8 982 855 680 байт)
В итоге
8,36 ГБ (8 984 076 288)
======
FarCry5
29,4 ГБ (31 594 339 261 байт)
11,1 ГБ (11 966 234 624 байт)
В итоге
27.1 ГБ (29 146 284 032)
======
Counter-Strike Global Offensive
15,4 ГБ (16 610 449 044 байт)
8,09 ГБ (8 694 157 312 байт)
В итоге
8,09 ГБ (8 695 832 576)
======
Deus Ex Mankind Divided
51,8 ГБ (55 709 326 633 байт)
20,4 ГБ (21 933 654 016 байт)
В итоге
34.42 ГБ (34 820 132 864)
=====
Just Cause 3
51,2 ГБ (55 004 319 222 байт)
40,4 ГБ (43 395 002 368 байт)
В итоге
40,4 ГБ (43 392 256 320)
===========================
Как видно, только у части папок отображается корректно размер занимаемый на диске, так что не сильно радуйтесь “освобождённому” пространству
кто нибудь измерял самый главный показатель – скорость распаковки, оптимизация алгоритма оной.
то есть, насколько данный алгоритм позволяет “ускорить” сравнительно медленный жесткий диск? и “ускоряет” ли вообще? а если нет, то он и даром не нужен..
LZX сжатие файлов на уровне NTFS в Windows 10
Еще одной довольно интересной и перспективной, но почему-то слабо афишированной, возможностью Windows 10, является поддержка алгоритма сжатия данных LZX на уровне файловой системы NTFS. По сравнению с уже знакомым нам NTFS сжатием, степень сжатия LZX в Windows 10 гораздо выше (уровень сжатия практически на уровне zip). Достигается степень сжатия в среднем 40-60%.
Сжатие файлов с помощью алгоритма LZX в Widnows 10 выполняется только вручную с помощью уже знакомой нам утилиты compact (мы рассматривали ее в статье о Compact OS). При обращении к сжатым файлам их распаковка в памяти происходит полностью прозрачно для пользователя.
Недостатки использования LZX сжатия:
- Сжатие выполняется вручную, и при перезаписи/обновлении/изменении сжатого файла, компрессию нужно выполнять заново. Таким образом, этот вид сжатия нецелесообразен для постоянно изменяемых файлов и временных папок.
- На распаковку сжатых файлов в памяти расходуются дополнительные ресурсы CPU и памяти. Это, в общем-то, не критично для современных многоядерных процессоров.
- Сжатые файлы никак не выделяются в проводнике (файлы, сжатые стандартной NTFS компрессией выделяются синим цветом)
Идеальными кандидатами для сжатия по алгоритму LZX являются статические файлы, к которым обращаются только на чтение/запуск. Под эти критерии обычно попадают каталоги с установленными программами, играми, хранилища дистрибутивов, ряд системных каталогов.
К примеру, при сжатии каталога с установленной игрой Far Cry 4 размер каталога уменьшился с 27 до 17 Гб. Для Counter-Strike: GO экономия места на диске оказалась скромнее: 10 против 7,5 Гб.
Операция сжатия производится только из командной строки, запущенной с правами администратора. К примеру, чтобы сжать один файл, воспользуемся командой:
compact /c /a /exe:lzx «C:\Program Files (x86)\mirkes.de\Tiny Hexer\mpth.exe»
Размер, занимаемый на диске данным исполняемым файлов уменьшился с 1,54 Мб до 0,7 Мб.
Сожмем содержимое всех файлов и подкаталогов в определенной директории:
compact /c /s /a /i /exe:lzx «C:\Program Files (x86)\*»
В нашем примере, размер каталога C:\Program Files (x86)\ на диске уменьшился почти в два раза.
Важно! Ни в коем случае не стоит сжимать целиком системный диск или каталог C:\Windows. Система может просто перестать загружаться (кейс со сжатием загрузчика разбирался в статье Ошибка BOOTMGR is compressed).
Как правило, безопасно можно сжать следующие системные папки:
- C:\Windows\Installer
- C:\Windows\assembly
- C:\Windows\Microsoft.NET
- C:\Windows\Fonts
- C:\Windows\Inf
- C:\Windows\infused apps
Чтобы распаковать сжатые файлы, воспользуйтесь командами:
compact /u /a /exe “C:\Program Files (x86)\mirkes.de\Tiny Hexer\mpth.exe»
compact /u /a /s /exe «C:\Program Files (x86)\*»
Несмотря на постоянный рост емкостей носителей, проблемы с исчерпанием свободного места остаются все так же актуальными, особенно часто эта проблема встает перед владельцами SSD дисков, стоимость Гб места на которых пока достаточно высока. Использование LZX сжатия файлов в Windows 10 поможет сэкономить место на диске за счет небольшой потери производительности (практически не заметна на современных системах). Есть еще один нюанс: на медленных дисках за счет использования сжатия можно уменьшить время чтения больших файлов, т.к. распаковка файлов в памяти будет занимать меньше времени, чем чтение большого файла с диска.
Ох, как круто — ужал на десктопе папку с установленными играми с 50 до 30 Гб. Скорость загрузки и работы игрушек особо особо не изменилась
На сколько безопасно сжимать C:\Windows\WinSxS
На сколько мне известно там лежат 100500 версий файлов которые нужны по 1 разу в жизни какой-то программе.
Провел эксперимент на виртулальной машине с Win 10, выполнил сжатие папки WinSxS командой:
compact /c /s /a /i /exe:lzx «C:\Windows\WinSxS\*»
Процесс сжатия занял примерно 1,5 часа.
Результат такой:
64553 files within 17492 directories were compressed.
6,778,731,253 total bytes of data are stored in 3,219,449,754 bytes.
The compression ratio is 2.1 to 1.
Т.е. 6,7 Гб ужались до 3,2.
Перезагрузка проблема не выявила, система загрузилась корректно.
У кого то ужалось сжать WinSxS папку? на своей рабочей системе в планшете боюсь пробовать, восстанавливать потом долго.
Admin: Можно — смотри мануал https://winitpro.ru/index.php/2013/08/07/kak-umenshit-razmer-papki-winsxs-v-windows-8/
После парочки тестов, теперь понятно, почему мелкомягкие не афишировали внедрения LZX — он хоть и лучше сжимает LZNT1 (стандартное сжатие в NTFS), но некорректно отображает объём сжатых данных.
Ну знаете, очень трудно ужать уже сжатый 50 гигабайтный архив FreeArc в 1,8 гига.
Не, сперва меня заинтересовал сжатый файл san_francisco.dat ( Watch_Dogs2\data_win64\worlds\san_francisco ), который чудом сжался с 7.32 Гб до 2.43 Гб, хотя 7zip и FreeArc смогли ужать лишь до
5,9 Гб этот файлик, вот тогда у меня и закралось подозрение…
В общем, тут пару примеров
1) Сколько байт данных
2) Сколько отображается, что занимает на диске
3) Сколько на самом деле занимает (вычисляется путём количества освобождённого места после удаления всего каталога)
======
Assassin’s Creed Origins
52,4 ГБ (56 309 377 783 байт)
32,3 ГБ (34 694 205 440 байт)
В итоге
48.3 ГБ (51 874 299 904)
======
Fortnite
18,0 ГБ (19 352 298 965 байт)
8,36 ГБ (8 982 855 680 байт)
В итоге
8,36 ГБ (8 984 076 288)
======
FarCry5
29,4 ГБ (31 594 339 261 байт)
11,1 ГБ (11 966 234 624 байт)
В итоге
27.1 ГБ (29 146 284 032)
======
Counter-Strike Global Offensive
15,4 ГБ (16 610 449 044 байт)
8,09 ГБ (8 694 157 312 байт)
В итоге
8,09 ГБ (8 695 832 576)
======
Deus Ex Mankind Divided
51,8 ГБ (55 709 326 633 байт)
20,4 ГБ (21 933 654 016 байт)
В итоге
34.42 ГБ (34 820 132 864)
=====
Just Cause 3
51,2 ГБ (55 004 319 222 байт)
40,4 ГБ (43 395 002 368 байт)
В итоге
40,4 ГБ (43 392 256 320)
===========================
Как видно, только у части папок отображается корректно размер занимаемый на диске, так что не сильно радуйтесь «освобождённому» пространству
Информативное исследование, спасибо за инфомрацию!
Вы сжимали каталоги с помощью опции /exe:lzx ?
Я находил графический интерфейс для утилиты: _https://github.com/ImminentFate/CompactGUI
Посмотрите, какой размер каталога возвращает она после сжатия.
Как тут в статье и описано:
compact /c /s /a /i /exe:lzx «диск:\путь\*»
ну и по отдельным файлам. так же размер файла неправильно выставляло.
На счёт утилиты… я не знаю как скачать её [IMG]https://img.noobzone.ru/getimg.php?url=http%3A%2F%2Fi.imgur.com%2FIRsw0va.png[/IMG]
Впрочем есть команда compact /Q и она так же врёт
Простите, и правда CompactGUI показывает реальный размер сжатых файлов (ну или как менее более достоверный), файл ранее описанный мной — san_francisco.dat, сжался из 7,3 Гб до 6,4 Гб, хотя свойства файла по прежнему доказывают, что он весит уже 2.43 Гб
В статье так же не описаны эти виды сжатия:
/exe:XPRESS4K
/exe:XPRESS8K
/exe:XPRESS16K
======
Небольшие тесты с полюбившимся san_francisco.dat ( Watch_Dogs2\data_win64\worlds\san_francisco )
1) Параметры сжатия (секунды — это погода на Марсе, хотя должно быть время, за которое файл полностью прочитан)
2) Количество байт в файле
3) Сколько отображается, что занимает на на жёстком
4) Реально сколько занимал файл на диске
Без сжатия 75 секунд (скорей всего в конец HDD забился файл, создавать отдельный раздел не хочется, а SSD неадекватно реагирует на сжатие)
7,32 ГБ (7 869 133 464 байт)
7,32 ГБ (7 869 136 896 байт)
Стандартный — LZNT1 41 секунд
7,32 ГБ (7 869 133 464 байт)
7,27 ГБ (7 811 620 864 байт)
7 811 629 056 (8 килобайт — погрешность)
LZX 48 секунд
7,32 ГБ (7 869 133 464 байт)
2,43 ГБ (2 619 682 816 байт)
6,44 ГБ (6 914 650 112 байт)
XPRESS4K 43 секунды
7,32 ГБ (7 869 133 464 байт)
2,90 ГБ (3 117 969 408 байт)
6,90 ГБ (7 412 936 704 байт)
XPRESS8K 46 секунд
7,32 ГБ (7 869 133 464 байт)
2,73 ГБ (2 934 865 920 байт)
6,73 ГБ (7 229 833 216 байт)
XPRESS16K 44 секунды
7,32 ГБ (7 869 133 464 байт)
2,64 ГБ (2 838 827 008 байт)
6,64 ГБ (7 133 794 304 байт)
======
XPRESSxxxK — это другие типы сжатия. Судя по документации LZX дает больший коэффициент компрессии. В общем-то ваши тесты это и подтвердили.
Другой вопрос, что размер на диске указывается неверно….
Кстати да, есть такой косяк. Я обсуждал данную тему как раз с Булатом (разработчик FreeArc). Мы выяснили, что файлы очень большого размера после сжатия отображают некорректный размер. Но место на диске при этом вычитается корректно, и сам файл работает тоже нормально. То есть баг чисто визуальный.
Вообще всю эту тему с LZX поднял именно я, автор оригинальной статьи из песочницы хабра. Правда там она повисев с пол года так и сдохла (не любят таки на хабре винду). Тут же представлена перепечатка её ранней версии.
Баг можно было бы зарепортить в майкрософт, но почему-то тема LZX в интернете (даже в англоязычном сегменте) нигде не освящается, и в целом всем пофиг.
Спасибо за инфу.
Баг с LZX и правда довольно мелкий, MSFT годами не фиксит гораздо более критичные проблемы 🙂
Стоит ли пожать Program Files (x86), Program Files и ProgramData?
И заодно AppData внутри каталога пользователя?
Да, исполняемые файлы крайне хорошо жмутся.
Еще многие игры сжимаются сильно. Особенно грешат игры на юнити, где при использовании несжатых ассетов разница от сжатия может быть и в 10 раз.
Не стоит сжимать разве что очень крупные игры, которые используют многогигабайтные архивы, они скорее всего уже сжаты + с крупными файлами есть баг описанный выше.
А позволит ли ОС пожать при помощи compact файлы hibelfil.sys + pagefie.sys ?
Нет, эти файлы нельзя сжать, да и нет смысла. Первый можно вообще отключить, если не пользуешься гибернацией (команда powercfg -h off , пускать с правами админа). А файл подкачки настраивается известно где.
Оба нужны и используются, и hibelfil.sys и pagefie.sys. Но почему их нельзя пожать…?
Потому что
1) Они заняты системой, нельзя пожать заблокированные каким-то процессом файлы (так же как и просто изменить или удалить).
2) Даже если загрузиться из-под другой системы и пожать их когда они неактивны, то при входе они все равно разожмутся обратно, так как при изменении файлы автоматически обратно разжимаются.
И заодно — можно ли сжимать с:\windows\system32 ?
Можно спокойно сжимать любые папки кроме WinSxS.
Да, WinSxS у меня пожат, полет нормальный, система стабильна, обновления встают.