我正在使用以下命令将大量大视频文件复制到外部驱动器。
rsync -Ph --inplace /Volumes/Production/Prefix* Prefix
我们遇到了电源故障,复制过程中断了。使用 rsync 重新启动是没有问题的,但问题是它需要很长时间才能恢复到原来的状态。它会检查每个文件,看起来好像它读取了整个文件。据报道,它的速度比平时快 3-5 倍左右,直到它到达开始再次复制的点。
这段时间它到底在做什么?它是在读取整个文件并将其与源文件进行比较吗?还是在做其他奇怪的事情?有没有办法让 rsync 更快地跳过已完成的文件?例如,告诉它只检查文件大小不同的文件或其他东西?
答案1
-t
导致您-a
出现问题的原因是没有-t
在以前的rsync 的运行。
-t
是必要的,以便在复制时保留文件修改时间,这样一旦复制,目标文件的最后修改时间将与源文件的最后修改时间相同。如果没有这个,rsync 的后续运行将不会将任何目标文件视为与源文件匹配,并且将始终更新它们。
Rsync 的比较行为
默认情况下,如果目标文件的最后修改时间和文件大小与源文件的最后修改时间和文件大小匹配,rsync 将跳过现有的目标文件。
从此恢复
如果您确信在此期间没有其他软件可能修改了目标文件,而只是想恢复,则可以使用该--size-only
选项。这将修改比较行为,这样 rsync 将跳过现有目标文件(如果其文件大小匹配),而不检查上次修改时间。
您将来会遇到的问题是,如果您想再次同步目录,您仍然需要文件修改时间匹配,或者您需要忽略修改时间并相信文件没有被其他软件修改(以不改变大小的方式)。
选项说明
默认 rsync 比较:如果文件大小和最后修改时间都匹配,则跳过。
--size-only
:如果文件大小匹配,则跳过。--ignore-times
:永不跳过。文件时间和尺寸被忽略。--checksum
:如果文件大小匹配,则计算两个文件的校验和,如果匹配,则跳过。
选项--size-only
使得跳过文件的可能性更大,而--ignore-times
和--checksum
选项使得跳过文件的可能性更小。
答案2
rsync
有一个选项:--size-only
它可以做你想做的事。
答案3
Rsync 默认检查文件的 mod-time 和大小。如果添加 --checksum,则它会与整个文件进行比较(即:不管 mod-time 和大小是否匹配)。
答案4
由于您没有对存档执行 -a,它没有复制时间,因此它认为它们是不同的文件,因为时间戳不匹配,然后它对整个文件进行校验。
如果您正在制作时间戳可以/应该匹配的副本:请始终包含-a
。
现在(虽然很久以前),你可以尝试添加--ignore-times