É 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, pode-se baixar um compressed-file.tar.gz para seu disco rígido local, fazer cd compressed-file.tar.gz e executar um script de dentro da pasta compactada ou usar cp some-file .. para extrair um dos arquivos.

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

    
por Helium 05.04.2014 / 11:18

2 respostas

19

Você pode usar o comando archivemount para 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 para archivemount para mais informações. Muitas vezes não é instalado, então você provavelmente precisará instalar o pacote. Também é chamado archivemount . No Fedora 19, por exemplo:

$ sudo yum install archivemount

Referências

por 05.04.2014 / 14:33
8

Ou você está falando sobre um FUSE filesystem (sistema de arquivos no espaço do usuário - Linus chama-os de brinquedos ) ou um kernel compilado personalizado OU squashfs. Squash não é exatamente como você descreve - você não pode simplesmente montar um tarball por exemplo - não com o VFS suportado pelo kernel, de qualquer forma - mas você pode certamente mksquash qualquer número de arquivos ou diretórios e monta o arquivo resultante somente leitura. Você tem a opção de xz, lzma, or gz compression. Squash é usado o tempo todo - se você já usou uma imagem live linux, as chances são muito boas, foi squashed.

Eu vou te dizer um truque que eu uso com squashfs. Eu gosto de criar um arquivo de imagem btrfs e usar btrfstune -S 1 para torná-lo um seed volume . Eu então coloquei essa imagem em um arquivo squashfs . A partir daí, posso mount -o loop the image.sfs e de dentro dessa mount -o loop a btrfs image.

O volume btrfs seed será inicialmente montado como read-only - o que é esperado, considerando que ele está contido em uma montagem de loop squashed . Mas se eu fizer então:

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 a funcionalidade btrfs s copy-on-write e compactação automática de gravação AND squashfs s compactação superior tudo na RAM AND no kernel.

    
por 05.04.2014 / 11:54