AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 887182
Accepted
Frank Nocke
Frank Nocke
Asked: 2017-02-26 05:56:42 +0800 CST2017-02-26 05:56:42 +0800 CST 2017-02-26 05:56:42 +0800 CST

同步两个基本相同的大文件

  • 772

我在不同的卷上有两个 300 GB 的文件:

  • 加密本地备份
  • NAS 上的加密“远程”备份)。

按照设计,这两个文件的大小相同,而且内容大多(> 90%)相同......

是否有一个有效的工具来“rsync”这些文件,并且只复制不同的部分,因此目标文件与源文件相同?

也许构建块校验和的东西来解决这个问题,我不知道......(任何比cp -f...... rsync 更有效的东西也会抓住整个源文件来覆盖)

backup
  • 2 2 个回答
  • 2727 Views

2 个回答

  • Voted
  1. Best Answer
    ankit7540
    2017-02-26T07:43:15+08:002017-02-26T07:43:15+08:00

    rsync可以用来做到这一点。

    --no-whole-file或--no-W参数使用块级同步而不是文件级同步。


    测试用例

    /dev/random使用来自网站的大量文本文件生成随机文本文件,如下所示。这 4 个文件在所有内容上都不同。tf_2.dat是我们的目标文件。

    ~/logs/rs$ ls -tlh    
    -rw-rw-r-- 1 vayu vayu 2.1G  二  25 23:11 tf_2.dat
    -rw-rw-r-- 1 vayu vayu 978M  二  25 23:11 a.txt
    -rw-rw-r-- 1 vayu vayu 556K  二  25 23:10 file2.txt
    -rw-rw-r-- 1 vayu vayu 561K  二  25 23:09 nt.txt
    

    rsync然后使用(目标为空)将它们复制到不同的硬盘。

    rsync -r --stats rs/ /mnt/raid0/scratch/t2
    

    收到以下统计信息。

    Number of files: 5 (reg: 4, dir: 1)
    Number of created files: 0
    Number of deleted files: 0
    Number of regular files transferred: 4
    Total file size: 3,260,939,140 bytes
    Total transferred file size: 3,260,939,140 bytes
    Literal data: 3,260,939,140 bytes
    Matched data: 0 bytes
    File list size: 0
    File list generation time: 0.001 seconds
    File list transfer time: 0.000 seconds
    Total bytes sent: 3,261,735,553
    Total bytes received: 92
    
    sent 3,261,735,553 bytes  received 92 bytes  501,805,483.85 bytes/sec
    total size is 3,260,939,140  speedup is 1.00
    

    现在我合并这些文件以创建一个包含大约 60% 旧数据的新文件。

    cat file2.txt a.txt >> tf_2.dat
    

    现在,我同步这两个文件夹,这次使用该--no-W选项。

    rsync -r --no-W --stats rs/ /mnt/raid0/scratch/t2
    
    Number of files: 5 (reg: 4, dir: 1)
    Number of created files: 0
    Number of deleted files: 0
    Number of regular files transferred: 4
    Total file size: 4,289,593,685 bytes
    Total transferred file size: 4,289,593,685 bytes
    Literal data: 1,025,553,047 bytes
    Matched data: 3,264,040,638 bytes
    File list size: 0
    File list generation time: 0.001 seconds
    File list transfer time: 0.000 seconds
    Total bytes sent: 1,026,127,265
    Total bytes received: 611,604
    
    sent 1,026,127,265 bytes  received 611,604 bytes  21,169,873.59 bytes/sec
    total size is 4,289,593,685  speedup is 4.18
    

    可以看到大数据匹配和加速。

    接下来,我再试一次,这次我将几个 shell 文件合并到目标 ( tf_2.dat) 中,这样变化约为 2%,

    cat *.sh >> rs/tf_2.dat
    

    并且,再次使用rsync.

    rsync -r --no-whole-file --stats rs/ /mnt/raid0/scratch/t2
    
    
    Number of files: 5 (reg: 4, dir: 1)
    Number of created files: 0
    Number of deleted files: 0
    Number of regular files transferred: 4
    Total file size: 4,289,727,173 bytes
    Total transferred file size: 4,289,727,173 bytes
    Literal data: 178,839 bytes
    Matched data: 4,289,548,334 bytes
    File list size: 0
    File list generation time: 0.001 seconds
    File list transfer time: 0.000 seconds
    Total bytes sent: 541,845
    Total bytes received: 690,392
    
    sent 541,845 bytes  received 690,392 bytes  43,236.39 bytes/sec
    total size is 4,289,727,173  speedup is 3,481.25
    

    我们看到一个大的匹配和加速提供快速同步。

    • 13
  2. user3584196
    2018-01-12T17:30:29+08:002018-01-12T17:30:29+08:00

    您也可以尝试使用https://bitbucket.org/ppershing/blocksync(免责声明:我是这个特定分支的作者)。与 rsync 相比的一个优势是它只读取文件一次(据我所知,在开始增量传输之前,如果不计算校验和,rsync 不能被说服假设两个文件是不同的。不用说,读取 160GB 硬盘驱动器两次不是一个好的策略)。需要注意的是——当前版本的块同步在短 RTT 连接(例如本地主机、LAN 和本地 WiFi)上运行良好,但对于长距离同步并不是特别有用。

    • 2

相关问题

  • NTFS 备份映像不会挂载

  • 如何备份/恢复我的 Empathy 日志?

  • 如何将 Ubuntu 放在非闪存外部 USB 硬盘驱动器上?

  • 备份工具比较

  • 如何使文件夹与外部 USB 硬盘保持同步?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve