rsync 和备份和更改时区

sim*_*ona 4 backup rsync stat timestamps

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

 rsync -vzrtl --progress --stats --timeout=0 host destination
Run Code Online (Sandbox Code Playgroud)

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

我再次运行 rsync 并且文件仍然不同:@ 现在,我不想再次复制文件,这很愚蠢,你能提出一个干净的解决方案吗?我怎样才能在未来防止这种情况?如果我更改为以前的时区,为什么文件仍然不同?


我发现文件的访问和更改时间是不同的,使用 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
Run Code Online (Sandbox Code Playgroud)

并在目的地

   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
Run Code Online (Sandbox Code Playgroud)

有没有办法防止 rsync 覆盖目标上最近修改过的图片?

os_*_*s_1 5

为了回答这个问题,我做一个假设:

您在本地使用 rsync,从安装的 SD 卡转移到备份空间

MMC 使用 FAT 文件系统进行格式化,因此设置它总是有用的,--modify-window=1因为 FAT 文件系统以 2 秒的分辨率存储时间戳。

man rsync给出--size-only忽略last-modified文件标志的选项。所以只有修改过大小的文件,例如编辑过的文件才会被同步。

另一种选择是将选项设置--modify-window为两个 timzeones 之间的时间差(以秒为单位)。例如,modify-window=3660如果有 1 小时的差异,则使用 2 小时

也许是您的 UTC 设置有问题。

您可以通过键入date --utc Xour softwareclock is given by来检查您的硬件时钟是否设置正确date

该值应与您的本地时区与格林威治标准时间具有相同的差异。

您的硬件时钟应始终设置为 UTC,因此即使您更改时区(软件时钟),所有时间戳也设置正确。

如果 UTC 时间不正确,请检查 BIOS 中的设置是否正确。如果不是,请更正。

如果已设置,您可以检查/etc/default/rcS。应该是以下行(Ubuntu 12.04)

#assume that the BIOS clock is set to UTC time (recommended)
UTC=yes
Run Code Online (Sandbox Code Playgroud)