Я пытаюсь изменить некоторые файлы внутри файла «.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