![ファイルから「.img」を作成する方法](https://rvso.com/image/191782/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E3%80%8C.img%E3%80%8D%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
「.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