불량 네트워크를 통해 블록 장치의 콘텐츠 청크

불량 네트워크를 통해 블록 장치의 콘텐츠 청크

/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

이것은 테스트되지 않았지만 작동해야 합니다. 기본적으로 대상 파일의 크기가 로컬 디스크의 크기보다 작을 때 계속 반복됩니다. 루프가 다시 시작될 때마다 이전에 중지된 위치에서 전송이 시작됩니다.

관련 정보