rsync 似乎忽略修改时间

rsync 似乎忽略修改时间

这个问题是基于我之前的问题。我在两台机器(A 和 B)上有相同的文件结构。这些文件相同,但时间戳不同(A 上的时间正确,B 上的时间错误)。上面提到的问题就是在处理这个问题。

但是,我尝试了以下技巧。我通过以下方式将机器B上结构中所有文件的修改时间更改为1.1.1970:

awk 'BEGIN{FS="\t"}{print "touch --no-create --no-dereference -m -t  \"197001010000\" \"" $1 "\""}' files.txt > commands2.sh
parallel < "commands2.sh"

请注意,该文件files.txt是在计算机 A 上生成的,并且包含每行: 其中 "$1"\t"$2"给出$1文件的绝对路径,并$2具有由 输出的修改日期stat -c %y $1

我验证了stat文件日期确实设置为 1970 年。我使用 Krusader 目录同步进行测试,Krusader 决定正确地将数据从 A 复制到 B。

然后我rsync 先测试A -> B

rsync -azEX --dry-run --itemize-changes --info=BACKUP1,DEL1,NAME1,REMOVE1 --delete --exclude-from=/home/user/.rsync-transport-in-ssh.rules  /home/user user@remote:/home/user/

输出为空。然后B -> A

rsync -azEX --dry-run --itemize-changes --info=BACKUP1,DEL1,NAME1,REMOVE1 --delete --exclude-from=/home/user/.rsync-transport-in-ssh.rules user@remote:/home/user/ /home/user

输出充满了应该进行的传输,但这完全不正确,因为 B 上的所有数据都是 1970 年的。

因此,问题有两个方面:1)真正rsync用什么来决定复制到哪里?2)有没有办法按照我想要的方式强制执行行为?

请注意,我怀疑rsync实际上使用的是文件状态更改日期,因为我没有更新这些日期B,并且在许多情况下这些日期早于A.

答案1

  1. rsync 到底用什么来决定复制到哪里?
  2. 有什么方法可以按照我想要的方式强制执行行为吗?
  1. rsync使用多种不同的方法来确定是否复制文件内容。例如,

    • 文件大小和时间戳的比较
    • 内容校验和
    • 源和目标的位置(即它们位于同一文件系统中还是位于不同的服务器上)

    请注意,rsync传输文件元数据(有关文件的数据,例如权限、所有权、时间戳等)和文件内容之间存在区别。此外,在涉及两个系统的情况下,rsync可以使用校验和来确定文件内容的哪些部分发生了变化,这样只需要传输变化的部分而不是整个文件。

将文件复制到远程服务器。现在修改本地副本,以便有一个额外的字节在开始。用于rsync复制文件,您会发现它只用一个数据块传输一串块校验和流。在我的 600MB 文件示例中,源和目标的上传速度受到 1Mbit/s 的限制,在其中一个实例的前面添加一个字节,源文件的“复制”花费了 20 秒,平均有效速度415Mbit/s。

  1. 回答于你之前的问题

相关内容