Como compactar uma pasta NTFS usando ferramentas Linux

Como compactar uma pasta NTFS usando ferramentas Linux

Estou enfrentando um problema, minha C:\Windows\winsxspasta do Windows 7 está crescendo muito (20 GB) e gostaria de compactá-la usando a ferramenta integrada do Explorer (propriedade da pasta -> Avançado -> compactar), mas você sabe, o Windows na verdade não me permita fazer isso porque esses arquivos winxs são protegidos por um usuário especial chamadoInstalador confiável. Então, eu gostaria de fazer isso no Linux. Pesquisas na Internet mostram algumas dicas sobre o ntfs-3g, mas não consigo encontrar um exemplo concreto de compactação de pasta NTFS, então gostaria de perguntar aqui.

Suponha que minha partição C: inicializada no Knoppix Linux e Windows tenha sido montada /mnt/winc, então qual comando devo usar para atingir o objetivo.

Ou existe uma maneira de fazer isso sem um ambiente Linux?

Responder1

Isso é possível sem Linux e sempre faço isso depois de criar uma nova instalação. Acabei de fazer isso com uma instalação do Windows 10 Enterprise 21H2 que agora tem 4,6 GB após a compactação.

A maneira como faço isso é concluir a instalação e reinicializar na mídia de instalação (pendrive ou DVD). Depois de carregado, você não precisa prosseguir com as caixas de diálogo de instalação reais, a menos que esteja tentando compactar uma unidade que precisa de um driver antes de estar disponível para o instalador. Você saberá se o fizer, porque já o terá fornecido manualmente durante a instalação inicial. Se isso não faz sentido para você, ignore esta parte e pule para o próximo parágrafo. Se precisar fazer isso, basta prosseguir com os passos de instalação até selecionar a partição onde instalar, onde deverá carregar o driver.

Em qualquer cenário, pressione Shift+F10para abrir um prompt de comando. Agora descubra qual unidade é a unidade de instalação. Provavelmente não será C:, pois provavelmente é a unidade do instalador. Você terá que começar na primeira unidade e listar seu conteúdo até encontrar a unidade certa. Ou seja, digite C:e entre, depois direntre e examine a saída. Em seguida, prossiga com D:, E:, etc. até encontrá-lo. A unidade que você está procurando terá as pastas "Usuários" e "Windows" e "Arquivos de Programas" e assim por diante, e se você tiver mais de uma instalação do Windows no computador, poderá consultar o espaço livre relatado no dirija para adivinhar qual é. Na minha instalação mais recente, a unidade do Windows era a unidade F.

Depois de determinar a unidade, você pode usar compact.exepara compactar a unidade. Você não terá que se preocupar em compactar acidentalmente arquivos inseguros, pois compactisso será feito automaticamente. Não compactará o carregador de boot, por exemplo, ou o arquivo de paginação. Agora, a maneira mais rápida de fazer isso, que também economiza menos espaço, é esta, que equivale a usar o Explorer (exceto que neste prompt de comando você compactará todos os arquivos que podem ser compactados). Certifique-se de navegar até a unidade que deseja compactar (F: no meu último caso) e digite isto:

compact /c /i /s:\

/csignifica apenas comprimir. /ié ignorar os erros. Você receberá erros, por exemplo, você não pode compactar Documents and Settingsno Windows 10 porque na verdade não é uma pasta, mas uma junção que aponta para Users. Sem /i, compactpararia após tal erro. /s:\significa processar tudo no diretório \(onde você está, ou seja, a raiz da unidade) e todos os subdiretórios nele.

Conforme mencionado, esta forma de fazer isso funcionará da mesma forma que no Explorer, exceto que irá compactar muito mais arquivos que o Explorer não fará porque você não tem acesso a eles e/ou eles estão em uso. Na minha instalação atual, resultou em uma taxa de compressão de 1,7:1.

Se, no entanto, você quiser ir um pouco mais ao extremo com a economia de espaço, há um sinalizador, /exeque diz compactpara usar uma compactação mais eficiente, destinada a arquivos do tipo gravação uma vez, leitura frequente, geralmente executáveis ​​(por exemplo, explorer.exe), daí o nome. Ele irá comprimirtodosarquivos com o algoritmo escolhido, economizando espaço em todos os arquivos, não apenas nos executáveis. O algoritmo mais eficiente é lzxo , que quando aplicado à minha instalação produziu uma taxa de compressão de 2,4:1 (na verdade, quero dizer 2,7:1, mas não consigo me lembrar, mas é significativamente mais eficiente que o padrão). No entanto, é necessário fazer duas execuções - estas:

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

E então:

compact /c /i /s:\

