É possível integrar arquivos zip e tar.gz como diretório no sistema de arquivos


14

Gostaria de saber se existe uma maneira de integrar (é um pouco diferente da montagem, eu acho) arquivos compactados como diretórios no sistema de arquivos?

Por exemplo, é possível fazer o download de um compressed-file.tar.gzno disco rígido local cd compressed-file.tar.gze executar e executar um script a partir da pasta compactada ou cp some-file ..para extrair um dos arquivos.

Eu sei que o Btrfs suporta compactação, mas não quero alterar o sistema de arquivos que eu tenho (ext3) para suportar esse recurso.

Respostas:


20

Você pode usar o comando archivemountpara montar arquivos como .tar.gz.

$ ls
files.tgz    mnt/

$ archivemount files.tgz mnt

$ ls mnt
file1    file2

[... Perform desired read/write operations on the archive via mnt/ ...]

$ umount mnt

[... Any changes are saved to the archive ...]

Veja a página de manual archivemountpara mais informações. Muitas vezes, não é instalado, portanto você provavelmente precisará instalar o pacote. Também é chamado archivemount. No Fedora 19, por exemplo:

$ sudo yum install archivemount

Referências


8

Você está falando de um FUSEsistema de arquivos (sistema de arquivos no espaço do usuário - Linus os chama de brinquedos ) ou de um kernel compilado personalizado OU squashfs. Squashnão é exatamente o que você descreve - você não pode simplesmente montar um tarball por exemplo - não com o VFS suportado pelo kernel, de qualquer maneira - mas você pode certamente mksquashqualquer número de arquivos ou diretórios e montar o arquivo resultante somente leitura. Você tem a opção de xz, lzma, or gzcompressão. Squashé usado o tempo todo - se você já usou uma imagem de linux ao vivo, as chances são muito boassquashed.

Vou lhe contar um truque com o qual squashfs.eu gosto de criar um btrfsarquivo de imagem e usá btrfstune -S 1-lo para torná-lo um seedvolume . Eu então coloquei essa imagem em um squashfsarquivo. A partir daí eu posso mount -o loopo image.sfse dentro de que mount -o loopa btrfsimagem.

O btrfs seedvolume será inicialmente montado como read-only- o que é esperado, considerando que está contido em uma squashedmontagem em loop. Mas se eu fizer:

GB_tmp_loop=$(
    fallocate -l $((1024*1024*1024)) /tmp/1GB_tmp.img &&
    losetup -f --show $_
)
btrfs device add "$GB_tmp_loop" "${btrfs_seed=/path/to/btrfs_image_mount}"
umount "$btrfs_seed"
mount -o compress-force=lzo,autodefrag,rw "$GB_tmp_loop" "$btrfs_seed"

De repente, estou aproveitando btrfsa copy-on-writefuncionalidade e a compactação automática de gravação E squashfs a compactação superior, tudo na RAM E no kernel.


obrigado mikeserv, esta é uma boa resposta e aprendi muito com ela, mas aceitei a outra resposta porque essa é mais objetiva.
Hélio

2
@ Ohhsen - eu entendo totalmente e provavelmente teria feito o mesmo - foi mais direto ao ponto. Às vezes, as respostas que solicitamos não são as que obtemos - e isso provavelmente é uma coisa boa, pois somos as que precisamos perguntar em primeiro lugar. De qualquer forma, aprecio muito o comentário.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.