Eu tenho alguns squashfs
arquivos que estão atualmente compactados com o algoritmo padrão que é zlib/gzip
. Eu gostaria de recompactá-los para zstd
.
Qual seria o comando para fazer isso sem extraí-lo para o disco e recriá-lo a partir dessa extração?
Isso é suportado no Squashfs-tools 4.6 e posterior (lançado no ano passado).
A conversão de um sistema de arquivos Squashfs de um tipo de compactação para outro é mencionada na documentação aqui ( https://github.com/plougher/squashfs-tools/blob/master/README-4.6.1#L289 ).
Como escrevi a documentação acima (e o Squashfs), não há problema em copiá-la aqui.
Às vezes você tem um sistema de arquivos Squashfs existente que deseja regenerar usando um conjunto diferente de opções de compactação, como algoritmo de compactação, tamanho de bloco, empacotamento final etc. propriedade etc
Obviamente você conseguiu montar o sistema de arquivos Squashfs e regenerar o sistema de arquivos executando
mksquashfs
no diretório montado. Mas isso requer acesso root (que às vezes não está disponível). A única outra alternativa até agora foi extrair o sistema de arquivos Squashfs para um diretório intermediário descompactado e, em seguida, regenerar o sistema de arquivos executandomksquashfs
-o. Isto, entretanto, é lento e requer armazenamento para armazenar o sistema de arquivos descompactado.unsquashfs
agora pode gerar um pseudo arquivo representando o sistema de arquivos de entrada para stdout emksquashfs
agora pode ler um pseudo arquivo de stdin. Isso permite que a saída deunsquashfs
seja canalizada paramksquashfs
.Seguem alguns exemplos.
Se você tinha um sistema de arquivos GZIP e queria convertê-lo para ZSTD, você pode fazer:
Se você quiser mudar para compactação XZ, aumentar para um tamanho de bloco de 1 Mbyte e usar
-tailend
compactação, você pode fazer:Se você quiser apenas o diretório,
foobar
você pode dizer ao Unsquashfs para extrair apenas isso:Se você armazenou
.o
arquivos binários inadvertidamente, poderá removê-los usando a novaunsquashfs
funcionalidade de exclusão de arquivos "não ancorados":Se você deseja atualizar todos os carimbos de data/hora do arquivo
now
e fazer com que todos os arquivos sejam propriedade dephillip
:As ferramentas Squashfs têm capacidade muito limitada de manipular squashfs já criados. No momento em que este livro foi escrito, a única alteração disponível em uma imagem existente era anexá-la adicionando novos arquivos na raiz (e mesclando ou renomeando a raiz antiga).
No entanto, o squashfs deve ser montado. Não há razão para extraí-lo, apenas montá-lo. (Se você quiser modificá-lo, poderá usar algo como overlayfs para fazer alterações.)
Depois de montado, você pode usar mksquashfs para reconstruir o squash a partir do squash montado usando as opções desejadas, incluindo algoritmos de compactação alternativos. Se tudo o que você deseja fazer é alterar a compactação, mesmo que as ferramentas a suportem, não haveria maneira melhor de lidar com isso.