Как сжать папку NTFS с помощью инструментов Linux

Как сжать папку NTFS с помощью инструментов Linux

У меня возникла проблема: моя C:\Windows\winsxsпапка Windows 7 становится очень большой (20 ГБ), и я хотел бы сжать ее с помощью встроенного инструмента Проводника (Свойства папки -> Дополнительно -> Сжать), но, знаете ли, Windows на самом деле не позволяет мне этого сделать, потому что эти файлы winsxs защищены специальным пользователем с именемДоверенный установщик. Поэтому я хотел бы сделать это в Linux. Поиск в Интернете дал некоторые подсказки о ntfs-3g, но я не могу найти конкретный пример, делающий сжатие папки NTFS, поэтому я хотел бы спросить здесь.

Предположим, что мой загруженный в Knoppix Linux и Windows раздел C: смонтирован /mnt/winc, тогда какую команду мне следует использовать для достижения цели?

Или есть способ сделать это без среды Linux?

решение1

Это возможно без Linux, и я всегда делаю это после создания новой установки. Я только что сделал это с установкой Windows 10 Enterprise 21H2, которая теперь занимает 4,6 ГБ после сжатия.

Я делаю это так: завершаю установку, а затем перезагружаюсь обратно на установочный носитель (USB-накопитель или DVD). После загрузки вам не нужно продолжать работу с диалоговыми окнами установки, если только вы не пытаетесь сжать диск, которому нужен драйвер, прежде чем он станет доступен установщику. Вы узнаете, если попытаетесь, потому что тогда вы уже вручную указали его во время первоначальной установки. Если это для вас не имеет смысла, просто проигнорируйте эту часть и перейдите к следующему абзацу. Если вам это нужно, просто продолжайте выполнять шаги установки до выбора раздела для установки, куда вы должны загрузить свой драйвер.

В любом случае нажмите , Shift+F10чтобы открыть командную строку. Теперь выясните, какой диск является установочным. Это, вероятно, не будет C:, так как это, скорее всего, установочный диск. Вам придется начать с первого диска и перечислить его содержимое, пока не найдете нужный. То есть, введите C:и введите, затем dirвведите и проверьте вывод. Затем продолжайте с D:, E:и т. д., пока не найдете его. На диске, который вы ищете, будут папки «Пользователи», «Windows» и «Program Files» и так далее, и если у вас на компьютере более одной установки Windows, вы можете посмотреть на сообщенное свободное место на диске, чтобы угадать, какая из них это. В моей последней установке диск Windows был диском F.

После того, как вы определили диск, вы можете использовать compact.exeдля сжатия диска. Вам не придется беспокоиться о случайном сжатии небезопасных файлов, так как compactон позаботится об этом автоматически. Он не сожмет, например, загрузчик или файл подкачки. Теперь, самый быстрый способ сделать это, который также менее экономит место, это это, что эквивалентно использованию Проводника (за исключением того, что в этой командной строке вы сожмете все файлы, которые можно сжать). Убедитесь, что вы перешли на диск, который хотите сжать (F: в моем последнем случае), и введите это:

compact /c /i /s:\

/cпросто означает сжать. /i— игнорировать ошибки. Вы получите ошибки, например, вы не можете сжать Documents and Settingsв Windows 10, потому что это на самом деле не папка, а соединение, которое указывает на Users. Без /i, compactостановился бы после такой ошибки. /s:\означает обрабатывать все в каталоге \(где вы находитесь, т. е. в корне диска) и все подкаталоги в нем.

Как уже упоминалось, этот способ будет работать так же, как в Explorer, за исключением того, что он сожмет гораздо больше файлов, чем Explorer, потому что у вас нет к ним доступа и/или они используются. На моей текущей установке это дало коэффициент сжатия 1,7:1.

Однако, если вы хотите немного экстремальнее с экономией места, есть флаг, /exeкоторый говорит compactиспользовать более эффективное сжатие, которое предназначено для файлов типа write-once-read-often, обычно исполняемых файлов (например, explorer.exe), отсюда и название. Он сожметвсефайлы с выбранным алгоритмом, так что он экономит место на всех файлах, а не только на исполняемых. Самый эффективный алгоритм — это lzx, который при применении к моей установке дал степень сжатия 2,4:1 (на самом деле, я хотел бы сказать 2,7:1, но я не могу точно вспомнить, но это значительно эффективнее, чем по умолчанию). Однако для этого требуется выполнить два запуска — эти:

compact /c /i /f /exe:lzx /s:\

А потом:

compact /c /i /s:\

