I en automatiserad process skapas en isofil med mkisofs
. Även eftersom originaldata är exakt desamma är de resulterande isofilerna inte desamma (deras md5sum
ändras). Eftersom jag rsync --checksum
resultatet, ogillar jag att ”samma iso” naturligtvis överförs varje gång. Jag förväntar mig att mestadels tidsstämplar är den största skillnaden.
Finns det någon libfaketime
build-switch för att generera en iso via mkisofs
det skulle verkligen vara detsamma.
Jag vet inte om bara tidsstämplar spelar roll? Jag har jämfört de resulterande isofilerna med deras xxd isofile
-utdata så här:
diff --side-by-side --suppress-common-lines <(xxd a.iso) <(xxd b.iso )
och det verkar bara finnas 51 rader som representerar 16 byte (så ungefär 800 byte av skillnad) i den andra exakt samma filen.
Kommandot som används för att generera denna iso i fråga är ungefär detta: ”>
BS: Saknar jag en kommandoradsparametraromkopplare med rsync
som gör kontrollsummning för ~ 1 MB bitar av stora filer för att förhindra återöverföring när som i mitt fall är det bara cirka 800 byte som skiljer sig åt?
Kommentarer
Svar
Först en viktig anmärkning: Använd inte genisoimage
eftersom det är en defekt variant av en mkisofs
från maj 2004.
Under tiden fram till maj 2007, många Debianspecifika buggar har lagts till och sedan dess är den död.
Det viktiga att veta här är att genisoimage
skapar defekta filsystembilder som någon gång kanske inte längre accepteras av ditt operativsystem …
Den officiella mkisofs
underhålls dock fortfarande aktivt och fixade många fel som inte är Debian-specifika i augusti 2006. Det finns för närvarande inga kända buggar.
Nu till ditt problem: Du använder -R (Rock Rigde) och detta lägger till UNIX
som tidsstämplar till filens metadata. Detta är problem nummer 1 ….
Det andra problemet är att ISO-9660-filsystemets superblock (officiellt kallat primär_descriptor) innehåller skapandedatum och modifieringsdatum. Det senare kan styras via alternativet -modification-date
.
Om du tror att det här är en verkligen nödvändig funktion kan jag lägga till ett liknande alternativ för skapelsedatumet. Då skulle du dock fortfarande behöva ett alternativ för att berätta för Rock Ridge-formateringsdelen att använda ändringsdatumet för filerna istället för tiden för den senaste läsbehörigheten.
Ofta uppdaterade versioner av den ursprungliga källan ingår i schilytools
tarball som kan hämtas från: http://sourceforge.net/projects/schilytools/files/
Den senaste schilytools tarball introducerade stöd för reporducible ISO-9660 filsystembilder. Hämta / kompilera / installera schily-2020-03-27.tar.bz2.
Det finns några nya alternativ:
-
-noatime
säger tillmkisofs
att arkivera ändringstiden när som helst. -
-creation-date
ställer in skapande datum i PVD -
-expiration-date
ställer in utgångsdatum i PVD -
-effective-date
anger effektdatum i PVD -
-reproducible-date
ställer in alla tider utom för-effective-date
och-noatime
.
Detta fungerar för vanilj ISO-9660-filsystembilder liksom för bilder som innehåller Rock Ridge
och UDF
. Se den senaste mansidan på: http://schilytools.sourceforge.net/man/man8/mkisofs.8.html
Din uppdaterade kommandorad skulle se ut så här :
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
--no-W
för att tvinga det. Det finns ettlibfaketime
ochfaketime
verktyg för att emulera systemklockan medLD_PRELOAD
inte setuid).schilytools
. Den inkluderade förbättrademkisofs
innehåller stöd för reproducerbara tidsstämplar. Se det uppdaterade svaret.