V automatizovaném procesu se vytvoří soubor ISO s mkisofs
. Jelikož jsou původní data přesně stejná, výsledné soubory ISO nejsou stejné (jejich md5sum
změny). Jelikož jsem rsync --checksum
výsledek, nelíbí se mi, že „stejný iso“ je samozřejmě vždy přenesen. Očekávám, že hlavním rozdílem budou hlavně časová razítka.
Existuje nějaký libfaketime
přepínač pro generování iso přes mkisofs
to by skutečně bylo stejné.
Nevím, jestli záleží jen na časových známkách? Výsledné iso soubory jsem porovnal s jejich xxd isofile
výstupem takto:
diff --side-by-side --suppress-common-lines <(xxd a.iso) <(xxd b.iso )
a zdá se, že existují pouze 51 řádků představujících 16 bajtů (tedy zhruba 800 bajtů rozdílu) v jiném přesně stejném souboru.
Příkaz použitý ke generování tohoto iso je zhruba tento:
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: Chybí mi přepínač parametru příkazového řádku s rsync
, který kontroluje součet ~ 1 MB bloků velkých souborů, aby se zabránilo opětovnému přenosu, když je v mém případě se liší jen asi 800 bytů?
Komentáře
Odpověď
Nejprve důležitá poznámka: Nepoužívejte genisoimage
protože jde o vadnou variantu mkisofs
od května 2004.
V období do května 2007 bylo v systému Debian spousta chyb byly přidány a od té doby je mrtvý.
Zde je důležité vědět, že genisoimage
vytváří vadné obrazy souborového systému, které již někdy nemusí být akceptovány vaším operačním systémem …
Oficiální mkisofs
je však stále aktivně udržován a opraven v srpnu 2006 spoustou specifických chyb jiných než Debian. V současné době nejsou známy chyby.
Nyní k vašemu problému: Používáte -R (Rock Rigde) a toto do souborů přidává UNIX
jako časová razítka metadata. Toto je problém číslo 1 ….
Druhým problémem je, že superblok souborového systému ISO-9660 (oficiálně nazývaný primary_descriptor) obsahuje datum vytvoření a datum úpravy. Ten lze ovládat pomocí možnosti -modification-date
.
Pokud si myslíte, že se jedná o skutečně potřebnou funkci, mohl bych přidat podobnou možnost pro datum vytvoření. Pak byste však stále potřebovali možnost sdělit části formátování Rock Ridge, aby místo data posledního přístupu ke čtení použila datum úpravy souborů.
Často aktualizované verze původního zdroje jsou součástí schilytools
tarball, který lze získat z: http://sourceforge.net/projects/schilytools/files/
Aktuálně nejnovější schilytools tarball představil podporu pro přenositelné obrazy souborového systému ISO-9660. Načtěte, zkompilujte / nainstalujte schily-2020-03-27.tar.bz2.
Existuje několik nových možností:
-
-noatime
říkámkisofs
archivovat čas modifikace jako v době. -
-creation-date
nastavuje datum vytvoření v PVD -
-expiration-date
nastavuje datum vypršení platnosti v PVD -
-effective-date
nastavuje datum účinnosti v PVD -
-reproducible-date
nastaví všechny časy kromě-effective-date
a-noatime
navíc.
Toto funguje pro obrázky souborového systému ISO-9660 pro vanilku i pro obrázky, které obsahují Rock Ridge
a UDF
. Podívejte se na nedávnou manuálovou stránku na adrese: http://schilytools.sourceforge.net/man/man8/mkisofs.8.html
Váš aktualizovaný příkazový řádek by vypadal takto :
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
. K emulaci systémových hodin pomocíLD_PRELOAD
existujelibfaketime
afaketime
nástroj not setuid).schilytools
. Zahrnuté vylepšenémkisofs
zahrnuje podporu reprodukovatelných časových razítek. Přečtěte si aktualizovanou odpověď.