大規模なリモートファイルと低速ネットワークを処理するための戦略

大規模なリモートファイルと低速ネットワークを処理するための戦略

したがって、基本的な問題は次のとおりです。 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 によってのみ異なります)。

ベストアンサー1

おすすめ記事