การติดตั้งระบบไฟล์ squashfs ในการอ่าน - เขียน


45

ฉันมีการติดตั้ง Clonezilla บนแท่ง USB และฉันต้องการทำการแก้ไขระบบปฏิบัติการ โดยเฉพาะฉันต้องการแทรกสคริปต์ที่เรียกใช้ลงใน/usr/sbinเพื่อให้ง่ายต่อการเรียกใช้คำสั่งการสำรองข้อมูลของตัวเองเพื่อให้การสำรองข้อมูลที่เจ็บปวดน้อยลง

ระบบไฟล์หลักใช้งานได้/live/filesystem.squashfsบนพาร์ติชัน USB FAT-32

ฉันจะเมาท์อ่าน / เขียนบนเครื่องลีนุกซ์ของฉันเพื่อเพิ่ม / ลบ / เปลี่ยนไฟล์ได้อย่างไร? ฉันใช้งานอนุพันธ์ Ubuntu 12.04

คำตอบ:


38

ในฐานะ root ให้คัดลอกfilesystem.squashfsไปยัง dir ที่ว่างเปล่าเช่น:

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

คลายไฟล์ออกจากนั้นย้ายไฟล์ไปที่อื่น (ดังนั้นคุณยังเป็นไฟล์สำรอง):

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

เข้าไปข้างในsquashfs-rootเพิ่ม / แก้ไขตามรสนิยมของคุณแล้วสร้างใหม่filesystem.squashfs:

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

คัดลอกที่สร้างขึ้นใหม่filesystem.squashfsกว่าที่มีอยู่ในไดรฟ์ USB ของคุณเช่น:

cp filesystem.squashfs /mnt/clonezilla/live/

จากนั้นรีบูทและใช้งาน USB สดของคุณ

หมายเหตุ: squashfs-toolsคำสั่งดังกล่าวเป็นส่วนหนึ่งของ


นี้ทำงานได้ดี Source directory entry bin already used! - trying bin_1แต่โชคไม่ดีที่ฉันได้รับข้อความสำหรับทุกไดเรกทอรีรากบอกฉัน ในระบบไฟล์เอาต์พุตของฉันฉันมี a /binและ a /bin_1แทนที่จะรวมโฟลเดอร์ ความคิดใด ๆ ถ้าฉันทำงานกับ-noappend,ระบบไฟล์ก็ไม่ทำงาน
Naftuli Kay

1
@TKKocheran - ฉันไม่ได้รับการใด ๆ ของข้อผิดพลาดที่นี่หลังจากที่เพิ่มสคริปต์แบบกำหนดเองในและบรรจุด้วย/usr/bin mksquashfsบูทไดรฟ์ USB ใช้ได้และฉันสามารถใช้สคริปต์จากเซสชันสด ให้แน่ใจว่าคุณไม่ได้มีความเก่าfilesystem.squashfsในไดเรกทอรีเดียวกันกับการแก้ไขของคุณก่อนที่จะใช้squashfs-root mksquashfs
don_crissti

@Naftuli: คุณดูเหมือนจะข้ามขั้นตอน "mv ... backup /"
Joachim Wagner

งานนี้ไม่ได้อยู่ภายใต้รูท (ปลอม) หรือไม่ เพียงจากการแยกฉันได้รับข้อผิดพลาดcreate_inode: could not create character device squashfs-root/dev/audio, because you're not superuser!
วิลฟ์

@Wilf - คุณไม่สามารถสร้างไฟล์อุปกรณ์ ( squashfs-root/dev/*) ในฐานะผู้ใช้ทั่วไปคุณต้องมีสิทธิ์ใช้งานรูท
don_crissti

5

หากระบบของคุณรองรับระบบ uion-filesystem เช่นaufsหรือoverlayfsคุณไม่จำเป็นต้องแตกไฟล์ squashfs ดั้งเดิมของคุณ

ตัวอย่างเช่นใช้โอเวอร์เลย์ (ตัวเลือกเคอร์เนลเพื่อเปิดใช้งาน): คุณสามารถเมานต์ squashfs.file ของคุณเป็น/ fmหรือที่อื่นก่อน เตรียมระบบแฟ้มเขียนได้มี 2 ไดเรกทอรีในนั้นพูด/ การและ/ ชั่วคราว เตรียมความพร้อมอีกไดเรกทอรีที่สามารถเขียนได้/ ครีบเพื่อให้ได้ผลลัพธ์ที่ถูกผสาน ติดตั้งเข้าด้วยกันเป็นแบบโอเวอร์เลย์ในระบบของคุณ ---

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

ตอนนี้คุณสามารถเพิ่ม / แก้ไขไฟล์ใน/ ครีบ เมื่อทุกอย่างเสร็จสิ้นคุณสามารถ mksquashfs / finไปยังไฟล์ squashfs ใหม่

mksquashfs /fin newfile; umount /fin

จากนั้นล้าง / เลิกเมานท์ไดเรกทอรีที่ใช้อื่น ๆ ทั้งหมดตามที่คุณต้องการ

squashfsและบางunionfsมักใช้สำหรับการถ่ายทอดสด-CD


หากคุณลบไฟล์จากเมานต์ / ฟินไฟล์นั้นจะถูกลบออกจากสควอชสุดท้ายที่คุณสร้างหรือไม่?
localhost

2

ที่นี่ฉันพบคำตอบอื่น:

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

7
คำสั่งด้านบนจะเมานต์แบบอ่านอย่างเดียวซึ่งดีกว่าไม่ติดตั้งเลย อนิจจาไม่ใช่คำตอบที่สมบูรณ์ของคำถามที่อยู่ในมือ
harperville

ฉันยอมรับว่ามันไม่ใช่คำตอบที่สมบูรณ์ เมื่อใช้ร่วมกับunix.stackexchange.com/a/377269/27328คุณสามารถสร้างคำตอบโดยที่คุณไม่จำเป็นต้องแกะระบบไฟล์ของคุณเพื่อแก้ไขมัน - พื้นที่น้อยกว่าใช้เวลาน้อยลง
ผู้ใช้

วิธีที่ง่ายที่สุดทำงานบน CentOS 7
Seff

0

การใช้โอเวอร์เลย์ตามที่แสดงเป็นวิธีที่ดีที่สุดในการหลอก "squashfs rw"; อย่างไรก็ตามมันจำเป็นต้องเรียกใช้บนเคอร์เนล> 4.x (หรือ ubuntu> 14.x trusty)

อีกทางเลือกหนึ่งเมื่ออยู่บน cd เก่าที่ไม่มี overlayfs / aufs / unionfs คือการใช้ประโยชน์จากความสามารถของ squashfs'own

สิ่งสำคัญ:

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

ตัวอย่าง:

แก้ไขไดเร็กทอรี "usr" ของ 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

บรรทัดที่ 3 สร้าง squashfsfile ชั่วคราวยกเว้น olddir_usr

บรรทัด 4 ต่อท้าย modified-usr-dir เข้าใน new_squashfsfile

ดูที่นี่ผนวก squashfs ผนวกไปยังไดเรกทอรีย่อยภายในไฟล์ squashfs

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.