自動化されたプロセスでは、mkisofsを使用してisoファイルが作成されます。元のデータがまったく同じである場合でも、結果のisoファイルは同じではありません(md5sumが変更されます)。結果をrsync --checksumしているので、もちろん「同じiso」が毎回再転送されるのは嫌です。主な違いはタイムスタンプだと思います。

libfaketimeビルトインスイッチはありますか>それは確かに同じでしょう。

タイムスタンプだけが重要かどうかわかりませんか?結果のisoファイルを次のようなxxd isofile出力と比較しました:

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

他のまったく同じファイルの16バイト(つまり約800バイトの違い)を表す51行。

問題のこのISOを生成するために使用されるコマンドは、おおよそ次のとおりです。

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:rsyncのコマンドラインパラメータスイッチがありません。これは、最大1MBの大きなファイルのチャンクのチェックサムを実行します。私の場合、800バイトだけが異なりますか?

コメント

  • rsyncは通常、ファイルの一部をチェックして更新を最適化しますが、両方が明らかにローカルである場合(nfsなど)はチェックしません。 --no-Wを追加して強制します。 LD_PRELOADを使用してシステムクロックをエミュレートするlibfaketimeおよびfaketimeユーティリティがあります(if setuidではありません。
  • こんにちは、schilytoolsの新しいバージョンを公開しました。含まれている拡張mkisofsには、再現可能なタイムスタンプのサポートが含まれています。更新された回答を参照してください。

回答

最初の重要な注意事項: 2004年5月のmkisofsの欠陥バリアントであるため。

2007年5月までの期間、Debian固有のバグが多数ありました。

ここで知っておくべき重要なことは、genisoimageが欠陥のあるファイルシステムイメージを作成し、それがいつか受け入れられなくなる可能性があることです。お使いのOSによって…

公式のmkisofsは、2006年8月に引き続き積極的に保守され、Debian固有ではない多くのバグが修正されています。バグ。

問題:-R(Rock Rigde)を使用しているため、ファイルのメタデータにタイムスタンプのようなUNIXが追加されます。これは問題番号1です。…

もう1つの問題は、ISO-9660ファイルシステムのスーパーブロック(正式にはprimary_descriptorと呼ばれます)に作成日と変更日が含まれていることです。後者は、オプション-modification-dateを介して制御できます。

これが本当に必要な機能であると思われる場合は、作成日に同様のオプションを追加できます。ただし、最後の読み取りアクセスの時刻ではなく、ファイルの変更日を使用するようにRockRidgeフォーマット部分に指示するオプションが必要です。

元のソースの頻繁に更新されるバージョンはの一部です。 schilytools tarballから取得できます: http://sourceforge.net/projects/schilytools/files/

現在最新のschilytoolstarballは、再現可能なISO-9660ファイルシステムイメージのサポートを導入しました。 schily-2020-03-27.tar.bz2をフェッチ/コンパイル/インストールしてください。

いくつかの新しいオプションがあります:

  • -noatimemkisofsに変更時刻を時間としてアーカイブするように指示します。

  • -creation-dateはPVDに作成日を設定します

  • -expiration-dateはPVDに有効期限を設定します

  • -effective-dateはPVDの発効日を設定します

  • -reproducible-dateは、-effective-date-noatimeを除くすべての時間を設定します。

これは、バニラISO-9660ファイルシステムイメージ、およびRock Ridgeと。 http://schilytools.sourceforge.net/man/man8/mkisofs.8.html

更新されたコマンドラインは次のようになります。 :

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 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です