我有一个目录,想
rsync
通过 1Gb LAN 传输到另一台机器。rsync 命令是
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded --rsh=/usr/bin/ssh root@机器。当地的:源目录 目的目录
这个427GB的目录包含470571个子目录和4476474个文件。
rsync 一个周末都没能完成。
我如何估计 rsync 需要多长时间?
两台机器的操作系统都是CentOS 7。
答案1
假设这是一个大的档案,它可以按顺序复制。1 Gb 链接,假设加上开销,传输将获得其中的 70%。
You have: (.7 / 8) GB /s
You want: hr / 427 GB
reciprocal conversion
* 1.3555556
/ 0.73770492
但它花费的时间远超过一个半小时。由于有大量小文件,元数据 IO 占据了传输时间的大部分,而且这些文件的平均大小都比较小:
You have: 427 GB / 4476474
You want: kB
* 95.387575
/ 0.010483546
假设 rsync 必须对每个文件或目录执行一次 IO 来检查元数据,并执行另一次 IO 来复制元数据。您没有描述存储,但说了 SATA 旋转器的最坏情况,因此 50 IOPS。
You have: 50 / s
You want: hr / (2 * 5000000)
reciprocal conversion
* 55.555556
/ 0.018
如果您说在第三天就停止了,那么两天半的时间实际上已经很短了。
我的猜测会有很多错误:系统负载、存储能力、rsync 算法对这么多文件的表现如何、目标中删除了多少文件。但它有助于接近完成的工作量级,然后与系统的限制进行比较。
关于如何更快地复制:复制档案或图像,而不是文件。文件元数据要少得多,并且是顺序复制。例如,拍摄 LVM 快照,然后通过dd
网络传输整个文件系统。不像 rsync 那样灵活,只能复制整个卷。
答案2
包括选项-v
和--progress
这将在复制过程进行时显示倒计时器。
user@ubuntu:/opt/$ rsync -v --progress test.iso /tmp/
test.iso
1,459,486,720 100% 51.41MB/s 0:00:27 (xfr#1, to-chk=0/1)
sent 1,459,843,134 bytes received 35 bytes 53,085,206.15 bytes/sec
total size is 1,459,486,720 speedup is 1.00
在此示例中,复制过程将需要 27 秒(0:00:27
)才能完成。倒计时从 27 秒(复制进度 0%)开始,一直倒计时到零秒(复制进度 100%)。完成后,会重新显示 27 秒,表示整个过程总共需要 27 秒。
另一个选择是通过管道rsync
将命令传递给pv
命令
参考:这里
答案3
估计是(收集文件信息的时间)+(写入数据的时间)。
收集文件信息的时间:
检查ls -lR >/dev/null
文件。这是对每个文件所需时间的一个很好的估计lstat()
。
写入数据的时间:
写入时间通常比读取时间慢,因此请使用 测量目标处的写入速度dd bs=8k count=53375000 if=/dev/zero of=filename.data
。(计数乘以 8k 约为 427GB)
您还可以将传输时间考虑在内,但 1G 链路可能比驱动器写入速度更快,因此它不再是影响因素。当然,如果链路比写入速度慢(例如 9600 波特调制解调器),则这将是决定性因素。