在两台机器之间高效传输 TB 级数据(samba 和 NFS 挂载)

在两台机器之间高效传输 TB 级数据(samba 和 NFS 挂载)

我需要将15 TB数据从一台机器传输到另一台机器,但在过去三周内已经失败了好几次,我别无选择,不知道该怎么办。

有两台机器:

  • 源计算机:使用 Samba 共享挂载点,限制较多(连接到网络外的计算机需要 VPN,如果不设置 VPN,我无法在第二台 [目标] 计算机上正常挂载共享,VPN 每 10 小时会自动断开连接)。我的 15TB 数据都在这台计算机上
  • 目标机器:使用 NFS

我尝试做的第一件事是连接到第一台机器并使用简单的 rsync:

rsync -rvz --stats --progress /mnt/samba/my_15TB_data user@second_machine:/mnt/NFS/backup

几个小时后失败了:

 rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
bash: syntax error near unexpected token `('

  12820840448  55%    9.02MB/s    0:18:31
 12820840448: command not found
 rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)

rsync: connection unexpectedly closed (731 bytes received so far) [sender]
syntax error near unexpected token `('
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
bash: syntax error near unexpected token `('

我不太明白这个错误是什么意思,但从我在网上从几个论坛收集到的信息来看,这看起来像是 rsync 在复制大量数据时产生的错误!另一种可能性是两台机器之间的连接可能已经中断。

然后我尝试尽可能地压缩我的数据,因此我选择了 7z 上最高级别的压缩:

7z a 15T_data_compressed.7z /mnt/samba/my_15TB_data -mx9

这一切都进行得很顺利,但是在 7zip 进程花费了 460 小时的 CPU 时间后,该进程被机器管理员强制终止。我意识到我正在使用机器上所有可用的内核,因此在仅仅压缩文件就如此大量使用资源之后,管理员有权这样做。

我该怎么做才能有效地传输我的数据?更具体地说,我正在寻找一种方法,可以让我恢复转会的可能性以防万一出现问题。例如,在上面使用 rsync 的情况下,我可以看到已经传输了大量数据。

使用 VPN(每 10 小时自动断开连接一次)安装 samba 共享并以某种方式将文件夹镜像到 NFS 上是否更好?这样的事情可能吗?它会更快吗?

顺便说一下,两台机器之间的平均传输速度为 12 MB/s。这是位于两个不同国家的两台不同的机器。

答案1

首先,错误在 rsync 中,您引用的内容似乎是您将内容粘贴到了终端中。这不是原始错误消息。

您粘贴到终端的原始消息表明连接由于某种原因(如重启、网络问题或类似情况)而关闭。但 rsync 应该能够恢复。

只需运行

rsync -rvz --stats --progress /mnt/samba/my_15TB_data user@second_machine:/mnt/NFS/backup

再次,它会检查文件的状态,比较时间戳和大小,并忽略源端和目标端具有相同大小和时间戳的任何文件。这个过程需要一些时间,但除非有大量非常小的文件,否则它会比重新传输文件更快。

通常,您可以使用 rsync 根据需要多次恢复;它是一种相当强大的文件传输机制。

相关内容