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
    • 最新
    • 标签
主页 / server / 问题 / 608955
Accepted
Daniel W.
Daniel W.
Asked: 2014-07-01 04:10:17 +0800 CST2014-07-01 04:10:17 +0800 CST 2014-07-01 04:10:17 +0800 CST

rsync 更改已经存在的文件

  • 772

我的 crontab 中有一个简单的 rsync 行,可以将备份文件从 prod 服务器获取到另一个服务器。

看起来它正在触及目标文件夹中已经存在的文件。这样,备份将逐渐增加每个间隔的时间。

请查看以下文件更改的日期和时间。

如何使用 rsync 不触摸(和下载?)它已经拥有的文件。我也不需要计算任何校验和,一旦创建了备份,它们就不会再改变了。

rsync -vzre 'ssh' stor@server:/backup/system/ /storage/share/Backup/Server

要获取的文件:

-rw-r-x--- 1 root stor 896K Jun 22 05:02 giant-140622-etc.zip
-rw-r-x--- 1 root stor 620K Jun 22 05:02 giant-140622-sql.zip
-rw-r-x--- 1 root stor  84M Jun 22 05:02 giant-140622-www.zip
-rw-r-x--- 1 root stor 899K Jun 25 05:00 giant-140625-etc.zip
-rw-r-x--- 1 root stor 603K Jun 25 05:00 giant-140625-sql.zip
-rw-r-x--- 1 root stor  84M Jun 25 05:00 giant-140625-www.zip
-rw-r-x--- 1 root stor 899K Jun 28 05:00 giant-140628-etc.zip
-rw-r-x--- 1 root stor 620K Jun 28 05:00 giant-140628-sql.zip
-rw-r-x--- 1 root stor  86M Jun 28 05:00 giant-140628-www.zip
-rw-r-x--- 1 root stor 899K Jun 30 05:00 giant-140630-etc.zip
-rw-r-x--- 1 root stor 617K Jun 30 05:00 giant-140630-sql.zip
-rw-r-x--- 1 root stor  86M Jun 30 05:00 giant-140630-www.zip

目的地:

-rw-r-x--- 1 stor stor 896K Jun 30 06:06 giant-140622-etc.zip
-rw-r-x--- 1 stor stor 620K Jun 30 06:06 giant-140622-sql.zip
-rw-r-x--- 1 stor stor  84M Jun 30 06:06 giant-140622-www.zip
-rw-r-x--- 1 stor stor 899K Jun 30 06:06 giant-140625-etc.zip
-rw-r-x--- 1 stor stor 603K Jun 30 06:06 giant-140625-sql.zip
-rw-r-x--- 1 stor stor  84M Jun 30 06:06 giant-140625-www.zip
-rw-r-x--- 1 stor stor 899K Jun 30 06:06 giant-140628-etc.zip
-rw-r-x--- 1 stor stor 620K Jun 30 06:06 giant-140628-sql.zip
-rw-r-x--- 1 stor stor  86M Jun 30 06:06 giant-140628-www.zip
-rw-r-x--- 1 stor stor 899K Jun 30 06:07 giant-140630-etc.zip
-rw-r-x--- 1 stor stor 617K Jun 30 06:08 giant-140630-sql.zip
-rw-r-x--- 1 stor stor  86M Jun 30 06:10 giant-140630-www.zip

更新:

当我从 shell 运行rsync命令(使用--skip-existingarg)时,它只下载不存在的新文件并跳过它已有的文件。

在调查由 cronjob 运行的完全相同的命令的行为时,已经存在的文件确实会在每个周期发生变化,并且整个作业在每个周期中花费的时间会逐渐增加(比较上面的时间,cronjob 从 06:00 开始,每个文件 2 分钟,即使它们已经存在)。

rsync -vzr --ignore-existing -e 'ssh -i /path/id_rsa -l backup' [email protected]:/backup/system/ /nfs/share-private/Backup/Server

