如何从文件创建“.img”

如何从文件创建“.img”

我正在尝试更改“.img”文件中的一些文件。

例子:

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

为此,我使用 7-Zip 提取了“.img”并进行了所需的更改。不过,使用 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 机器中,它们将在其中显示为磁盘。随意操作该磁盘上的文件,当您卸载磁盘时它们将保持原样。

对于挤压图像,过程会有点不同。你可以使用取消压缩文件系统工具。请参阅此详细资料

基本上是这样的(对于squashfs文件系统):

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

相关内容