따라서 기본적인 문제는 다음과 같습니다. qcow2 이미지를 여러 원격 시스템에 배포해야 하는 것은 별 문제가 아닙니다. 글쎄요, 문제는 그들 중 일부가 4/5G 모뎀에 의존하고 매일 밤 5-10G를 다운로드하는 것이 작동하지 않는다는 것입니다.
아래에서 제안한 솔루션은 매우 효과적이지만 최선의 접근 방식은 아닌 것 같습니다. 다른 사람이 더 나은 해결책을 가지고 있습니까?
원격 해시:
#!/bin/bash
RX_AMT=1 # How many kilobytes to recv
RX_OFFSET=0 # How many kilobytes to skip
# Create Temporary files
FILE_HEADERS=$(tempfile)
HASH_FILE=$(tempfile)
# Read the first RX_AMT Kb from the remote file,
# And set the target download rate to RX_AMT/Second
curl -m 30 --limit-rate ${RX_AMT}k \
-C $(( $RX_OFFSET * 1024 )) \
-LD $FILE_HEADERS \
-so /dev/stdout "$@" | \
head -c $(( $RX_AMT * 1024 )) > $HASH_FILE
# Append the headers you expect will change when the file does,
# such as content-size or filename to the hash file
egrep -i 'content-length|location|filename' $FILE_HEADERS | \
grep -v '[.]boxcloud[.]' >> $HASH_FILE
# boxcloud addresses are nonces, so we dump them
# Return the sha256 of the hash file,
# trimming off everything training the hash
sha256sum < $HASH_FILE | sed -r "s/ *- *$//"
# Best effort to clean up our temporary files
rm $FILE_HEADERS $HASH_FILE 2> /dev/null
현재 저는 전체 파일을 실제로 다운로드하지 않고 원격 파일이 변경되었는지 확인하기 위해 이 스크립트의 출력을 사용하고 있습니다. 내가 다운로드하는 파일은 암호화되어 있으므로 몇 개의 블록을 확인하면 아카이브의 변경 사항을 대부분 감지할 수 있습니다. 파일 크기 자체는 나에게도 좋은 척도가 아닙니다. 이 아카이브를 어디에든 저장하지 않고 즉석에서 추출합니다(게다가 암호화되어 있으므로 길이는 blocksize_chunks 에 의해서만 달라집니다).