不良ネットワークを介したブロックデバイスのコンテンツチャンク

不良ネットワークを介したブロックデバイスのコンテンツチャンク

/dev/sdaシステムの唯一のディスクです。別のサーバーに元の画像として保存したい。ネットワークが途切れて一度に失敗しました。

たとえば、急流は可能ですか?

ベストアンサー1

最も効率的な方法は、中断された場所で送信を再開することです。

#!/bin/bash

source_disk=/dev/sda
host=1.2.3.4
host_image=/foo/bar.img

bytes_transferred() {
  if ! ssh "$host" "test -e '$host_image'"; then
    echo 0
    return
  fi
  ssh "$host" "stat '%s' '$host_image'"
}
bytes_total() {
  echo $(( $(blockdev --getsz $source_disk) * 512 ))
}

while (( $(bytes_transferred) < $(bytes_total) )); do
  ( dd bs=1 skip=$(bytes_transferred) count=0 2>/dev/null && cat ) < $source_disk | ssh "$host" "cat >> '$host_image'"
done

これはテストされていませんが、機能するはずです。デフォルトでは、ターゲットファイルのサイズがローカルディスクのサイズより小さい場合は繰り返し実行されます。ループが再開されるたびに、以前に停止した場所で転送が開始されます。

おすすめ記事