如何估计 427GB 目录(包含 470k 个子目录和 4476k 个文件)的 rsync 需要多长时间?

如何估计 427GB 目录(包含 470k 个子目录和 4476k 个文件)的 rsync 需要多长时间?
  • 我有一个目录,想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

是时候做一些粗暴的事情了费米估计GNU 单元作为计算器。

假设这是一个大的档案,它可以按顺序复制。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 波特调制解调器),则这将是决定性因素。

相关内容