更新:

这是7月份的文件,我在里面多加了一个空行,请看时代,开始06:01和提出每个新文件。

-rw-r-x--- 1 stor stor 899K Jul  4 06:01 giant-140702-etc.zip
-rw-r-x--- 1 stor stor 621K Jul  4 06:01 giant-140702-sql.zip
-rw-r-x--- 1 stor stor  86M Jul  4 06:03 giant-140702-www.zip
                                       ^-- 01 to 03
-rw-r-x--- 1 stor stor 899K Jul  4 06:04 giant-140704-etc.zip
-rw-r-x--- 1 stor stor 634K Jul  4 06:05 giant-140704-sql.zip
-rw-r-x--- 1 stor stor  86M Jul  8 06:02 giant-140704-www.zip
                                       ^-- ???
-rw-r-x--- 1 stor stor 899K Jul  8 06:03 giant-140706-etc.zip
-rw-r-x--- 1 stor stor 629K Jul  8 06:03 giant-140706-sql.zip
-rw-r-x--- 1 stor stor  86M Jul  8 06:06 giant-140706-www.zip
                                       ^-- 03 - 06
-rw-r-x--- 1 stor stor 899K Jul  8 06:07 giant-140708-etc.zip
-rw-r-x--- 1 stor stor 629K Jul  8 06:07 giant-140708-sql.zip
-rw-r-x--- 1 stor stor  86M Jul  8 06:10 giant-140708-www.zip
                                       ^-- 07 - 10

现在,当我想象再过一个月时,时间会是这样的:

-rw-r-x--- 1 stor stor 899K Jul  8 06:32 giant-140808-etc.zip
-rw-r-x--- 1 stor stor 629K Jul  8 06:32 giant-140808-sql.zip
-rw-r-x--- 1 stor stor  86M Jul  8 06:35 giant-140808-www.zip
                                       ^-- what I imagine to happen
backup
  • 4 4 个回答
  • 1474 Views

