我正在使用 复制一个大文件scp
,然后意识到目标可能没有足够的空间来完成复制。有没有办法可以暂停复制(可能要暂停几个小时),然后稍后再恢复?此外,如果复制失败(no space left on device
),我是否可以在清理一些空间后恢复复制?
(请注意,scp
已在运行;使用其他程序等解决方案将不起作用。)
答案1
您可以使用 SIGSTOP 暂停进程,然后使用 SIGCONT 继续进程。(请参阅 了解kill -l
信号列表并使用ps
来获取进程 ID)。
但是,这很可能行不通。例如,如果在源和目标之间有一个路由器,它会注意到并“清理”死连接。大多数 SOHO 路由器似乎都这样做,因为清理连接意味着更少的内存使用。(因此他们可以构建更便宜的路由器)。
如果发生这种情况,您将需要使用 scp 再次复制,或者使用 rsync。
Rsync 的优点是它会比较已经存在的文件,而不会不必要地复制数据。在你的情况下,它应该检测到已经存在的、部分上传的文件,并且只上传文件的剩余部分
语法如下rsync -v -e ssh /home/my_file [email protected]:~
-v 表示详细。-e“ssh 选项”指定 ssh 作为远程 shell。
如果您的数据是可压缩的,那么您可能需要添加-z
以压缩数据。