Estoy intentando modificar algunos archivos dentro de un archivo ".img".
Ejemplo:
logo-x.squashfs.img
romfs-x.squashfs.img
safeEnv.img
sign.img
Para eso, extraje el ".img" usando 7-Zip e hice los cambios necesarios. Sin embargo, no es posible archivar estos archivos modificados con 7-Zip, así que busqué una herramienta para hacerlo pero no pude encontrar una que fuera capaz de crear el ".img" como estaba originalmente.
Intenté usar ImgBurn pero parece crear un archivo diferente al original. También intenté usar DD pero no pude hacerlo funcionar con archivos en lugar de volúmenes.
Por favor, ¿cómo podría leer el archivo ".img" original para conocer su formato y crear uno nuevo a partir de los archivos nuevos?
Respuesta1
Si bien descubrió que 7-Zip puede convertir imágenes de squashFS en archivos individuales, la herramienta canónica para hacerlo probablemente sería
rdsquashfs
:
# Unpack image `foo.img' into directory `foo':
rdsquashfs --unpack-root foo --unpack-path / foo.img
Luego, después de modificar los archivos dentro de foo
, puede volver a empaquetarlos usando
mksquashfs
:
mksquashfs foo foo-updated.img
Creo que usar mksquashfs
como se indica arriba puede perder algunos de los metadatos del archivo de imagen original. Si esto es importante para su caso de uso, considere leer una descripción de la imagen original y usarla como referencia al crear la nueva imagen:
# Unpack image `foo.img' into directory `foo':
rdsquashfs --unpack-root foo --unpack-path / foo.img
# Read description from image `foo.img' to file `foo.desc`:
rdsquashfs --describe foo.img >foo.desc
# Create image `foo-updated.img' from directory `foo' and description:
gensquashfs --pack-file foo.desc --pack-dir foo foo-updated.img
Respuesta2
Si lo haces...
file logo-x.squashfs.img
Y también...
sudo fdisk logo-x.squashfs.img
Luego 'p' para imprimir la información de la partición. Eso puede ser de alguna ayuda.
¿También podría ser mejor simplemente montar el archivo .img y agregar archivos a cualquier partición que necesite?
lsblk
sudo losetup --find logo-x.squashfs.img
lsblk
Ahora puede ver en qué dispositivo se encuentra el archivo .img (por ejemplo: /dev/loop6)
sudo mount /dev/loop6 /mnt
Respuesta3
Es posible crear una máquina QEMU y luego cargar esas imágenes en la máquina QEMU, donde aparecerán como un disco. Manipule los archivos en ese disco a voluntad y permanecerán así cuando desmonte el disco.
Para imágenes de calabazas, el proceso será un poco diferente. Podrías usar eldescomprimidosherramienta. ver esto parainformación detallada.
Básicamente es así (para sistemas de archivos squashfs):
unsquashfs /live/image/livefs.squashfs
touch modified-this.file
mksquashfs squashfs-root/ livefs.squashfs -noappend -always-use-fragments