如何强制 rsync 执行校验和?

如何强制 rsync 执行校验和?

我们每晚都会对 Windows 文件服务器进行备份,首先每晚在服务器上创建一个增量备份文件(并在周四晚上创建一个完整备份),然后将其复制到运行 Linux/Ubuntu 的备份服务器。为了保持异地冗余,我们将备份目录 rsync 到外部驱动器,该驱动器在每晚运行后都会轮换。

随着时间的推移,增量备份文件的数量一直稳步增加(尽管这些文件的大小有所不同)。

我们还注意到,尽管 rsync 过程仅将最新的两个文件复制到外部驱动器,但它所花的时间却越来越长。

这是命令:

rsync -vr --delete-before --log-file=/rsync_log.csv /backup/archive/ /mnt/usbdisk/  2>&1

当我们测试该命令并调查日志文件时,我们看到了以下内容:

...
2011/02/14 23:59:35 [14054] >f..T...... IncrementalBackup_2011_02_06_20.bkf
2011/02/15 00:00:45 [14054] >f..T...... IncrementalBackup_2011_02_08_20.bkf
2011/02/15 00:03:22 [14054] >f..T...... IncrementalBackup_2011_02_09_20.bkf
2011/02/15 00:04:36 [14054] >f..T...... IncrementalBackup_2011_02_11_20.bkf
2011/02/15 00:04:51 [14054] >f..T...... IncrementalBackup_2011_02_12_20.bkf
2011/02/15 00:05:06 [14054] >f..T...... IncrementalBackup_2011_02_13_20.bkf
2011/02/15 00:06:13 [14054] >f+++++++++ IncrementalBackup_2011_02_14_20.bkf
2011/02/15 00:54:32 [14054] >f..T...... Thursday_Full_Backup_2011_01_20.bkf
2011/02/15 03:24:41 [14054] >f..T...... Thursday_Full_Backup_2011_01_27.bkf
...

我们发现,每个文件所花费的时间与文件的大小有关 - 即使跳过它(例如 - 完整备份大约需要 2.5 小时来处理,而增量备份大约需要 2-3 分钟或更短)。

实际复制的唯一文件是最新的增量文件。

我们能想到的唯一解释是 rysnc 正在对文件执行校验和 - 尽管文档说默认情况下它不会执行此操作,并且我们未在命令上指定 --checksum 开关。确定时间戳和文件大小肯定不会花 2.5 小时吧?

看完文档后,除了计算校验和之外,我找不到任何其他解释。那么,有没有办法确保校验和被禁用?

答案1

也许问题出在文件的时间戳上。如果使用 Windows 程序创建备份,则可能会弄乱时间戳。如果我用一堆图片复制您的样本,我会获得此日志

2011/02/15 03:46:46 [61820] delta-transmission disabled for local transfer or --whole-file
2011/02/15 03:46:46 [61820] .d..t....... ./
2011/02/15 03:46:46 [61820] IMG_0055.JPG is uptodate
2011/02/15 03:46:46 [61820] IMG_0056.JPG is uptodate
2011/02/15 03:46:46 [61820] IMG_0057.JPG is uptodate
2011/02/15 03:46:46 [61820] IMG_0058.JPG is uptodate
2011/02/15 03:46:46 [61820] IMG_0059.JPG is uptodate
2011/02/15 03:46:46 [61820] IMG_0060.JPG is uptodate
2011/02/15 03:46:46 [61820] IMG_0061.JPG is uptodate
2011/02/15 03:46:46 [61820] >f..t....... IMG_0062.JPG
2011/02/15 03:46:46 [61820] IMG_0063.JPG is uptodate
2011/02/15 03:46:46 [61820] IMG_0064.JPG is uptodate
2011/02/15 03:46:46 [61820] IMG_0065.JPG is uptodate
2011/02/15 03:46:46 [61820] IMG_0066.JPG is uptodate
2011/02/15 03:46:46 [61820] total: matches=0  hash_hits=0  false_alarms=0 data=5911343
2011/02/15 03:46:46 [61820] sent 5912367 bytes  received 67 bytes  11824868.00 bytes/sec
2011/02/15 03:46:46 [61820] total size is 75450221  speedup is 12.76

因此每次都会传输文件,否则您应该有日志消息file xxx is uptodate。尝试使用多个 v 标志增加 rsync 详细程度以找出正在发生的事情。

答案2

USB 驱动器是什么文件系统?

FAT 和时间戳存在已知问题。请参阅 rsync 手册页:

   --modify-window
          When comparing two timestamps, rsync treats the timestamps as being equal if they  differ  by  no  more
          than  the  modify-window value.  This is normally 0 (for an exact match), but you may find it useful to
          set this to a larger value in some situations.  In particular, when transferring to or from an MS  Win‐
          dows  FAT  filesystem  (which represents times with a 2-second resolution), --modify-window=1 is useful
          (allowing times to differ by up to 1 second).

相关内容