ファイルから「.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

関連情報