Se você está falando sobre sistemas Linux, outra opção para você é squashfs . Muitas vezes, ele pode alcançar taxas de compactação muito altas - e o processo de compactação em si é multiencadeado - o que significa que você pode aplicar todos os núcleos do processador à tarefa de compactação.
Um arquivo squashfs difere da maioria dos outros tipos, pois é um sistema de arquivos. Se você já iniciou um disco live Linux, provavelmente já viu isso em ação - quase todos esses trabalhos são montar um arquivo squashfs como sistema de arquivos raiz. O squashfs é suportado em kernels Linux baunilha desde a versão 2.6.34. E assim é bastante universal para qualquer sistema linux moderno.
O Squash suporta qualquer um dos métodos de compressão gzip, lzma, lzo, xz ou (desde o kernel 3.19) lz4. Para montar e acessar o conteúdo de um arquivo de squash, você não precisa de ferramentas e pode fazer:
mount ./img.sfs /mnt; cd /mnt
... para chegar a isso. O conteúdo do arquivo será fornecido pelo vfs do kernel. uma montagem somente leitura, e você pode ler todos os arquivos da mesma forma que faria com qualquer outro tipo de arquivo - e sem precisar descompactar o arquivo (que é manipulado em tempo real no cache de disco em um arquivo base necessária pelo próprio kernel do linux) . De fato, com o suporte a lz4 dos kernels mais recentes, você pode fazer isso em velocidade nativa (e talvez até mais rápido em alguns casos) também - embora haja um aumento cpu-usage para acesso ao arquivo esmagado.
Para criar ou descompactar um arquivo do squashfs você precisará do pacote squashfs-tools instalado. Não é geralmente instalado por padrão por qualquer distribuição que eu saiba, mas também não estou ciente de qualquer distribuição que não forneça o pacote através do gerenciador de pacotes. Uma vez instalado, você pode criar um arquivo como:
echo 'this is my new file' >~/Downloads/newfile.txt
mksquashfs ~/Downloads ./mysqsh.sfs -comp xz
Parallel mksquashfs: Using 6 processors
Creating 4.0 filesystem on ./mysqsh.sfs, block size 131072.
[===================================================-] 1018/1018 100%
Exportable Squashfs 4.0 filesystem, xz compressed, data block size 131072
compressed data, compressed metadata, compressed fragments, compressed xattrs
duplicates are removed
Filesystem size 12592.01 Kbytes (12.30 Mbytes)
57.19% of uncompressed filesystem size (22019.04 Kbytes)
Inode table size 8482 bytes (8.28 Kbytes)
23.91% of uncompressed inode table size (35477 bytes)
Directory table size 10210 bytes (9.97 Kbytes)
42.90% of uncompressed directory table size (23802 bytes)
Xattr table size 3976 bytes (3.88 Kbytes)
48.67% of uncompressed xattr table size (8170 bytes)
Number of duplicate files found 61
Number of inodes 1064
Number of files 926
Number of fragments 68
Number of symbolic links 6
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 132
Number of ids (unique uids + gids) 1
Number of uids 1
mikeserv (1000)
Number of gids 1
mikeserv (1000)
mksquashfs ... 7.08s user 0.35s system 462% cpu 1.607 total
Como você pode ver - respeita claramente as permissões de arquivo - e até mesmo preserva e respeita os atributos de arquivo do sistema de arquivo estendido (xattrs) na maioria dos casos. E a taxa de compactação que você vê notou que existe além da compactação lzo padrão do meu sistema de arquivos regular - (minha raiz fs é btrfs e todos os arquivos já estão compactados w / lzo) - o que é para não mencionar que muito de ~/Downloads
é ocupado por arquivos compactados baixados em primeiro lugar.
É imediatamente montável como um sistema de arquivos adequado:
sudo mount ./mysqsh.sfs /mnt; \
cd /mnt; cat newfile.txt; cd -; \
sudo umount /mnt
this is my new file
Como sempre, as permissões de root geralmente são necessárias para montagens arbitrárias, mas uma montagem squashfs pode ser nomeada como qualquer outra em /etc/fstab
se você desejar.
Por último, você não precisa de nenhum privilégio elevado para descomprimir um arquivo squashfs, apenas a unsquashfs
tool (que também é fornecida no pacote squashfs-tools) :
unsquashfs -d /tmp/mysqsh ./mysqsh.sfs; \
cd /tmp/mysqsh; cat newfile.txt
Parallel unsquashfs: Using 6 processors
933 inodes (1025 blocks) to write
[=================================================|] 1025/1025 100%
created 927 files
created 132 directories
created 6 symlinks
created 0 devices
created 0 fifos
this is my new file