![通过不良网络分块传输块设备的内容](https://linux22.com/image/59060/%E9%80%9A%E8%BF%87%E4%B8%8D%E8%89%AF%E7%BD%91%E7%BB%9C%E5%88%86%E5%9D%97%E4%BC%A0%E8%BE%93%E5%9D%97%E8%AE%BE%E5%A4%87%E7%9A%84%E5%86%85%E5%AE%B9.png)
/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
这未经测试,但应该有效。当目标文件的大小小于本地磁盘的大小时,它基本上会继续循环。每次循环重新启动时,它都会从之前停止的位置开始传输