Memasang sistem file squashfs di baca-tulis

45

Saya memiliki instalasi Clonezilla pada stik USB dan saya ingin membuat beberapa modifikasi pada sistem operasi. Secara khusus, saya ingin memasukkan skrip runnable ke /usr/sbinuntuk membuatnya mudah untuk menjalankan perintah cadangan saya sendiri untuk membuat cadangan lebih ringan.

Sistem file utama hidup di bawah /live/filesystem.squashfspada partisi USB FAT-32.

Bagaimana saya bisa me-mount baca / tulis ini di mesin Linux saya agar dapat menambah / menghapus / mengubah file? Saya menjalankan turunan Ubuntu 12.04.

Naftuli Kay
sumber

Jawaban:

38

Sebagai root, salin filesystem.squashfske beberapa direktori kosong, misalnya:

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

Buka kemasan file lalu pindahkan ke tempat lain (jadi Anda masih menyimpannya sebagai cadangan):

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

Masuk squashfs-root, tambahkan / modifikasi sesuai selera Anda lalu buat ulang filesystem.squashfs:

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

salin yang baru dibuat di filesystem.squashfsatas yang ada di USB drive Anda, mis:

cp filesystem.squashfs /mnt/clonezilla/live/

kemudian reboot dan gunakan LIVE USB Anda.

Catatan: perintah di atas adalah bagian dari squashfs-tools.

don_crissti
sumber
Ini bekerja dengan baik, tetapi sayangnya, saya mendapatkan pesan untuk semua direktori root memberitahu saya Source directory entry bin already used! - trying bin_1. Benar saja, dalam sistem file keluaran saya, saya memiliki a /bindan a /bin_1, daripada menggabungkan folder. Ada ide? Jika saya menjalankan dengan -noappend,filesystem tidak berfungsi.
Naftuli Kay
1
@TKKocheran - Saya tidak mendapatkan kesalahan apa pun di sini setelah menambahkan skrip khusus /usr/bindan mengemasnya kembali mksquashfs. Drive USB melakukan booting dengan baik dan saya dapat menggunakan skrip saya dari sesi langsung. Pastikan Anda tidak lagi memiliki yang lama filesystem.squashfsdi direktori yang sama dengan yang Anda modifikasi squashfs-rootsebelum menjalankan mksquashfs.
don_crissti
@Naftuli: Sepertinya Anda telah melewatkan langkah "mv ... backup /".
Joachim Wagner
Apakah ini tidak bekerja di bawah root (palsu)? Hanya dari mengekstraksi saya mendapatkan kesalahancreate_inode: could not create character device squashfs-root/dev/audio, because you're not superuser!
Wilf
@Wilf - Anda tidak dapat membuat file perangkat ( squashfs-root/dev/*) sebagai pengguna biasa, Anda memerlukan hak akses root.
don_crissti
5

Jika sistem Anda mendukung beberapa sistem file uion, seperti aufs atau overlayfs , Anda tidak perlu mengekstrak file squashfs asli Anda.

Misalnya overlayfs digunakan (opsi kernel untuk mengaktifkannya): Anda dapat me-mount squashfs.file Anda ke / fm atau ke tempat lain terlebih dahulu. Siapkan sistem file yang dapat ditulisi dengan 2 direktori di dalamnya, say / to dan / temp . siapkan direktori / sirip lain yang bisa ditulis untuk hasil yang digabungkan Pasang mereka bersama sebagai hamparan ke sistem Anda ---

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

Sekarang Anda dapat menambah / memodifikasi file di / fin . Setelah semuanya selesai, Anda dapat mksquashfs / fin ke file squashfs baru,

mksquashfs /fin newfile; umount /fin

, lalu hapus / lepaskan semua direktori lain yang digunakan sesuka Anda.

The squashfs dan beberapa unionfs biasanya digunakan untuk -live cd .

Zhi-Ming Chen
sumber
Jika Anda menghapus file dari mount / fin, apakah itu akan dihapus dari squashfs akhir yang Anda buat?
localhost
2

Di sini , saya menemukan jawaban lain:

bash# mount dir.sqsh /mnt/dir -t squashfs -o loop
Pengguna
sumber
7
Perintah di atas akan memasangnya hanya-baca, yang lebih baik daripada tidak memasangnya sama sekali; Sayangnya, bukan jawaban lengkap untuk pertanyaan yang ada.
harperville
Saya setuju bahwa itu bukan jawaban yang lengkap. Bersama dengan unix.stackexchange.com/a/377269/27328 Anda dapat membangun jawaban di mana Anda tidak perlu membongkar sistem file Anda untuk memodifikasinya - lebih sedikit ruang, lebih sedikit waktu.
Pengguna
Metode paling sederhana, bekerja pada CentOS 7
Seff
0

Menggunakan overlayfs seperti yang ditunjukkan adalah cara terbaik untuk membuat pseudo "squashfs rw"; Namun itu membutuhkan untuk dijalankan pada> 4.x kernel (atau ubuntu> 14.x trusty).

Solusi alternatif ketika seseorang duduk di live cd lama tanpa overlayfs / aufs / unionfs adalah dengan memanfaatkan kemampuan squashfs'own

penting:

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

contoh:

ubah direktori "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

baris 3 build sementara squashfsfile tidak termasuk olddir_usr

baris 4 menambahkan dimodifikasi-usr-dir ke new_squashfsfile

lihat di sini tambahkan squashfs. Tambahkan ke sub-direktori di dalam file squashfs

pengguna3477652
sumber