当备份将文件从一台服务器移动到另一台服务器时,df 的结果每隔几秒就会发生不可思议的变化。源主机正在运行 rsync。在目标主机上,我每隔几秒运行以下命令:
echo `date` `df|grep md0`
结果如下:
Sat Jun 29 23:57:12 CEST 2013 /dev/md0 4326425568 579316100 3527339636 15% /MD0
Sat Jun 29 23:57:14 CEST 2013 /dev/md0 4326425568 852513700 3254142036 21% /MD0
Sat Jun 29 23:57:15 CEST 2013 /dev/md0 4326425568 969970340 3136685396 24% /MD0
Sat Jun 29 23:57:17 CEST 2013 /dev/md0 4326425568 1255222180 2851433556 31% /MD0
Sat Jun 29 23:57:20 CEST 2013 /dev/md0 4326425568 1276006720 2830649016 32% /MD0
Sat Jun 29 23:57:24 CEST 2013 /dev/md0 4326425568 1355440016 2751215720 34% /MD0
Sat Jun 29 23:57:26 CEST 2013 /dev/md0 4326425568 1425090960 2681564776 35% /MD0
Sat Jun 29 23:57:27 CEST 2013 /dev/md0 4326425568 1474601872 2632053864 36% /MD0
Sat Jun 29 23:57:28 CEST 2013 /dev/md0 4326425568 1493627384 2613028352 37% /MD0
Sat Jun 29 23:57:32 CEST 2013 /dev/md0 4326425568 615934400 3490721336 15% /MD0
Sat Jun 29 23:57:33 CEST 2013 /dev/md0 4326425568 636071360 3470584376 16% /MD0
如您所见,我从 USE 15% 开始,15 秒后达到 37%(我无需提及备份无法在如此短的时间内复制如此大量的数据)。约 20 秒后,循环结束。我的使用率再次与之前大致相同。该值是合理的,大约复制了 35 Mb。
有人能向我解释一下发生了什么吗? df 是否仅估算使用量而不是使用值?
答案1
因为rsync
复制到临时文件然后替换旧文件。此外,rsync 仅传输差异,而不是整个文件。
因此,如果您有一个 20G 的文件,其中 10M 已更改,rsync 将首先将目标系统上的 20G 文件复制到临时目录中,然后传输 10M 差异并将其应用于副本。最后用新文件替换旧文件。
这是为了防止部分传输失败时文件损坏。
为了避免创建临时文件并更新文件,请使用该--inplace
标志。