¿Es posible integrar archivos zip y tar.gz como directorio en el sistema de archivos?


14

Me pregunto si hay una manera de integrar (creo que es un poco diferente del montaje) archivos comprimidos como directorios en el sistema de archivos.

Por ejemplo, uno puede descargar un archivo compressed-file.tar.gzen su disco duro local, luego cd compressed-file.tar.gzejecutar y ejecutar un script desde la carpeta comprimida o cp some-file ..extraer un archivo.

Sé que Btrfs admite la compresión, pero no quiero cambiar el sistema de archivos que tengo (ext3) para admitir esta función.

Respuestas:


20

Puede usar el comando archivemountpara montar archivos 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 ...]

Vea la página del manual archivemountpara más información. Muchas veces no está instalado, por lo que es probable que deba instalar el paquete. También se llama archivemount. En Fedora 19, por ejemplo:

$ sudo yum install archivemount

Referencias


8

O bien está hablando de un FUSEsistema de archivos (sistema de archivos en el espacio de usuario, Linus los llama juguetes ) o un núcleo compilado personalizado O squashfs. Squashno es exactamente como lo describe, no puede simplemente montar un tarball, por ejemplo, no con el VFS compatible con el núcleo, pero ciertamente puede tener mksquashcualquier cantidad de archivos o directorios y montar el archivo resultante de solo lectura. Tienes la opción de xz, lzma, or gzcompresión. Squashse usa todo el tiempo; si alguna vez ha usado una imagen de Linux en vivo, las posibilidades son muy buenas, erasquashed.

Te diré un truco que uso con el que squashfs.me gusta crear un btrfsarchivo de imagen y usarlo btrfstune -S 1para convertirlo en un seedvolumen . Luego puse esa imagen en un squashfsarchivo. A partir de ahí lo que pueda mount -o loopal image.sfsy desde dentro que mount -o loopla btrfsimagen.

El btrfs seedvolumen inicialmente se montará como read-only, lo cual es de esperar teniendo en cuenta que está contenido dentro de un squashedmontaje de bucle. Pero si luego lo hago:

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, aprovecho btrfsla copy-on-writefuncionalidad y la compresión automática de escritura Y squashfs la compresión superior, todo en RAM Y en el núcleo.


gracias mikeserv, esta es una buena respuesta y aprendí mucho de ella, pero acepté la otra respuesta porque esa es más concreta.
Helio

2
@Mohsen: entiendo totalmente y probablemente habría hecho lo mismo, fue más importante. A veces, las respuestas que pedimos no son las que obtenemos, y eso es probablemente algo bueno, ya que somos los que necesitamos preguntar en primer lugar. En cualquier caso, agradezco mucho el comentario.
mikeserv
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.