Estou tentando alterar alguns arquivos dentro de um arquivo “.img”.
Exemplo:
logo-x.squashfs.img
romfs-x.squashfs.img
safeEnv.img
sign.img
Para isso extraí o ".img" usando o 7-Zip e fiz as alterações necessárias. Porém, não é possível arquivar esses arquivos alterados com o 7-Zip, então procurei uma ferramenta para fazer isso, mas não consegui encontrar uma que fosse capaz de criar o ".img" como era originalmente.
Tentei usar o ImgBurn mas parece criar um arquivo diferente do original. Também tentei usar o DD, mas não consegui fazê-lo funcionar com arquivos em vez de volumes.
Por favor, como eu poderia ler o arquivo ".img" original para saber seu formato e criar um novo a partir dos novos arquivos?
Responder1
Embora você tenha descoberto que o 7-Zip pode transformar imagens squashFS em arquivos individuais, a ferramenta canônica para fazer isso provavelmente seria
rdsquashfs
:
# Unpack image `foo.img' into directory `foo':
rdsquashfs --unpack-root foo --unpack-path / foo.img
Então, depois de alterar os arquivos dentro do foo
, você pode reembalar usando
mksquashfs
:
mksquashfs foo foo-updated.img
Acredito que usar mksquashfs
como acima pode perder alguns dos metadados do arquivo de imagem original. Se isso for importante para o seu caso de uso, considere ler uma descrição da imagem original e usá-la como referência ao criar a nova imagem:
# 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
Responder2
Se você fizer...
file logo-x.squashfs.img
E também...
sudo fdisk logo-x.squashfs.img
Então 'p' para imprimir as informações da partição. Isso pode ser de alguma ajuda.
Também pode ser melhor apenas montar o arquivo .img e adicionar arquivos a qualquer partição necessária?
lsblk
sudo losetup --find logo-x.squashfs.img
lsblk
Agora você pode ver em qual bloco de dispositivo o arquivo .img está (por exemplo: /dev/loop6)
sudo mount /dev/loop6 /mnt
Responder3
É possível criar uma máquina QEMU e depois carregar essas imagens na máquina QEMU, onde aparecerão como um disco. Manipule os arquivos desse disco à vontade e eles permanecerão assim quando você desmontar o disco.
Para imagens de abóboras, o processo será um pouco diferente. Você poderia usar ounsquashfsferramenta. Veja isso parainformação detalhada.
Basicamente é assim (para sistemas de arquivos squashfs):
unsquashfs /live/image/livefs.squashfs
touch modified-this.file
mksquashfs squashfs-root/ livefs.squashfs -noappend -always-use-fragments