Czy to możliwe, aby zintegrować pliki zip i tar.gz jako katalog z systemem plików

14

Zastanawiam się, czy istnieje sposób zintegrowania (chyba trochę inaczej niż montowanie) skompresowanych plików jako katalogów z systemem plików?

Np. Można pobrać plik compressed-file.tar.gzna lokalny dysk twardy, a następnie wykonać cd compressed-file.tar.gzi uruchomić skrypt ze skompresowanego folderu lub cp some-file ..wyodrębnić jeden z plików.

Wiem, że Btrfs obsługuje kompresję, ale nie chcę zmieniać systemu plików, który posiadam (ext3), aby obsługiwać tę funkcję.

Hel
źródło

Odpowiedzi:

20

Za pomocą tego polecenia archivemountmożna montować archiwa, takie jak .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 ...]

Aby archivemountuzyskać więcej informacji, zobacz stronę podręcznika man . Często nie jest instalowany, więc prawdopodobnie będziesz musiał zainstalować pakiet. Jest również nazywany archivemount. Na przykład w Fedorze 19:

$ sudo yum install archivemount

Bibliografia

slm
źródło
8

Mówisz o FUSEsystemie plików (system plików w przestrzeni użytkownika - Linus nazywa je zabawkami ) lub niestandardowe skompilowane jądro LUB squashfs. Squashnie jest dokładnie takie, jak to opisujesz - nie możesz po prostu zamontować tarballa - nie z VFS obsługiwanym przez jądro - ale możesz z pewnością mksquashdowolną liczbę plików lub katalogów i zamontować powstałe archiwum tylko do odczytu. Masz wybór xz, lzma, or gzkompresji. Squashjest używany przez cały czas - jeśli kiedykolwiek używałeś linuksowego obrazu na żywo, szanse są bardzo dużesquashed.

Powiem ci jedną sztuczkę, której używam squashfs., lubię utworzyć btrfsplik obrazu i użyć btrfstune -S 1go, aby był seedwoluminem . Następnie umieściłem ten obraz w squashfsarchiwum. Stamtąd mogę i od wewnątrz, że na obrazie. mount -o loopimage.sfsmount -o loopbtrfs

btrfs seedObjętość początkowo będzie montować jako read-only- co należy się spodziewać biorąc pod uwagę, że jest to zawarte w squashedpętli Górze. Ale jeśli to zrobię:

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"

Nagle Biorę wykorzystać btrfsów copy-on-writefunkcjonalności i kompresji automatycznego zapisu I squashfs przełożonego kompresji wszystko w pamięci RAM I w jądro.

mikeserv
źródło
dziękuję mikeserv, to ładna odpowiedź i wiele się z niej nauczyłem, ale zaakceptowałem drugą odpowiedź, ponieważ ta jest bardziej istotna.
Hel
2
@Mohsen - całkowicie rozumiem i prawdopodobnie zrobiłbym to samo - chodziło o coś więcej. Czasami odpowiedzi, o które pytamy, nie są tymi, które otrzymujemy - i to prawdopodobnie dobra rzecz, ponieważ to my musimy przede wszystkim zapytać. W każdym razie bardzo doceniam ten komentarz.
mikeserv