3

我使用 rsync 从我的相机备份我的照片,使用:

 rsync -vzrtl --progress --stats --timeout=0 host destination

现在,当我进行第一次备份时,我在不同的时区,然后我搬到了不同的时区,并在笔记本电脑上更改了它(我使用的是 ubuntu 10.04.4)。今天我正在备份我的图片,我发现时间戳不同(我的意思是你可以用 'ls -lt' 看到的时间戳),所以 rsync 会复制整个目录(我总是先运行 rsync 选项 -n 到知道它将传输的文件列表)。现在这只是愚蠢的,因为文件实际上是相同的。所以我改回了以前的时区,实际上我的相机上的文件时间戳改变了 - 我觉得这很奇怪。

移动到上一个时区后,发现创建时间是一样的,但是文件的访问和更改时间还是不一样的,使用stat. 例如:

在主机上

    File: `DSC00003.JPG'
    Size: 3068392    Blocks: 6016       IO Block: 32768  regular file     
  Device: 821h/2081d Inode: 2109        Links: 1
  Access: (0755/-rwxr-xr-x)  Uid: ( 1000/simona)   Gid: ( 1000/simona)
  Access: 2013-03-26 00:00:00.000000000 +0000 
  Modify: 2007-12-25 22:48:20.000000000 +0000
  Change: 2007-12-25 22:48:20.000000000 +0000

并在目的地

    File: `DSC00003.JPG'
    Size: 3068392    Blocks: 6008       IO Block: 4096   regular file
  Device: 802h/2050d Inode: 245762      Links: 1
  Access: (0755/-rwxr-xr-x)  Uid: ( 1000/simona)   Gid: ( 1000/simona)
  Access: 2013-03-26 10:24:49.000000000 +0000
  Modify: 2007-12-25 22:48:20.000000000 +0000
  Change: 2013-02-09 00:11:09.000000000 +0000

我不想再次复制文件,这会很愚蠢,你能提出一个干净的解决方案吗?以后如何防止这种情况发生?有没有办法防止 rsync 覆盖目的地最近修改过的图片?

4

1 回答 1

4

潜在的问题是相机使用的是 Window 的 FAT 文件系统,当涉及到时区时,它会被破坏,因为它只存储本地时间。随着不同的系统试图以不同的方式补偿这种破损以避免其他类型的破损,无穷无尽的问题随之而来。

对于一个讨论、cygwin 的解决方案以及有关潜在问题的大量参考,请参阅 Wayne Piekarski - Rsync 和 Cygwin 夏令时时区问题的解决方案

那里的参考资料之一有一些关于该问题的细节: Beating the Daylight Savings Time bug and getting correct file modify times - CodeProject

这些主要处理 Windows,所以我仍在研究如何在 Linux 上干净地处理这个问题。参见错误 #25048 “Vfat 文件系统不尊重时区”:错误:“linux-source-2.6.15”包:Ubuntu

这里讨论了一些 Linux 解决方案: rsync 和备份和更改时区 - Unix & Linux Stack Exchange,即 --size-only 或 --modify-window=3660,但它们是有风险的,因为它们在某些情况下无法进行所需的备份.

就我而言,FAT 文件系统位于 Android 手机的 SD 卡上,这可能会对可能的解决方案引入更多限制。

我认为这将是一个非常普遍的问题,所以我很惊讶这没有得到更好的记录。

于 2013-08-13T06:16:27.933 回答