자동화 프로세스 중에 .iso 파일을 사용하여 ISO 파일이 생성됩니다 mkisofs
. 심지어 원본 데이터가 완전히 동일하기 때문에 결과 iso 파일도 다릅니다( md5sum
변경 사항). 내 결과 때문에 rsync --checksum
매번 "동일한 ISO"를 재전송하는 것을 좋아하지 않습니다. 타임 스탬프가 주요 차이점이 될 것으로 예상했습니다.
동일한 방식으로 iso를 생성할 수 있는 내장 스위치가 있습니까 libfaketime
?mkisofs
타임스탬프만 중요한지 궁금합니다. 생성된 iso 파일을 아래와 같이 출력과 xxd isofile
비교했습니다 .
diff --side-by-side --suppress-common-lines <(xxd a.iso) <(xxd b.iso )
동일한 파일에는 16바이트를 나타내는 줄이 51개만 있는 것으로 보입니다(약 800바이트 차이).
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/"
rsync
BS: 내 경우 약 800바이트만 동시에 재전송되는 것을 방지하기 위해 약 1MB의 큰 파일 블록을 체크섬하는 명령줄 인수 스위치가 누락되었나요 ?
답변1
genisoimage
첫 번째 중요한 참고 사항: 이 제품은 2004년 5월에 출시된 변형이므로 사용하지 마십시오 mkisofs
.
2007년 5월 현재 데비안 특유의 버그가 대거 추가됐고 이후 사라졌다.
여기서 알아야 할 중요한 점은 genisoimage
결함이 있는 파일 시스템 이미지 생성이 때때로 운영 체제에서 더 이상 허용되지 않을 수 있다는 것입니다.
그러나 mkisofs
여전히 활발하게 유지관리되고 있으며 데비안에 국한되지 않은 수많은 버그가 2006년 8월에 수정되었습니다. 현재 알려진 버그가 없습니다.
이제 문제를 해결하려면 UNIX
파일 메타데이터에 타임스탬프를 추가하는 -R(Rock Rigde)을 사용하고 있습니다. 질문 1 입니다....
또 다른 문제는 ISO-9660 파일 시스템 수퍼블록(공식적으로는 Primary_descriptor라고 함)에 생성 날짜와 수정 날짜가 포함되어 있다는 것입니다. 후자는 옵션을 통해 제어할 수 있습니다 -modification-date
.
이것이 정말로 필요한 기능이라고 생각한다면 생성 날짜에 대해 비슷한 옵션을 추가할 수 있습니다. 그러나 마지막 읽기 액세스 시간이 아닌 파일 수정 날짜를 사용하도록 Rock Ridge 형식 지정 섹션에 지시하는 옵션이 여전히 필요합니다.
자주 업데이트되는 원본 소스 버전은 schilytools
tarball의 일부이며 다음에서 검색할 수 있습니다.http://sourceforge.net/projects/schilytools/files/
최신 schilytools tarball에는 이제 복사 가능한 ISO-9660 파일 시스템 이미지에 대한 지원이 도입되었습니다. schily-2020-03-27.tar.bz2를 획득/컴파일/설치하세요.
몇 가지 새로운 옵션이 있습니다:
-noatime
mkisofs
수정된 시간을 atime으로 아카이브하도록 지시합니다 .-creation-date
PVD에서 생성 날짜 설정-expiration-date
PVD에서 만료일 설정-effective-date
PVD에서 유효일 설정-reproducible-date
-effective-date
및 추가를 제외한 모든 시간을 설정합니다-noatime
.
이는 일반 ISO-9660 파일 시스템 이미지와 Rock Ridge
및 가 포함된 이미지 에 적용됩니다 UDF
. 가장 최근 매뉴얼 페이지를 참조하십시오: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
답변2
사람들은 전환하다소리조~처럼사람들은 mkisof를 피하고 싶어할 수도 있습니다.genisoimage는 더 이상 개발되지 않는 것 같습니다.
xorriso 출력을 재현 가능하게 만들려면 SOURCE_DATE_EPOCH라는 환경 변수를 1970년 1월 1일 이후의 초 수와 동일한 값으로 설정하십시오.
xorriso 또는 해당 제품을 직접 사용할 수 있습니다.mkisofs 호환 모드는 xorrisofs라고 합니다..
SOURCE_DATE_EPOCH=0 xorrisofs YOUR-MKISOFS-ARGS
답변3
제공된 답변은 저에게 효과적이지 않았지만 일부 친구의 도움으로 xorriso를 사용하여 임의 폴더에서 복사 가능한 ISO 이미지를 만드는 방법을 찾았습니다.
날짜는 환경 변수로 내보내야 합니다. 파일 권한은 사람마다 다를 수 있으므로 우리는 그들에게 뭔가를 하도록 강요합니다. preparer_id
기본적으로 xorriso의 전체 이름과 버전이 포함되어 있기 때문에 다릅니다. uid
/는 gid
시스템마다 다를 수도 있습니다.
이 스크립트는 폴더 경로를 시작 매개변수 또는 프롬프트 입력으로 받아들입니다. 아직 OS 이미지 생성을 시도하지 않았습니다.
export SOURCE_DATE_EPOCH="$(date -d20010101 -u +%s)"
output_filename=result.iso
file_mode=0444
folder="$1"
while [ ! -d "$folder" ]; do
[ -z "$folder" ] || printf "'%s' not a directory?\n" "$folder"
read -p "Enter path to dir containing files to pack: " folder
done
list="$(mktemp)"
(cd "$folder"; for f in *; do printf "%s\n" "$f=$PWD/$f"; done) \
| LC_ALL=C sort >"$list"
xorriso \
-preparer_id xorriso \
-volume_date 'all_file_dates' "=$SOURCE_DATE_EPOCH" \
-as mkisofs \
-iso-level 3 \
-graft-points \
-full-iso9660-filenames \
-joliet \
-file-mode $file_mode \
-uid 0 \
-gid 0 \
-path-list "$list" \
-output "$output_filename"
rm -f "$list"