我正在将数据从一台服务器存档到另一台服务器。最初我开始了一项rsync
工作。它花了 2 周时间才为 5 TB 的数据建立文件列表,又花了一周时间传输 1 TB 的数据。
然后我不得不终止这项工作因为我们需要在新服务器上停机一段时间。
我们已经同意将其打包,因为我们可能不需要再次访问它。我原本想将其分成 500 GB 的块。打包之后,tar
我打算通过 将其复制过来ssh
。我使用tar
和pigz
,但速度仍然太慢。
有没有更好的方法?我认为两台服务器都在 Redhat 上。旧服务器是 Ext4,新服务器是 XFS。
文件大小从几 kb 到几 mb 不等,5TB 中有 2400 万张 jpeg。所以我猜 15TB 中有大约 6000-8000 万张。
编辑:在玩了几天 rsync、nc、tar、mbuffer 和 pigz 之后。瓶颈将是磁盘 IO。因为数据分布在 500 个 SAS 磁盘和大约 2.5 亿个 jpeg 上。不过,现在我了解了所有这些将来可以使用的好工具。
答案1
tar
我使用、pigz
(并行 gzip)和获得了非常好的效果nc
。
源机器:
tar -cf - -C /path/of/small/files . | pigz | nc -l 9876
目的机器:
提取:
nc source_machine_ip 9876 | pigz -d | tar -xf - -C /put/stuff/here
保留存档:
nc source_machine_ip 9876 > smallstuff.tar.gz
如果您想查看传输速率,只需通过管道pv
即可pigz -d
!
答案2
我会坚持使用 rsync 解决方案。现代 (3.0.0+) rsync 使用增量文件列表,因此它不必在传输之前构建完整列表。因此,如果出现问题,重新启动它不需要您再次进行整个传输。按顶级或二级目录拆分传输将进一步优化这一点。(如果您的网络比驱动器慢,我会使用rsync -a -P
并添加--compress
。)
答案3
设置 VPN(如果是互联网),在远程服务器上创建某种格式的虚拟驱动器(使其成为 ext4),将其安装在远程服务器上,然后将其挂载到本地服务器上(使用 iSCSI 等块级协议),然后使用 dd 或其他块级工具进行传输。然后,您可以根据自己的方便将文件从虚拟驱动器复制到真实 (XFS) 驱动器。
两个原因:
- 没有文件系统开销,这是主要的性能问题
- 无需寻找,你正在查看两侧的顺序读/写
答案4
使用 mbuffer,如果它在安全网络上,则可以避免加密步骤。