NTFS сжатые папки: возможно ли настроить степень сжатия?


19

Как представляется, Windows сжимает сжатые папки NTFS с наименьшей возможной степенью сжатия. Хотя это может быть полезно для увеличения скорости и уменьшения нагрузки на процессор, для файлов, к которым редко обращаются (папки резервного копирования), было бы более разумно иметь возможность увеличить степень сжатия. Существуют ли параметры, которые можно настроить для достижения этой цели?



2
Они говорят о «формате сжатия»: «Любое другое значение указывает, что файл сжат, используя формат сжатия, заданный значением состояния сжатия». Я не нашел, что означает этот «формат» и как он установлен.
Аль Бергер

Ответы:


14

Короткий ответ

Нет, в настоящее время это невозможно.

Длинный ответ

Файлы и папки 1 сжимаются и распаковываются путем передачи FSCTL_SET_COMPRESSIONуправляющего кода и состояния сжатия в функцию DeviceIoControl API . Состояние сжатия может быть одним из следующих:

COMPRESSION_FORMAT_NONE = 0
COMPRESSION_FORMAT_DEFAULT = 1
COMPRESSION_FORMAT_LZNT1 = 2

Любое ненулевое значение означает, что целевой элемент будет сжат. Из официальной документации:

Алгоритм сжатия LZNT1 является единственным реализованным алгоритмом сжатия. В результате алгоритм сжатия LZNT1 используется в качестве DEFAULTметода сжатия.

Источник: управляющий код FSCTL_SET_COMPRESSION

Алгоритм LZNT1 разработан для скорости, и нет никакого способа установить пользовательский уровень сжатия.

1 Папки на самом деле не сжаты: их атрибут сжатия дает только состояние сжатия по умолчанию для новых файлов и подпапок.

Дополнительная информация

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

В файловой системе NTFS сжатие выполняется прозрачно. Это означает, что его можно использовать без внесения изменений в существующие приложения.

Если вы сжимаете файл размером более 30 гигабайт, сжатие может быть неудачным.

Источник: Сжатие и распаковка файлов

Алгоритмы сжатия в NTFS предназначены для поддержки кластеров размером до 4 КБ. Если размер кластера превышает 4 КБ на томе NTFS, ни одна из функций сжатия NTFS недоступна.

Источник: сжатие файлов и папок

дальнейшее чтение


12

Как правило, это невозможно, как указано в ответе and31415 .

Однако Microsoft добавила некоторые новые опции и алгоритмы сжатия NTFS в Windows 10, так что теперь есть способ изменить степень сжатия:

COMPACT [/C | /U] [/S[:dir]] [/A] [/I] [/F] [/Q] [/EXE[:algorithm]]
        [/CompactOs[:option] [/WinDir:dir]] [filename [...]]
...
  /EXE       Use compression optimized for executable files which are read
             frequently and not modified.  Supported algorithms are:
             XPRESS4K  (fastest) (default)
             XPRESS8K
             XPRESS16K
             LZX       (most compact)

Новые алгоритмы предназначены для новой функции Compact OS (как вы можете видеть в /CompactOsопции выше). Идея состоит в том, чтобы сжимать системные файлы, предназначенные только для чтения, резервные копии и реже используемые файлы с самым высоким соотношением Раздел восстановления удаляется, и сжатый файл затем будет использоваться как для выполнения (если это уже последняя версия), так и для целей восстановления.

Алгоритм LZX довольно эффективен при архивировании. И несмотря на то, что имя и описание опции все о «исполняемых файлах», опция может быть применена к любым файлам

E:\test>compact /a

 Listing E:\test\
 New files added to this directory will not be compressed.

  1050909 :   1050909 = 1.0 to 1   sometext.txt

...

E:\test>compact /c /exe:lzx sometext.txt

 Compressing files in E:\test\

sometext.txt          1050909 :    176128 = 6.0 to 1 [OK]

1 files within 1 directories were compressed.
1,050,909 total bytes of data are stored in 176,128 bytes.
The compression ratio is 6.0 to 1.

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

E:\test>echo x >> sometext.txt

E:\test>compact /a

 Listing E:\test\
 New files added to this directory will not be compressed.

  1050913 :   1050913 = 1.0 to 1   sometext.txt

Важным примечанием является то, что вы не можете установить папку, чтобы пометить новые файлы для автоматического сжатия с использованием этих новых алгоритмов , потому что, как указано в справочной части compact(выделено мое)

  /C         Compresses the specified files.  Directories will be marked
             so that files added afterward will be compressed ***unless /EXE
             is specified***.
  /U         Uncompresses the specified files.  Directories will be marked
             so that files added afterward will not be compressed.  If
             /EXE is specified, only files compressed as executables will
             be uncompressed; if this is omitted, only NTFS compressed
             files will be uncompressed.

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

К сожалению, это новое в Windows 10, поэтому его нельзя использовать в старых версиях. Однако NTFS-3g поддерживает его , поэтому у вас не будет проблем с доступом к нему из Linux. Если вы не используете Windows 10, вы можете запустить Linux Live USB или Windows 10 PE, чтобы открыть эти файлы.


2

Вы можете увеличить степень сжатия сторонними приложениями. Ярким примером является zipmagic.co Я без проблем использовал его на своем ноутбуке в течение года. Но обратите внимание, что для сжатия NTFS или Zipmagic требуется жесткий диск SSD, поскольку сжатие сделает ваш диск полностью фрагментированным и сделает его бесполезным! Если у вас SSD-накопитель, так что наслаждайтесь!


0

Для этой цели я бы посоветовал использовать такой архиватор, как 7-zip или Winrar. С Winrar можно даже получить доступ к файлу, который находится внутри архиватора. Обратите внимание, что сначала он извлечет весь архив, прежде чем сможет получить доступ к файлу, и обновит архив с изменениями при закрытии и сохранении в файл. Это может замедлить весь процесс, но, учитывая, что это резервная копия, все должно быть в порядке.

Обратите внимание, что это не полное решение для резервного копирования. Это единственный способ сэкономить место.

Кроме того, существует программа, которая может монтировать 7z и rar архивы как виртуальный диск: http://www.winarchiver.com/virtual-drive.htm


6
В моем случае сжатый диск NTFS используется в качестве кроссплатформенного хранилища резервных копий и содержит файлы tar. Архиваторы Linux не могут обновлять архивы, когда они находятся в сжатом формате, таком как 7z или xz. NTFS выполняет сжатие на лету незаметно для Linux Tar архиватора.
Аль Бергер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.