Est-il possible d'intégrer des fichiers zip et tar.gz en tant que répertoire dans le système de fichiers

14

Je me demande s'il existe un moyen d'intégrer (c'est un peu différent du montage, je pense) des fichiers compressés en tant que répertoires dans le système de fichiers?

Par exemple, on pourrait télécharger un compressed-file.tar.gzsur son disque dur local, puis faire cd compressed-file.tar.gzet exécuter un script à partir du dossier compressé ou faire cp some-file ..pour extraire l'un des fichiers.

Je sais que Btrfs prend en charge la compression, mais je ne veux pas changer le système de fichiers que j'ai (ext3) pour prendre en charge cette fonctionnalité.

Hélium
la source

Réponses:

20

Vous pouvez utiliser la commande archivemountpour monter des archives telles que .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 ...]

Consultez la page de manuel archivemountpour plus d'informations. Souvent, il n'est pas installé, vous devrez donc probablement installer le package. Ça s'appelle aussi archivemount. Sur Fedora 19, par exemple:

$ sudo yum install archivemount

Les références

slm
la source
8

Vous parlez d'un FUSEsystème de fichiers (système de fichiers dans l'espace utilisateur - Linus les appelle jouets ) ou d'un noyau compilé personnalisé OU squashfs. Squashn'est pas exactement comme vous le décrivez - vous ne pouvez pas simplement monter une archive tar par exemple - pas avec le noyau VFS pris en charge, de toute façon - mais vous pouvez certainement mksquashn'importe quel nombre de fichiers ou de répertoires et monter l'archive résultante en lecture seule. Vous avez le choix de la xz, lzma, or gzcompression. Squashest utilisé tout le temps - si vous avez déjà utilisé une image live linux, les chances sont très bonnessquashed.

Je vais vous dire une astuce que j'utilise avec squashfs.j'aime créer un btrfsfichier image et l'utiliser btrfstune -S 1pour en faire un seedvolume . J'ai ensuite mis cette image dans une squashfsarchive. De là, je peux mount -o loople image.sfset de l'intérieur de mount -o loopl' btrfsimage.

Le btrfs seedvolume sera initialement monté comme read-only- ce qui est normal étant donné qu'il est contenu dans un squashedmontage en boucle. Mais si je le fais alors:

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"

Tout à coup , je profite de btrfss la copy-on-writefonctionnalité et la compression d'écriture automatique et squashfs compression supérieure tout dans la RAM et dans le noyau.

mikeserv
la source
merci mikeserv, c'est une belle réponse et j'en ai beaucoup appris, mais j'ai accepté l'autre réponse car celle-ci est plus pertinente.
Hélium
2
@Mohsen - Je comprends parfaitement et j'aurais probablement fait de même - c'était plus pertinent. Parfois, les réponses que nous demandons ne sont pas celles que nous obtenons - et c'est probablement une bonne chose, car ce sont nous qui devons en premier lieu demander. En tout cas, j'apprécie beaucoup le commentaire.
mikeserv