Có thể tích hợp các tệp zip và tar.gz làm thư mục vào hệ thống tệp không


14

Tôi tự hỏi liệu có cách nào để tích hợp (nó hơi khác so với việc gắn, tôi nghĩ vậy) nén các tệp dưới dạng thư mục vào hệ thống tệp không?

Ví dụ, người ta có thể tải xuống một compressed-file.tar.gzổ cứng cục bộ của mình, sau đó thực hiện cd compressed-file.tar.gzvà chạy một tập lệnh từ trong thư mục nén hoặc làm cp some-file ..để giải nén một trong các tệp.

Tôi biết rằng Btrfs hỗ trợ nén, nhưng tôi không muốn thay đổi hệ thống tệp mà tôi có (ext3) để hỗ trợ tính năng này.

Câu trả lời:


20

Bạn có thể sử dụng lệnh archivemountđể gắn kết các tài liệu lưu trữ như .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 ...]

Xem trang người đàn ông archivemountđể biết thêm. Nó thường không được cài đặt nên có thể bạn sẽ cần cài đặt gói. Nó cũng được gọi là archivemount. Trên Fedora 19, ví dụ:

$ sudo yum install archivemount

Người giới thiệu


8

Bạn đang nói về một FUSEhệ thống tệp (hệ thống tệp trong không gian người dùng - Linus gọi chúng là đồ chơi ) hoặc hạt nhân được biên dịch tùy chỉnh HOẶC squashfs. Squashkhông chính xác như bạn mô tả - ví dụ, bạn không thể gắn tarball - nhưng không phải với VFS được hỗ trợ kernel bạn chắc chắn có thể có mksquashbất kỳ số lượng tệp hoặc thư mục và gắn kết lưu trữ chỉ đọc. Bạn có sự lựa chọn xz, lzma, or gznén. Squashđược sử dụng mọi lúc - nếu bạn đã từng sử dụng hình ảnh linux trực tiếp thì rất có thể đó làsquashed.

Tôi sẽ nói với bạn một mẹo tôi sử dụng với squashfs.tôi muốn tạo btrfstệp hình ảnh và sử dụng btrfstune -S 1để biến nó thành một seedtập . Sau đó tôi đặt hình ảnh đó trong một squashfskho lưu trữ. Từ đó tôi có thể mount -o loopsự image.sfsvà từ bên trong mà mount -o loopcác btrfshình ảnh.

Âm btrfs seedlượng ban đầu sẽ gắn kết như read-only- dự kiến ​​sẽ xem xét rằng nó được chứa trong một squashedvòng lặp. Nhưng nếu tôi thì làm:

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"

Đột nhiên, tôi đang tận dụng chức năng btrfscủa s copy-on-writevà nén ghi tự động squashfs nén vượt trội tất cả trong RAM trong kernel.


cảm ơn bạn mikeerv, đây là một câu trả lời hay và tôi đã học được rất nhiều từ nó, nhưng tôi đã chấp nhận câu trả lời khác bởi vì đó là một câu trả lời đúng hơn.
Helium

2
@Mohsen - Tôi hoàn toàn hiểu và có lẽ tôi cũng đã làm như vậy - nó còn hơn thế nữa. Đôi khi, câu trả lời chúng tôi yêu cầu không phải là câu trả lời chúng tôi nhận được - và đó có lẽ là một điều tốt, vì chúng tôi là những người cần phải hỏi ngay từ đầu. Trong mọi trường hợp, tôi đánh giá cao nhận xét rất nhiều.
mikeerv
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.