Чи можливо це інтегрувати файли zip та tar.gz як каталог у файлову систему


14

Цікаво, чи є спосіб інтегрувати (це трохи відрізняється від монтажу, я думаю) стислих файлів як каталогів у файлову систему?

Наприклад, можна завантажити compressed-file.tar.gzна свій локальний жорсткий диск, а потім виконати cd compressed-file.tar.gzі запустити сценарій із стиснутої папки або зробити cp some-file ..для вилучення одного з файлів.

Я знаю, що Btrfs підтримує стиснення, але я не хочу змінювати файлову систему, яка у мене є (ext3), щоб підтримувати цю функцію.

Відповіді:


20

Ви можете використовувати команду archivemountдля монтажу архівів, таких як .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 ...]

Додаткову інформацію див. На сторінці чоловіка archivemount. Він часто не встановлюється, тому вам, ймовірно, доведеться встановити пакет. Це також називається archivemount. Наприклад, у Fedora 19:

$ sudo yum install archivemount

Список літератури


8

Ви або говорите про FUSEфайлову систему (файлова система в просторі користувачів - Лінус називає їх іграшками ), або призначене для користувача скомпільоване ядро ​​АБО squashfs. Squashне зовсім так, як ви описуєте - ви не можете просто встановити, наприклад, тарбол - не з підтримкою VFS ядра, все одно - але ви, безумовно, можете mksquashбудь-яку кількість файлів або каталогів і змонтувати отриманий архів лише для читання. У вас є вибір xz, lzma, or gzстиснення. Squashвикористовується весь час - якщо ви коли-небудь використовували живе зображення linux, шанси дуже хорошіsquashed.

Я скажу вам один трюк, яким я користуюсь, squashfs.я люблю створювати btrfsфайл зображення і використовувати його, btrfstune -S 1щоб зробити його seedобсягом . Потім я поклав це зображення в squashfsархів. Від там я можу і зсередини , що на зображенні. mount -o loopimage.sfsmount -o loopbtrfs

btrfs seedОбсяг буде спочатку встановити , як read-only- що і слід було очікувати , з огляду на , що він міститься в squashedциклі монтування. Але якщо я тоді:

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"

Раптово я користуючись btrfsїй copy-on-writeфункціональність і стиснення автоматичного запису і squashfs переважного стиснення все в оперативній пам'яті і в ядрі.


дякую, mikeserv, це гарна відповідь, і я багато чого навчився з неї, але я прийняв іншу відповідь, тому що це одна до речі.
Гелій

2
@Mohsen - Я цілком розумію, і, певно, зробив би те саме - це було більше до речі. Іноді відповіді, яких ми запитуємо, не є такими, які ми отримуємо - і це, мабуть, добре, оскільки ми саме ті, кого потрібно запитати в першу чергу. У будь-якому випадку, я дуже ціную коментар.
mikeserv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.