通过不良网络分块传输块设备的内容

通过不良网络分块传输块设备的内容

/dev/sda是系统上唯一的磁盘。我想将其保存到另一台服务器上的原始图像。我无法一次性完成,因为网络经常断开。

例如 torrent 可以吗?

答案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

这未经测试,但应该有效。当目标文件的大小小于本地磁盘的大小时,它基本上会继续循环。每次循环重新启动时,它都会从之前停止的位置开始传输

相关内容