如何在独立于 TTY 的其他 Linux 服务器上复制大文件

如何在独立于 TTY 的其他 Linux 服务器上复制大文件

实际上我试图复制另一个导演中的所有文件。文件总大小为 188GB,因此需要一些时间。

我尝试使用此命令将 Linux 服务器 A 复制到 B

nohup scp Files-from-Server-A [email protected]:tmp &

但一旦我关闭终端,它就会停止复制文件,但该进程仍显示在进程管理器中。

答案1

一般建议是使用终端多路复用器(例如tmuxscreen)并在内部运行副本,因为这提供了很大的灵活性。您可以根据需要分离/重新连接以检查操作的进展情况。

这些程序创建“虚拟”(无头)终端,这些终端显示在“真实”终端上/从“真实”终端(Linux 控制台、X 终端模拟器、ssh 连接...)获取输入。由于虚拟终端不受真实终端中断的影响(终端多路复用器在检测到 IO 设备关闭时只是停止显示输出,并继续将输出存储到其内部缓冲区中),因此内部运行的应用程序不会受到 SIGHUP 的影响。作为奖励,它们通常至少提供一些基本的文本模式窗口功能。

我不确定tmux(正在积极开发),但是GNUscreen应包含在标准 RHEL 存储库中。

答案2

scp确实检测它是否有控制 tty。如果您将其作为前台进程运行,它将显示一个进度条,但如果您将其置于后台,进度条就会消失,因此会进行一些内部检查。我会按照 @peterph 所说的那样,在 atmuxscreen会话中开始传输。我不确定使用的含义nohup,但只需保持控制终端处于活动状态即可。

由于文件太大,如果不压缩,我还会使用scp-C选项在传输中添加压缩。

如果它是一个目录,并且您经常重试相同的命令,那么您可能应该使用 rsync,它在传输文件之前首先检查文件是否不同(使用 md5 校验和)。您还可以使用该--partial选项恢复大文件传输。

rsync -avz --partial --progress --rsh=ssh Files-from-Server-A [...] user@B:/tmp/

答案3

lftp(通用终端文件传输程序)支持sftp(不支持scp,但如果您有scp,那么您ssh也很可能也支持sftp),并且它可以将传输置于后台,自动重新连接并恢复传输(在可自定义的延迟之后)失败等。

答案4

你不能用吗rsync?如此大的转移肯定会在某个地方中断,而且我不确定所提出的机制是否能够从中断的地方继续下去。

相关内容