Ist es möglich, zip- und tar.gz-Dateien als Verzeichnis in das Dateisystem zu integrieren?

14

Ich frage mich, ob es eine Möglichkeit gibt, komprimierte Dateien als Verzeichnisse in das Dateisystem zu integrieren.

Beispielsweise könnte man eine Datei compressed-file.tar.gzauf seine lokale Festplatte herunterladen , dann cd compressed-file.tar.gzein Skript aus dem komprimierten Ordner ausführen oder cp some-file ..eine der Dateien extrahieren.

Ich weiß, dass Btrfs die Komprimierung unterstützt, aber ich möchte nicht das Dateisystem ändern, das ich habe (ext3), um diese Funktion zu unterstützen.

Helium
quelle

Antworten:

20

Sie können den Befehl archivemountzum Mounten von Archiven verwenden, z .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 ...]

archivemountWeitere Informationen finden Sie auf der Manpage . Es wird häufig nicht installiert, daher müssen Sie das Paket wahrscheinlich installieren. Es heißt auch archivemount. Auf Fedora 19 zum Beispiel:

$ sudo yum install archivemount

Verweise

slm
quelle
8

Sie sprechen entweder über ein FUSEDateisystem (Dateisystem im Userspace - Linus nennt sie Spielzeug ) oder einen benutzerdefinierten kompilierten Kernel ODER squashfs. Squashsind nicht genau so, wie Sie es beschreiben. Sie können beispielsweise keinen Tarball mounten - jedenfalls nicht mit dem vom Kernel unterstützten VFS Sie können sicher mksquashbeliebig viele Dateien oder Verzeichnisse anlegen und das resultierende Archiv schreibgeschützt einbinden. Sie haben die Wahl der xz, lzma, or gzKomprimierung. Squashwird die ganze Zeit verwendet - wenn Sie jemals ein Live-Linux-Image verwendet haben, stehen die Chancen sehr gutsquashed.

Ich erzähle Ihnen einen Trick, mit dem squashfs.ich gerne eine btrfsBilddatei erstelle und btrfstune -S 1daraus ein seedVolume mache . Ich habe das Bild dann in ein squashfsArchiv gestellt. Von dort kann ich mount -o loopdas image.sfsund von innen mount -o loopdas btrfsBild.

Das btrfs seedVolume wird anfangs gemountet als read-only- was zu erwarten ist, wenn man bedenkt, dass es in einem squashedLoop-Mount enthalten ist. Aber wenn ich dann tue:

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"

Plötzlich nehme ich die Vorteile von btrfss - copy-on-writeFunktionalität und die automatische Schreib Kompression und squashfs s überlegen Kompression alle im RAM und im Kernel.

mikeserv
quelle
danke mikeserv, das ist eine nette antwort und ich habe viel daraus gelernt, aber ich habe die andere antwort akzeptiert, weil diese mehr auf den punkt ist.
Helium
2
@Mohsen - ich verstehe vollkommen und hätte wahrscheinlich das gleiche getan - es war mehr auf den Punkt. Manchmal sind die Antworten, nach denen wir fragen, nicht die, die wir bekommen - und das ist wahrscheinlich eine gute Sache, da wir zuerst fragen müssen. Auf jeden Fall schätze ich den Kommentar sehr.
mikeserv