Montaje de un sistema de archivos squashfs en lectura-escritura

45

Tengo una instalación de Clonezilla en una memoria USB y me gustaría hacer algunas modificaciones en el sistema operativo. Específicamente, me gustaría insertar un script ejecutable /usr/sbinpara que sea fácil ejecutar mi propio comando de copia de seguridad para que las copias de seguridad sean menos dolorosas.

El sistema de archivos principal vive /live/filesystem.squashfsen la partición USB FAT-32.

¿Cómo puedo montar esta lectura / escritura en mi máquina Linux para poder agregar / eliminar / cambiar archivos? Estoy ejecutando un derivado de Ubuntu 12.04.

Naftuli Kay
fuente

Respuestas:

38

Como root, copie filesystem.squashfsa algún directorio vacío, por ejemplo:

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

Descomprima el archivo y luego muévalo a otro lugar (para que aún lo tenga como respaldo):

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

Entre squashfs-root, agregue / modifique según su gusto y luego vuelva a crear filesystem.squashfs:

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

copie el recién creado filesystem.squashfssobre el existente en su unidad USB, por ejemplo:

cp filesystem.squashfs /mnt/clonezilla/live/

luego reinicie y use su USB EN VIVO.

Nota: los comandos anteriores son parte de squashfs-tools.

don_crissti
fuente
Esto funciona muy bien, pero desafortunadamente, recibo un mensaje para todos los directorios raíz diciéndome Source directory entry bin already used! - trying bin_1. Efectivamente, en mi sistema de archivos de salida, tengo a /biny a /bin_1, en lugar de fusionar la carpeta. ¿Algunas ideas? Si corro con -noappend,el sistema de archivos simplemente no funciona.
Naftuli Kay
1
@TKKocheran: no obtengo ninguno de esos errores aquí después de agregar un script personalizado /usr/biny volver a empaquetarlo mksquashfs. La unidad USB arranca bien y puedo usar mi script desde la sesión en vivo. Asegúrese de que ya no tiene el viejo filesystem.squashfsen el mismo directorio con el modificado squashfs-rootantes de ejecutarlo mksquashfs.
don_crissti
@Naftuli: Parece que has omitido el paso "mv ... backup /".
Joachim Wagner
¿Esto no funciona bajo la raíz (falsa)? Solo por extraer me sale el errorcreate_inode: could not create character device squashfs-root/dev/audio, because you're not superuser!
Wilf
@Wilf: no puede crear archivos de dispositivo ( squashfs-root/dev/*) como usuario normal, necesita privilegios de root.
don_crissti
5

Si su sistema admite algún sistema de archivos uion , como aufs o overlayfs , no tiene que extraer su archivo squashfs original.

Por ejemplo, se usa overlayfs (una opción de kernel para habilitarlo): puede montar sus archivos squashfs.fm en / fm o en otro lugar primero. Prepare un sistema de archivos grabable con 2 directorios, digamos / to y / temp . prepare otro directorio / aleta grabable para los resultados combinados. Montarlos juntos como una superposición a su sistema ---

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

Ahora puede agregar / modificar archivos en / fin . Una vez que todo está hecho, puede mksquashfs / fin a un nuevo archivo squashfs,

mksquashfs /fin newfile; umount /fin

, luego borre / desmonte todos los demás directorios usados ​​como lo hará.

Los squashfs y algunos unionfs se usan comúnmente para un live-cd .

Zhi-Ming Chen
fuente
Si elimina un archivo del montado / aleta, ¿se eliminará de los squashfs finales que cree?
localhost
2

Aquí , encontré otra respuesta:

bash# mount dir.sqsh /mnt/dir -t squashfs -o loop
Usuario
fuente
77
El comando anterior lo montará de solo lectura, lo cual es mejor que no montarlo en absoluto; Por desgracia, no es una respuesta completa a la pregunta en cuestión.
Harperville
Estoy de acuerdo en que no es una respuesta completa. Junto con unix.stackexchange.com/a/377269/27328 puede crear una respuesta en la que no necesite descomprimir su sistema de archivos para modificarlo: menos espacio, menos tiempo.
Usuario
Método más simple, trabajado en CentOS 7
Seff
0

Usar overlayfs como se muestra es la mejor manera de tener pseudo "squashfs rw"; Sin embargo, requiere ejecutarse en> 4.x kernel (o ubuntu> 14.x trusty).

Una solución alternativa cuando uno está sentado en un CD en vivo más antiguo sin ninguna superposición / aufs / unionfs es hacer uso de las capacidades propias de squashfs

importante:

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

ejemplo:

modificar el directorio "usr" de 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

la línea 3 construye temporalmente el archivo squashfs excluyendo olddir_usr

la línea 4 agrega el directorio-usr modificado en el archivo new_squashfs

ver aquí agregar squashfs Agregar al subdirectorio dentro del archivo squashfs

usuario3477652
fuente