Como criar “.img” a partir de arquivos

Como criar “.img” a partir de arquivos

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 mksquashfscomo 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

informação relacionada