Хорошо, так почему два запуска, можете спросить вы. Это потому, что когда вы используете флаг, /exeкоторый вы указываете compactиспользовать нестандартный алгоритм сжатия, который NTFS не будет применять по умолчанию - вам нужно запустить эту команду, чтобы сжать с ним. По сути, он отказывается отмечать папки как сжатые, поскольку он не может автоматически сжимать новые файлы с помощью lzx, поэтому, хотя первая compactкоманда сжимает все файлы на диске очень эффективно, она оставляет все папки без флага сжатия, что означает, что любые новые или измененные файлы также не будут сжаты.

Обратите внимание на дополнительное добавление флага /f. Если у вас уже есть сжатые файлы на диске (возможно, вы сжали папку «Документы» или что-то в этом роде), это заставит уже сжатые файлы быть повторно сжатыми с помощью алгоритма lzx.

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

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

Я должен отметить, что, прежде всего, этот тип сжатия поддерживается не во всех реализациях NTFS. Например, в моем Linux Mint 20.2 Live Stick файлы, сжатые таким образом, вообще не будут читаться. Насколько мне известно, поддержка чтения существует для более поздних версий драйвера с открытым исходным кодом ntfs-3g, но она может быть пока недоступна в вашем дистрибутиве. Я также не знаю, ntfs3поддерживает ли ее новый собственный драйвер Linux. Со стороны Microsoft, похоже, это может быть только Windows 10 и выше, поэтому вы не сможете прочитать такой диск из Windows 7 или 8, например. Во-вторых, поскольку Windows не будет автоматически сжимать новые и измененные файлы с помощью этих более эффективных алгоритмов, помните, что любой сжатый файл, который будет изменен в будущем, будет повторно сжат с помощью менее эффективного алгоритма по умолчанию. Однако, если вы используете Windows 10 или Windows 11, все будет работать. Просто стоит это учесть.

Надеюсь это поможет :)

PS: Конечно, это можно сделать в любое время на любой существующей установке. Я упоминаю здесь только новые установки, поскольку у меня вошло в привычку делать это сразу после новой установки.

EDIT: Небольшое обновление после того, как я закончил настройку этой моей новой системы, и теперь снова запустил все это из установщика Windows перед включением BitLocker. Метод здесь, опять же, заключался в том, чтобы /lzx:exeсначала использовать, а затем сделать второй запуск, чтобы также отметить все папки для сжатия. Это работает отлично (сэкономило дополнительные 4 ГБ на системном диске после сжатия (я сначала использовал алгоритм сжатия по умолчанию, так как хотел иметь возможность изменять файловую систему с Linux, так что это дополнительная экономия 4 ГБ по сравнению с алгоритмом сжатия по умолчанию)), но затем я был сбит с толку, так как заметил в проводнике Windows, что многие файлы не выглядят сжатыми. То есть они не были окрашены (я включил «Показывать зашифрованные или сжатые файлы NTFS в цвете» в настройках вида, и многие файлы не были синими). ​​Я повозился с compactадминистративной командной строкой и не смог это изменить. Затем я обнаружил, что это на самом деле просто классическая некомпетентность Microsoft - Windows Explorer сам по себе не понимает эти новые EXEалгоритмы сжатия, поэтому он не будет показывать файлы синим цветом, и если вы проверите их свойства, то у них также не будет галочки в поле сжатия в разделе дополнительных. НО он будет показывать правильные размеры в обычном размере по сравнению с размером на диске, поэтому число "использованного пространства" будет ниже. Jebus! XD

решение2

Шаги следующие:

  1. Отметить каталог для сжатия
  2. Переместите файлы во временное место.
  3. cp -aфайлы обратно в исходное место назначения, чтобы запустить сжатие

(По умолчанию ntfs-3g включаетвариант крепленияcompression.)


# Mark a directory for compression
setfattr -h -v 0x00000800 -n system.ntfs_attrib_be directory-name

# On small-endian computers when above is not possible
setfattr -h -v 0x00080000 -n system.ntfs_attrib directory-name

Обратите внимание на предостережения (изntfs-3gстраница):

Если задана опция монтирования compression, файлы, созданные в каталоге, помеченном для сжатия, создаются сжатыми. Они остаются сжатыми при перемещении (переименовании) в обычный каталог в том же томе, а данные, добавленные к ним после перемещения, сжимаются. И наоборот, файлы, которые присутствовали в каталоге до того, как он был помечен для сжатия, и файлы, перемещенные из каталога, не помеченного для сжатия, не сжимаются. Копирование сжатого файла всегда распаковывает его, просто чтобы сжать его снова, если целевой каталог помечен для сжатия.


Для новых томов ознакомьтесь с -Cопцией в mkfs.ntfs.

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