Ok, então por que duas corridas, você pode perguntar. Isso ocorre porque quando você usa o /exesinalizador, você está dizendo compactpara usar um algoritmo de compactação não padrão que o NTFS não aplicará por padrão - você deve executar este comando para compactar com isso. Por extensão, ele se recusa a marcar pastas como compactadas, pois não pode compactar automaticamente novos arquivos com lzx, portanto, embora o primeiro compactcomando comprima todos os arquivos na unidade com muita eficiência, ele deixa todas as pastas sem um sinalizador de compactação, o que significa quaisquer arquivos novos ou alterados. também não será compactado.

Observe a adição extra da /fbandeira. Caso você já tenha alguns arquivos compactados na unidade (talvez você tenha compactado a pasta Documentos ou algo parecido), isso forçará a recompactação dos arquivos já compactados com o lzxalgoritmo.

O segundo comando é basicamente o mesmo comando do primeiro acima, mas como não usamos /fpara forçar a compactação de nada que já esteja compactado, o efeito aqui é que ele pulará todos os arquivos com os quais acabamos de compactar lzx, mas marque todas as pastas como compactadas, para que, no futuro, os arquivos novos e modificados também sejam compactados automaticamente.

Resumindo, o primeiro comando compacta todos os arquivos com muita eficiência, e o segundo marca todas as pastas como compactadas, para que os arquivos futuros também sejam compactados.

Devo observar que, em primeiro lugar, esse tipo de compactação não é compatível com todas as implementações de NTFS. Por exemplo, no meu Linux Mint 20.2 Live stick, arquivos compactados como este não serão lidos. AFAICT, existe suporte de leitura para versões mais recentes do ntfs-3gdriver de código aberto, mas pode ainda não estar acessível em sua distribuição. Também não sei se o novo ntfs3driver nativo do Linux suporta isso. Do lado da Microsoft, parece que também pode ser apenas o Windows 10 e superior, então talvez você não consiga ler essa unidade no Windows 7 ou 8, por exemplo. Em segundo lugar, como o Windows não compacta automaticamente arquivos novos e modificados com esses algoritmos mais eficientes, lembre-se de que qualquer arquivo compactado modificado no futuro será recompactado com o algoritmo padrão menos eficiente. Se você estiver usando o Windows 10 ou o Windows 11, tudo funcionará. Vale a pena considerar.

Espero que isto ajude :)

PS: É claro que isso pode ser feito a qualquer momento em qualquer instalação existente, só estou mencionando novas instalações aqui porque se tornou um hábito meu fazer isso imediatamente após uma nova instalação.

EDIT: Uma pequena atualização depois que terminei de configurar este meu novo sistema e agora executei novamente tudo isso no instalador do Windows antes de ativar o BitLocker. O método aqui, novamente, foi usar /lzx:exeprimeiro e depois fazer uma segunda execução para marcar todas as pastas para compactação também. Isso funciona muito bem (economizei 4 GB extras na unidade do sistema após a compactação (eu usei o algoritmo de compactação padrão primeiro porque queria poder modificar o sistema de arquivos com Linux, então isso representa uma economia extra de 4 GB em comparação com o algoritmo de compactação padrão )), mas fiquei confuso porque percebi no Windows Explorer que muitos arquivos não pareciam compactados. Ou seja, eles não eram coloridos (habilitei "Mostrar arquivos NTFS criptografados ou compactados em cores" nas configurações de visualização e muitos arquivos não eram azuis). Eu mexi compactem um prompt de comando administrativo e não consegui alterar isso. Descobri então que na verdade é apenas uma incompetência clássica da Microsoft - o Windows Explorer não entende esses novos EXEalgoritmos de compactação, por isso não mostrará os arquivos em azul e, se você verificar suas propriedades, também não terá uma marca de seleção no caixa de compressão em avançado. MAS, ele mostrará os tamanhos corretos em tamanho normal versus tamanho no disco, portanto o número de "espaço usado" será menor. Jebus! XD

Responder2

As etapas são:

  1. Marque o diretório para compactação
  2. Mova os arquivos para um local temporário
  3. cp -aos arquivos de volta ao seu destino original para acionar a compactação

(Por padrão, o NTFS-3G permiteopção de montagemcompression.)


# 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

Observe as advertências (doNTFS-3Gpágina):

Quando a opção de montagem compressioné definida, os arquivos criados em um diretório marcado para compactação são criados compactados. Eles permanecem compactados quando são movidos (renomeando) para um diretório normal no mesmo volume, e os dados anexados a eles após terem sido movidos são compactados. Por outro lado, os arquivos que estavam presentes em um diretório antes de ele ser marcado para compactação e os arquivos movidos de um diretório não marcado para compactação não são compactados. Copiar um arquivo compactado sempre o descompacta, apenas para compactá-lo novamente se o diretório de destino estiver marcado para compactação.


Para novos volumes, confira a -Copção em mkfs.ntfs.

informação relacionada