我正在尝试更改“.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