Как создать «.img» из файлов

Как создать «.img» из файлов

Я пытаюсь изменить некоторые файлы внутри файла «.img».

Пример:

logo-x.squashfs.img
romfs-x.squashfs.img
safeEnv.img
sign.img

Для этого я извлек ".img" с помощью 7-Zip и внес необходимые изменения. Архивация этих измененных файлов с помощью 7-Zip невозможна, поэтому я искал инструмент, который мог бы это сделать, но не смог найти тот, который способен создать ".img" в том виде, в котором он был изначально.

Я пробовал использовать ImgBurn, но он, похоже, создает другой файл, нежели оригинальный. Также пробовал использовать DD, но не смог заставить его работать с файлами вместо томов.

Пожалуйста, как мне прочитать исходный файл «.img», чтобы узнать его формат и создать новый из новых файлов?

решение1

Хотя вы и обнаружили, что 7-Zip может преобразовывать образы squashFS в отдельные файлы, каноническим инструментом для этого, вероятно, будет rdsquashfs:

# Unpack image `foo.img' into directory `foo':
rdsquashfs --unpack-root foo --unpack-path / foo.img

Затем, после изменения файлов внутри foo, вы можете перепаковать их, используя mksquashfs:

mksquashfs foo foo-updated.img

Я считаю, что использование mksquashfsвышеописанного может привести к потере некоторых метаданных из исходного файла изображения. Если это имеет значение для вашего варианта использования, рассмотрите возможность чтения описания из исходного изображения и использования его в качестве ссылки при создании нового изображения:

# 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

решение2

Если вы это сделаете...

file logo-x.squashfs.img

А также...

sudo fdisk logo-x.squashfs.img

Затем 'p', чтобы распечатать информацию о разделе. Это может помочь.

Также, может быть, лучше просто смонтировать файл .img и добавить файлы в любой раздел, который вам нужен?

lsblk
sudo losetup --find logo-x.squashfs.img
lsblk

Теперь вы можете увидеть, в каком блоке устройства находится файл .img (например: /dev/loop6)

sudo mount /dev/loop6 /mnt

решение3

Можно создать машину QEMU, а затем загрузить эти образы в машину QEMU, где они появятся как диск. Манипулируйте файлами на этом диске по своему усмотрению, и они останутся такими, когда вы размонтируете диск.

Для изображений сквошей процесс будет немного другим. Вы можете использоватьunsquashfsинструмент. Смотрите это дляПодробная информация.

По сути это выглядит так (для файловых систем squashfs):

unsquashfs /live/image/livefs.squashfs
touch modified-this.file
mksquashfs squashfs-root/ livefs.squashfs -noappend -always-use-fragments

Связанный контент