Gắn hệ thống tập tin squashfs trong đọc-ghi


45

Tôi có cài đặt Clonezilla trên thanh USB và tôi muốn thực hiện một số sửa đổi cho hệ điều hành. Cụ thể, tôi muốn chèn một tập lệnh có thể chạy vào /usr/sbinđể giúp dễ dàng chạy lệnh sao lưu của riêng tôi để sao lưu ít đau hơn.

Hệ thống tập tin chính nằm dưới /live/filesystem.squashfsphân vùng USB FAT-32.

Làm cách nào tôi có thể gắn kết đọc / ghi này trên máy Linux của mình để có thể thêm / xóa / thay đổi tệp? Tôi đang chạy một dẫn xuất Ubuntu 12.04.

Câu trả lời:


38

Là root, sao chép filesystem.squashfsvào một số dir trống, ví dụ:

cp /mnt/clonezilla/live/filesystem.squashfs /path/to/workdir
cd /path/to/workdir

Giải nén tập tin sau đó di chuyển nó đi nơi khác (vì vậy bạn vẫn có nó như một bản sao lưu):

unsquashfs filesystem.squashfs
mv filesystem.squashfs /path/to/backup/

Đi vào squashfs-root, thêm / sửa đổi theo sở thích của bạn sau đó tạo lại filesystem.squashfs:

cd /path/to/workdir
mksquashfs squashfs-root filesystem.squashfs -b 1024k -comp xz -Xbcj x86 -e boot

sao chép cái mới được tạo filesystem.squashfstrên cái hiện có trên ổ USB của bạn, vd:

cp filesystem.squashfs /mnt/clonezilla/live/

sau đó khởi động lại và sử dụng USB LIVE của bạn.

Lưu ý: các lệnh trên là một phần của squashfs-tools.


Điều này hoạt động rất tốt, nhưng thật không may, tôi nhận được một tin nhắn cho tất cả các thư mục gốc nói với tôi Source directory entry bin already used! - trying bin_1. Chắc chắn, trong hệ thống tập tin đầu ra của tôi, tôi có một /bin/bin_1thay vì hợp nhất thư mục. Có ý kiến ​​gì không? Nếu tôi chạy với -noappend,hệ thống tập tin đơn giản là không hoạt động.
Naftuli Kay

1
@TKKocheran - Tôi không gặp phải bất kỳ lỗi nào ở đây sau khi thêm tập lệnh tùy chỉnh vào /usr/binvà đóng gói lại mksquashfs. Ổ USB khởi động tốt và tôi có thể sử dụng tập lệnh của mình từ phiên trực tiếp. Hãy chắc chắn rằng bạn không còn cái cũ filesystem.squashfstrong cùng thư mục đã sửa đổi squashfs-roottrước khi chạy mksquashfs.
don_crissti

@Naftuli: Có vẻ như bạn đã bỏ qua bước "mv ... backup /".
Joachim Wagner

Có phải công việc này không dưới gốc (giả)? Chỉ cần trích xuất tôi nhận được lỗicreate_inode: could not create character device squashfs-root/dev/audio, because you're not superuser!
Wilf

@Wilf - bạn không thể tạo tệp thiết bị ( squashfs-root/dev/*) như người dùng thông thường, bạn cần quyền root.
don_crissti

5

Nếu hệ thống của bạn hỗ trợ một số hệ thống tệp uion, chẳng hạn như aufs hoặc lớp phủ , bạn không phải trích xuất tệp squashfs ban đầu của mình.

Ví dụ: lớp phủ được sử dụng (tùy chọn kernel để kích hoạt nó): Trước tiên, bạn có thể gắn squashfs.file của mình vào / fm hoặc ở một nơi khác. Chuẩn bị một hệ thống tập tin có thể ghi với 2 thư mục trong đó, nói / đến/ temp . chuẩn bị một thư mục / vây có thể ghi khác cho các kết quả được hợp nhất. Gắn kết chúng lại với nhau như một lớp phủ cho hệ thống của bạn ---

mount -t overlay -o lowerdir=/fm,upperdir=/to,workdir=/temp overlay /fin

Bây giờ bạn có thể thêm / sửa đổi các tập tin trong / fin . Khi mọi thứ đã hoàn tất, bạn có thể mksquashfs / fin vào một tệp squashfs mới,

mksquashfs /fin newfile; umount /fin

, sau đó xóa / ngắt kết nối tất cả các thư mục được sử dụng khác như bạn muốn.

Các squashfs và một số unionfs thường được sử dụng cho một live-cd .


Nếu bạn xóa một tập tin khỏi phần được gắn / vây, nó sẽ bị xóa khỏi squashfs cuối cùng mà bạn tạo ra?
localhost

2

Ở đây , tôi tìm thấy một câu trả lời khác:

bash# mount dir.sqsh /mnt/dir -t squashfs -o loop

7
Lệnh trên sẽ gắn kết nó chỉ đọc, tốt hơn là không gắn kết nó; Than ôi, không phải là một câu trả lời đầy đủ cho câu hỏi trong tầm tay.
harperville

Tôi đồng ý rằng nó không phải là một câu trả lời hoàn chỉnh. Cùng với unix.stackexchange.com/a/377269/27328, bạn có thể tạo một câu trả lời mà bạn không cần phải giải nén hệ thống tệp của mình để sửa đổi nó - ít không gian hơn, ít thời gian hơn.
Người dùng

Phương pháp đơn giản nhất, hoạt động trên CentOS 7
Seff

0

Sử dụng lớp phủ như được hiển thị là cách tốt nhất để có giả "squashfs rw"; Tuy nhiên, nó đòi hỏi phải chạy trên kernel> 4.x (hoặc ubfox> 14.x đáng tin cậy).

Một giải pháp thay thế khi một người đang ngồi trên đĩa CD trực tiếp cũ hơn mà không có lớp phủ / aufs / unionfs nào là sử dụng các khả năng của squashfs'own

quan trọng:

 without unsquashfs, so this can be done on low storage system

thí dụ:

sửa đổi thư mục "usr" của squashfs

1    mount squashfs_file /mnt

2    cp -a /mnt/usr $HOME  ##modify whatever $HOME/usr as needed

3    mksquashfs /mnt new_squashfs_file -wildcards -e usr

4    mksquashfs $HOME/usr new_squashfs_file -keep-as-directory

5    umount /mnt  # cleanup

dòng 3 xây dựng squashfsfile tạm thời không bao gồm olddir_usr

dòng 4 nối thêm usr-dir vào new_squashfsfile

xem ở đây chắp thêm squashfs Nối vào thư mục con bên trong tập tin squashfs

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.