Ich versuche, einige Dateien in einer „.img“-Datei zu ändern.
Beispiel:
logo-x.squashfs.img
romfs-x.squashfs.img
safeEnv.img
sign.img
Dazu habe ich die „.img“-Datei mit 7-Zip entpackt und die erforderlichen Änderungen vorgenommen. Das Archivieren dieser geänderten Dateien mit 7-Zip ist allerdings nicht möglich, daher habe ich nach einem Tool dafür gesucht, konnte aber keins finden, das die „.img“-Datei in ihrer ursprünglichen Form erstellen kann.
Ich habe versucht, ImgBurn zu verwenden, aber es scheint eine andere Datei als die Originaldatei zu erstellen. Ich habe auch versucht, DD zu verwenden, aber es funktionierte nicht mit Dateien anstelle von Volumes.
Wie kann ich bitte die ursprüngliche „.img“-Datei lesen, um ihr Format herauszufinden und aus den neuen Dateien eine neue Datei erstellen?
Antwort1
Sie haben zwar herausgefunden, dass 7-Zip SquashFS-Bilder in einzelne Dateien umwandeln kann, das übliche Tool hierfür wäre jedoch wahrscheinlich
rdsquashfs
:
# Unpack image `foo.img' into directory `foo':
rdsquashfs --unpack-root foo --unpack-path / foo.img
Anschließend foo
können Sie die darin enthaltenen Dateien mit folgendem Befehl neu packen
mksquashfs
:
mksquashfs foo foo-updated.img
Ich glaube, dass bei der Verwendung mksquashfs
wie oben einige Metadaten aus der ursprünglichen Bilddatei verloren gehen können. Wenn dies für Ihren Anwendungsfall von Bedeutung ist, sollten Sie eine Beschreibung aus dem Originalbild lesen und diese beim Erstellen des neuen Bilds als Referenz verwenden:
# 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
Antwort2
Wenn Sie tun...
file logo-x.squashfs.img
Und auch...
sudo fdisk logo-x.squashfs.img
Dann 'p', um die Partitionsinformationen auszudrucken. Das kann hilfreich sein.
Wäre es vielleicht auch besser, einfach die IMG-Datei zu mounten und dort Dateien zu der Partition hinzuzufügen, die Sie benötigen?
lsblk
sudo losetup --find logo-x.squashfs.img
lsblk
Jetzt können Sie sehen, in welchem Geräteblock sich die IMG-Datei befindet (z. B.: /dev/loop6).
sudo mount /dev/loop6 /mnt
Antwort3
Es ist möglich, eine QEMU-Maschine zu erstellen und diese Bilder dann in die QEMU-Maschine zu laden, wo sie als Datenträger angezeigt werden. Bearbeiten Sie die Dateien auf diesem Datenträger nach Belieben, und sie bleiben in diesem Zustand, wenn Sie den Datenträger aushängen.
Bei Kürbisbildern ist der Vorgang etwas anders. Sie können dasunsquashfsWerkzeug. Siehe dies fürgenaue Information.
Im Wesentlichen sieht es so aus (für Squashfs-Dateisysteme):
unsquashfs /live/image/livefs.squashfs
touch modified-this.file
mksquashfs squashfs-root/ livefs.squashfs -noappend -always-use-fragments