W zautomatyzowanym procesie tworzony jest plik iso z mkisofs. Nawet jeśli oryginalne dane są dokładnie takie same, wynikowe pliki iso nie są takie same (ich md5sum zmienia się). Ponieważ rsync --checksum wynik, nie podoba mi się, że „to samo iso” jest oczywiście przesyłane ponownie za każdym razem. Spodziewam się, że główną różnicą będą głównie sygnatury czasowe.

Czy jest jakiś przełącznik libfaketime do generowania iso przez mkisofs to rzeczywiście byłoby to samo.

Nie wiem, czy liczą się tylko sygnatury czasowe? Porównałem wynikowe pliki iso z ich xxd isofile wyjściem w następujący sposób:

diff --side-by-side --suppress-common-lines <(xxd a.iso) <(xxd b.iso ) 

i wydaje się, że jest tylko 51 wierszy reprezentujących 16 bajtów (czyli około 800 bajtów różnicy) w innym dokładnie tym samym pliku.

Polecenie użyte do wygenerowania tego iso to z grubsza to:

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: Czy brakuje mi przełącznika parametru wiersza poleceń z rsync, który sprawdza sumę kontrolną dla ~ 1 MB fragmentów dużych plików, aby zapobiec ponownemu transferowi, gdy w moim przypadku tylko jakieś 800 bajtów się różni?

Komentarze

  • rsync zwykle sprawdza części plików, aby zoptymalizować aktualizacje, ale nie, jeśli oba są pozornie lokalne (np. w nfs). Dodaj --no-W, aby to wymusić. Istnieje libfaketime i faketime narzędzie do emulacji zegara systemowego za pomocą LD_PRELOAD (jeśli not setuid).
  • Cześć, właśnie opublikowałem nową wersję schilytools. Dołączone ulepszone mkisofs obejmują obsługę odtwarzalnych znaczników czasu. Zobacz zaktualizowaną odpowiedź.

Odpowiedź

Najpierw ważna uwaga: nie używaj genisoimage ponieważ jest to wadliwa odmiana mkisofs z maja 2004 r.

Do maja 2007 r. wiele błędów specyficznych dla Debiana zostały dodane i od tego czasu są martwe.

Ważne jest, aby wiedzieć, że genisoimage tworzy wadliwe obrazy systemu plików, które w pewnym momencie mogą nie być już akceptowane przez Twój system operacyjny …

Oficjalny mkisofs jest jednak nadal aktywnie obsługiwany i naprawiany wiele błędów niezwiązanych z Debianem w sierpniu 2006 r. Obecnie nie są znane żadne błędy.

A teraz do twojego problemu: używasz -R (Rock Rigde) i to dodaje UNIX jak znaczniki czasu do metadanych plików. To jest problem numer 1 ….

Innym problemem jest to, że superblok systemu plików ISO-9660 (oficjalnie nazywany podstawowym_deskryptorem) zawiera datę utworzenia i datę modyfikacji. Tym ostatnim można sterować za pomocą opcji -modification-date.

Jeśli uważasz, że jest to naprawdę potrzebna funkcja, mógłbym dodać podobną opcję dla daty utworzenia. Wtedy jednak nadal będziesz potrzebować opcji, aby powiedzieć części formatowania Rock Ridge, aby używała daty modyfikacji plików zamiast czasu ostatniego dostępu do odczytu.

Często aktualizowane wersje oryginalnego źródła są częścią schilytools archiwum, które można pobrać z: http://sourceforge.net/projects/schilytools/files/

W najnowszym tarballu schilytools wprowadzono obsługę repordukowalnych obrazów systemu plików ISO-9660. Pobierz / skompiluj / zainstaluj schily-2020-03-27.tar.bz2.

Jest kilka nowych opcji:

  • -noatime mówi mkisofs, aby zarchiwizować czas modyfikacji jako atime.

  • -creation-date ustawia datę utworzenia w PVD

  • -expiration-date ustawia datę wygaśnięcia w PVD

  • -effective-date ustawia datę wejścia w życie w PVD

  • -reproducible-date ustawia wszystkie czasy oprócz -effective-date i dodatkowo -noatime.

Działa to dla zwykłych obrazów systemu plików ISO-9660, a także dla obrazów zawierających Rock Ridge i UDF. Zobacz ostatnią stronę podręcznika pod adresem: http://schilytools.sourceforge.net/man/man8/mkisofs.8.html

Twój zaktualizowany wiersz poleceń wyglądałby w ten sposób :

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 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *