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

  • rsync obvykle kontroluje části souborů, aby optimalizoval aktualizace, ale ne, pokud jsou oba zjevně lokální (např. na nfs). Chcete-li ji vynutit, přidejte --no-W. K emulaci systémových hodin pomocí LD_PRELOAD existuje libfaketime a faketime nástroj not setuid).
  • Ahoj, právě jsem publikoval novou verzi schilytools. Zahrnuté vylepšené mkisofs zahrnuje podporu reprodukovatelných časových razítek. Přečtěte si aktualizovanou odpověď.

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 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *