续传

不久前我要把一台机器上的一个VirtualBox的虚拟硬盘文件file.vdi移植到另一台机器上。手头没有移动硬盘的我选择使用sftp进行数据传输。由于需要传送的文件很大(大约60GB),这个方式会消耗不少时间;期间因为我还要携带其中一台电脑在没有网络的三维空间进行位移,我不得不在数据完全传完之前暂时中断sftp的过程然后等有了网络之后再次将两台机器建立连接继续完成操作。系统自带的sftp命令行程序不支持断点续传,于是我只好手动来做这件事。

在这个单线程的sftp情况下,断点续传很简单:我们先在接收机器上看一下已经收到多少数据,然后在发送机器上把剩余没有发送的数据发送过来,最后在接收机器上把两端数据合并即可。具体操作如下。

在接收机器上:使用`ls -l file.vdi`得到已经接受到的文件file.vdi的字节数$N。
在发送机器上:使用`tail -c +$((N+1)) file.vdi > file.tail`将尚未传送的字节写入file.tail文件。
然后仍然使用sftp把file.tail从发送机器传到接收机器上。
在接收机器上:使用`cat file.tail >> file.vdi`将第二段数据附加到早先收到的第一段数据后去。这时file.vdi就是我们期待的完整文件。

Advertisements


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s