È possibile integrare i file zip e tar.gz come directory nel file system


14

Mi chiedo se c'è un modo per integrare (è un po 'diverso dal montaggio, credo) i file compressi come directory nel file system?

Ad esempio, è possibile scaricare un file compressed-file.tar.gzsul proprio disco rigido locale, quindi eseguire cd compressed-file.tar.gzed eseguire uno script dalla cartella compressa o cp some-file ..estrarre uno dei file.

So che Btrfs supporta la compressione, ma non voglio cambiare il file system che ho (ext3) per supportare questa funzione.

Risposte:


20

È possibile utilizzare il comando archivemountper montare archivi come.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 ...]

Vedi la pagina man archivemountper maggiori informazioni. Spesso non è installato, quindi probabilmente dovrai installare il pacchetto. Si chiama anchearchivemount . Su Fedora 19, ad esempio:

$ sudo yum install archivemount

Riferimenti


8

O stai parlando di un FUSEfilesystem (filesystem nello spazio utente - Linus li chiama giocattoli ) o un kernel compilato personalizzato O squashfs. Squashnon è esattamente come descrivi - non puoi semplicemente montare un tarball per esempio - non con il VFS supportato dal kernel, comunque - ma puoi sicuramente mksquashun numero qualsiasi di file o directory e montare l'archivio risultante in sola lettura. Hai la scelta della xz, lzma, or gzcompressione. Squashviene usato tutto il tempo - se hai mai usato un'immagine live di Linux, le probabilità sono ottimesquashed.

Ti dirò un trucco che uso con squashfs.Mi piace per creare un btrfsfile di immagine e utilizzare btrfstune -S 1per renderlo un seedvolume . Ho quindi messo quell'immagine in un squashfsarchivio. Da lì posso mount -o loopl' image.sfse dall'interno che mount -o loopl' btrfsimmagine.

Il btrfs seedvolume inizialmente verrà montato come read-only- come prevedibile considerando che è contenuto all'interno di un squashedmontaggio ad anello. Ma se poi lo faccio:

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"

Improvvisamente sto sfruttando btrfsla copy-on-writefunzionalità e la compressione automatica della scrittura E squashfs la compressione superiore tutto in RAM E nel kernel.


grazie mikeserv, questa è una bella risposta e ho imparato molto da essa, ma ho accettato l'altra risposta perché quella è più pertinente.
Elio

2
@Mohsen - Capisco perfettamente e probabilmente avrei fatto lo stesso - era più che preciso. A volte le risposte che chiediamo non sono quelle che riceviamo - e questa è probabilmente una buona cosa, dato che siamo noi quelli che devono prima chiedere. In ogni caso, apprezzo molto il commento.
mikeserv,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.