我正在将数据从一台服务器归档到另一台服务器。 最初我开始了一个rsync
工作。 花了2周的时间才为5TB的数据创build文件列表,另外一个星期要传输1TB的数据。
然后我不得不杀了这个工作,因为我们需要在新的服务器上停机。
我们已经达成一致意见,因为我们可能不需要再次访问它。 我正在考虑把它分成500GB大块。 之后我tar
它然后我要通过ssh
复制它。 我正在使用tar
和pigz
但它仍然太慢。
有没有更好的方法来做到这一点? 我认为这两个服务器都在Redhat上。 旧服务器是Ext4,新服务器是XFS。
文件大小从几kb到几MB,在5TB中有2400万jpeg。 所以我估计大概有6千万到8千万的15TB。
编辑:在与rsync,NC,焦油,mbuffer和pigz玩了几天之后。 瓶颈将是磁盘IO。 由于数据分布在500个SAS磁盘和大约2.5亿个JPEG文件中。 但是,现在我了解了以后可以使用的所有这些好工具。
我用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
!
我会坚持rsync解决scheme。 现代(3.0.0以上)rsync使用增量文件列表,所以它不必在传输之前build立完整列表。 因此重新启动它不会要求您在发生故障时再次进行整个传输。 拆分每个顶级或二级目录的传输将进一步优化。 (如果你的networking比你的驱动器慢,我会使用rsync -a -P
并添加--compress
。)
build立一个VPN(如果它的互联网),在远程服务器上创build某种格式的虚拟驱动器(使其成为ext4),将其安装在远程服务器上, 然后将其安装在本地服务器上(使用块级协议,如iSCSI ),并使用dd或其他块级别的工具来进行传输。 然后,您可以将虚拟驱动器上的文件复制到实际(XFS)驱动器上,方便您使用。
两个原因:
如果旧的服务器正在退役,并且文件可能会脱机几分钟,那么将驱动器拉出旧的服务器并将它们连接到新的服务器,挂载它们(现在恢复联机)并复制文件到新的服务器本地磁盘。
使用mbuffer,如果它在一个安全的networking上,你可以避免encryption步骤。
(许多不同的答案可以工作,下面是另一个答案。)
使用find -type f
生成文件列表(这应该在几个小时内完成),将其拆分成小块,然后使用rsync --files-from=...
传输每个块。
你有没有考虑过sneakernet? 就这点而言,我的意思是将所有东西都转移到同一个驱动器上,然后将这个驱动器转移到其他位置
大约在一个月前,三星推出了16TB硬盘(技术上,这是15.36TB),这也是一个SSD: http : //www.theverge.com/2015/8/14/9153083/samsung-worlds-largest-hard -drive-16TB
我认为这个驱动就是为了这个。 您仍然需要复制所有的文件,但是由于您没有networking延迟,并且可能使用SATA或类似的快速技术,因此应该快很多。
如果在重复数据删除时有机会获得高成功率,我会使用像borgbackup或阁楼。
如果没有,请检查netcat + tar + pbzip2解决scheme,根据您的硬件调整压缩选项 – 检查是什么瓶颈(CPU?networkingIO?)。 pbzip2将很好地跨越所有的CPU,提供更好的性能。
您正在使用RedHat Linux,所以这不适用,但作为另一种select:
我已经很成功地使用ZFS来保存数百万个文件,因为inode不是问题。
如果这是您的select,那么您可以拍摄快照并使用zfs发送增量更新。 使用这种方法传输以及存档数据已经取得了很大的成功。
ZFS主要是Solaris文件系统,但可以在Illumos(Sun的OpenSolaris的开放源代码叉)中find。 我知道在BSD和Linux下使用ZFS(使用FUSE?)也有一些运气 – 但我没有经验。
在目标机器上启动一个rsync
守护进程。 这将加速传输过程。
你可以用tar和ssh来完成,就像这样:
tar zcf - <your files> | ssh <destination host> "cat > <your_file>.tar.gz"
或者,如果您想保留单个文件:
tar zcf - <your files> | ssh <destination host> "tar zxf -"