如何從檔案建立“.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

相關內容