同步两个只能访问其中一个磁盘的磁盘

时间:2016-09-10 13:34:37

标签: rsync data-synchronization

我需要同步两个大磁盘,但我只能逐个访问它们。所以我需要分两个步骤来划分这个过程:

  1. 保存(仅)与本地较小磁盘上的source的差异
  2. 将它们应用于destination
  3. 是否可以将destination的当前状态保存到文件中,仅在较小的磁盘上复制差异?使用rsync或其他工具?

    类似的东西:

    # on `destination` disk:  
    rsync <magic option> -o "status_file.delta"  destination/
    
    # `source` to `temporary`:  
    rsync <magic option> -i "status_file.delta" source/ temporary/
    
    # `temporary` to `destination`:  
    rsync -a temporary/ destination/
    

    谢谢!

2 个答案:

答案 0 :(得分:0)

是的!但是,您需要在源磁盘上存储两个数据副本:一个当前(源),一个与目标上的状态匹配。

  1. 将源同步到第二个副本并记录更改内容:

    rsync -a --write-batch=temporary/delta source/ source2/
    

    sourcesource2现在应该匹配,您应该有一个名为delta的文件。

  2. 交换磁盘并将更改应用到目标:

    rsync -a --read-batch=temporary/delta destination/
    

    sourcesource2destination现在所有匹配。

  3. 然后,您可以继续对source进行更改,但不要修改source2 ,直到您下次同步到destination。< / p>

答案 1 :(得分:0)

鉴于rsync需要同时显示两组完整数据,因此需要一种替代解决方案。您可以使用常规UNIX命令轻松地执行此操作:

  1. 独立扫描两组数据,来源和目的地:

    find source/ -type f -print0 | xargs -0 md5sum > temporary/source-signatures
    
    find destination/ -type f -print0 | xargs -0 md5sum > temporary/destination-signatures
    
  2. 区分两个签名文件。

    diff -u destination-signatures source-signatures > sync-diff
    
  3. 可选生成脚本以删除已删除的文件:

    grep '^-' sync-diff | xargs echo rm > delete.sh
    
  4. 捕获已更改的文件:

    grep '^+' | sed 's/.* //' | xargs tar Af file.tar
    
  5. 小心地,在目标目录中运行delete.sh脚本,然后展开tar文件,使其正确放置文件。

  6. 如果你的名字中有任何空格或特殊字符的文件,那么你需要对删除脚本和tar进程更加小心。特别是xargs不能胜任这项工作。