In einem automatisierten Prozess wird eine ISO-Datei mit mkisofs
erstellt. Auch wenn die Originaldaten genau gleich sind, sind die resultierenden ISO-Dateien nicht gleich (ihre md5sum
-Änderungen). Da ich rsync --checksum
das Ergebnis bin, mag ich es nicht, dass die „gleiche ISO“ natürlich jedes Mal erneut übertragen wird. Ich erwarte, dass hauptsächlich Zeitstempel den Hauptunterschied ausmachen.
Gibt es einen libfaketime
eingebauten Schalter, um eine ISO über mkisofs
das wäre ja das gleiche.
Ich weiß nicht, ob nur Zeitstempel wichtig sind? Ich habe die resultierenden ISO-Dateien mit ihrer xxd isofile
Ausgabe wie folgt verglichen:
diff --side-by-side --suppress-common-lines <(xxd a.iso) <(xxd b.iso )
und es scheint nur solche zu geben 51 Zeilen, die 16 Bytes (also ungefähr 800 Bytes Unterschied) in der sonst genau gleichen Datei darstellen.
Der Befehl, der zum Generieren dieser fraglichen ISO verwendet wird, lautet ungefähr folgendermaßen:
genisoimage -o "file.iso" -b isolinux/isolinux.bin \ -c isolinux/boot.cat -no-emul-boot \ -boot-load-size 4 -boot-info-table \ -J -R -v -T -V "CDLABEL" "datadir/"
BS: Fehlt mir ein Befehlszeilen-Parameer-Schalter mit rsync
, der eine Prüfsumme für ~ 1 MB große Dateien erstellt, um die erneute Übertragung zu verhindern, wenn als in meinem Fall unterscheiden sich nur etwa 800 Bytes?
Kommentare
- rsync überprüft normalerweise Teile von Dateien, um Aktualisierungen zu optimieren, jedoch nicht, wenn beide scheinbar lokal sind (z. B. auf nfs). Fügen Sie
--no-W
hinzu, um dies zu erzwingen. Es gibt ein Dienstprogrammlibfaketime
undfaketime
zum Emulieren der Systemuhr mithilfe vonLD_PRELOAD
(if nicht setuid). - Hallo, ich habe gerade eine neue Version von
schilytools
veröffentlicht. Das mitgelieferte erweitertemkisofs
bietet Unterstützung für reproduzierbare Zeitstempel. Siehe die aktualisierte Antwort.
Antwort
Zuerst ein wichtiger Hinweis: Verwenden Sie nicht genisoimage
, da es sich um eine fehlerhafte Variante eines mkisofs
von Mai 2004 handelt.
In der Zeit bis Mai 2007 gab es viele Debian-spezifische Fehler wurden hinzugefügt und seitdem ist es tot.
Wichtig hierbei ist, dass genisoimage
fehlerhafte Dateisystem-Images erstellt, die zu einem bestimmten Zeitpunkt möglicherweise nicht mehr akzeptiert werden von Ihrem Betriebssystem …
Die offizielle mkisofs
wird jedoch weiterhin aktiv gepflegt und hat im August 2006 viele nicht Debian-spezifische Fehler behoben. Derzeit sind keine bekannt Fehler.
Nun zu Ihrem Problem: Sie verwenden -R (Rock Rigde) und dies fügt den Metadaten der Dateien UNIX
ähnliche Zeitstempel hinzu. Dies ist Problem Nummer 1 ….
Das andere Problem besteht darin, dass der Superblock des ISO-9660-Dateisystems (offiziell als Primärbeschreibung bezeichnet) das Erstellungsdatum und das Änderungsdatum enthält. Letzteres kann über die Option -modification-date
gesteuert werden.
Wenn Sie der Meinung sind, dass dies eine wirklich benötigte Funktion ist, könnte ich eine ähnliche Option für das Erstellungsdatum hinzufügen. Dann benötigen Sie jedoch immer noch eine Option, um den Rock Ridge-Formatierungsteil anzuweisen, das Änderungsdatum der Dateien anstelle des Zeitpunkts des letzten Lesezugriffs zu verwenden.
Häufig aktualisierte Versionen der Originalquelle sind Teil von Der Tarball schilytools
, der abgerufen werden kann von: http://sourceforge.net/projects/schilytools/files/
Der derzeit neueste Schilytools-Tarball hat die Unterstützung für wiederbeschaffbare ISO-9660-Dateisystem-Images eingeführt. Bitte holen / kompilieren / installieren Sie schily-2020-03-27.tar.bz2.
Es gibt einige neue Optionen:
-
-noatime
weistmkisofs
an, die Änderungszeit als Zeitpunkt zu archivieren. -
-creation-date
legt das Erstellungsdatum in der PVD fest -
-expiration-date
legt das Ablaufdatum in der PVD fest -
-effective-date
legt das Datum des Inkrafttretens in der PVD fest -
-reproducible-date
setzt alle Zeiten außer-effective-date
und-noatime
zusätzlich.
Dies funktioniert sowohl für Vanilla ISO-9660-Dateisystem-Images als auch für Images, die Rock Ridge
und . Die aktuelle Manpage finden Sie unter: http://schilytools.sourceforge.net/man/man8/mkisofs.8.html
Ihre aktualisierte Befehlszeile würde so aussehen :
mkisofs -b isolinux/isolinux.bin \ -c isolinux/boot.cat -no-emul-boot \ -boot-load-size 4 -boot-info-table \ -J -R -v -T -V "CDLABEL" \ -reproducible-date=20200327 "datadir/" > file.iso