4 个回答

  • Voted
  1. kasperd
    2014-07-10T00:40:03+08:002014-07-10T00:40:03+08:00

    默认情况下rsync,将读取源和目标上的整个文件,以验证它们是否相同。这不会消耗网络带宽,因为它只会比较哈希值。但它确实花时间从磁盘读取。

    在一个使用场景中,我发现这非常低效,因为源文件只是被附加到。我使用了--size-only,这对我来说效果很好。

    还有一些其他选项,看起来它们可能适用,--append并且--append-verify,但我自己没有测试过这些选项。

    看起来您的目录中没有很多小文件,因此从磁盘读取目录列表并统计每个文件的时间应该不是什么大问题。

    • 4
  2. Best Answer
    Daniel W.
    2014-07-01T04:17:17+08:002014-07-01T04:17:17+08:00

    我添加了--ignore-existing命令,看起来它不会改变任何东西,只会下载新文件。

    rsync -vzr --ignore-existing -e
    

    编辑:当有新文件时,每个周期仍然需要更长的时间。

    • 2
  3. krissi
    2014-07-14T08:26:22+08:002014-07-14T08:26:22+08:00

    我认为添加-t到您的论点列表会有所帮助。

    要验证这一点,您可以添加--itemize-changes参数(不带-t)。如果我理解正确,这将T在每一行显示 - 标志

    man 1 rspec:

    t 表示修改时间不同,正在更新为发送者的值(需要 --times)。T 的另一个值意味着修改时间将设置为传输时间,这发生在没有 --times 的情况下更新文件/符号链接/设备以及更改符号链接并且接收器无法设置其时间时。(注意:当使用 rsync 3.0.0 客户端时,您可能会看到 s 标志与 t 组合,而不是针对此时间设置失败的正确 T 标志。)

    在此添加-t到命令(keep --itemize-changes)之后,您将在每一行收到一个t-flag。在下一次运行中,列表将只包含新文件。

    这是我的示例运行:

    krissi@host ~/tmp/rsync % l *
    dst:
    total 0
    
    src:
    total 0
    -rw-r--r-- 1 krissi users 0 Jul 13 18:05 bar
    -rw-r--r-- 1 krissi users 0 Jul 13 18:05 foo
    -rw-r--r-- 1 krissi users 0 Jul 13 18:19 later
    krissi@host ~/tmp/rsync % rsync -vzr --itemize-changes src/ dst/
    sending incremental file list
    >f+++++++++ bar
    >f+++++++++ foo
    >f+++++++++ later
    
    sent 174 bytes  received 69 bytes  486.00 bytes/sec
    total size is 0  speedup is 0.00
    krissi@host ~/tmp/rsync % l *
    dst:
    total 0
    -rw-r--r-- 1 krissi users 0 Jul 13 18:21 bar
    -rw-r--r-- 1 krissi users 0 Jul 13 18:21 foo
    -rw-r--r-- 1 krissi users 0 Jul 13 18:21 later
    
    src:
    total 0
    -rw-r--r-- 1 krissi users 0 Jul 13 18:05 bar
    -rw-r--r-- 1 krissi users 0 Jul 13 18:05 foo
    -rw-r--r-- 1 krissi users 0 Jul 13 18:19 later
    krissi@host ~/tmp/rsync % rsync -vzr --itemize-changes src/ dst/
    sending incremental file list
    >f..T...... bar
    >f..T...... foo
    >f..T...... later
    
    sent 174 bytes  received 69 bytes  486.00 bytes/sec
    total size is 0  speedup is 0.00
    krissi@host ~/tmp/rsync % rsync -vzr --itemize-changes src/ dst/
    sending incremental file list
    >f..T...... bar
    >f..T...... foo
    >f..T...... later
    
    sent 174 bytes  received 69 bytes  486.00 bytes/sec
    total size is 0  speedup is 0.00
    krissi@host ~/tmp/rsync % rsync -vzrt --itemize-changes src/ dst/
    sending incremental file list
    .d..t...... ./
    >f..t...... bar
    >f..t...... foo
    >f..t...... later
    
    sent 177 bytes  received 72 bytes  498.00 bytes/sec
    total size is 0  speedup is 0.00
    krissi@host ~/tmp/rsync % rsync -vzrt --itemize-changes src/ dst/
    sending incremental file list
    
    sent 66 bytes  received 12 bytes  156.00 bytes/sec
    total size is 0  speedup is 0.00
    krissi@host ~/tmp/rsync % l *
    dst:
    total 0
    -rw-r--r-- 1 krissi users 0 Jul 13 18:05 bar
    -rw-r--r-- 1 krissi users 0 Jul 13 18:05 foo
    -rw-r--r-- 1 krissi users 0 Jul 13 18:19 later
    
    src:
    total 0
    -rw-r--r-- 1 krissi users 0 Jul 13 18:05 bar
    -rw-r--r-- 1 krissi users 0 Jul 13 18:05 foo
    -rw-r--r-- 1 krissi users 0 Jul 13 18:19 later
    
    • 2
  4. caesarsol
    2014-07-10T00:37:03+08:002014-07-10T00:37:03+08:00

    为什么你说每次都需要更长的时间?这怎么可能?

    也许是生成文件的程序正在触及它们?

    尝试--checksum:根据校验和跳过,而不是修改时间和大小,看看是否会改变任何东西(我不会保留这个选项,因为它每次都从磁盘读取每个文件,太贵了,我只是建议它找到问题。)

    (也许尝试使用-t保留修改时间的选项进行调试)

    • 1

相关问题

  • 总大小(磁盘)与总大小(媒体)

  • 社区对备份解决方案的意见

  • 无法读取不同 LTO-3 驱动器上的 LTO-3 磁带

  • 使用 TSM 备份时跳过硬链接

  • 使用 rsync 维护名称更改的目录的副本

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve