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
    • 最新
    • 标签
主页 / unix / 问题 / 763628
Accepted
eftshift0
eftshift0
Asked: 2023-12-12 18:03:12 +0800 CST2023-12-12 18:03:12 +0800 CST 2023-12-12 18:03:12 +0800 CST

rsync - 在尝试写入(本地)之前是否运行读取/读取/比较?

  • 772

我的理解rsync(可能是完全错误的)是,它会首先尝试读取文件(源文件和目标文件,如果存在)以进行比较,然后再尝试在目标文件上写入内容(我预计这会比读取文件慢) )。我正在运行 rsync 来同步我的主目录的备份,而不是在源磁盘和目标磁盘上看到大量读取(在执行之前的 rsync 运行之后),而是在目标磁盘上看到大量写入,这是我没想到。rsync 总是这样工作吗?

我使用它的方式,以防万一:

rsync --delete -r /home/my-home /mount-point-other-disk/
rsync
  • 1 1 个回答
  • 30 Views

1 个回答

  • Voted
  1. Best Answer
    Chris Davies
    2023-12-12T20:43:20+08:002023-12-12T20:43:20+08:00

    您正在从rsync本地磁盘复制到本地磁盘。这会关闭许多优化并将其简化为几乎简单的cp.

    此外,通过不包含--times( -t) 标志,您已经关闭了其剩余的优化,这意味着它变得与 完全相同cp。

    我对 rsync 的理解(可能是完全错误的)是,它会首先尝试读取文件(源文件和目标文件,如果存在)以进行比较,然后再尝试在目标上写入内容(我预计这会比阅读)。

    仅当您用于rsync在两个系统之间通过网络进行复制时,才会出现这种情况。

    我在目标磁盘上看到大量写入

    这是因为rsync无法假设有关目标文件的任何信息,因此在每次备份尝试时都会覆盖它们。

    解释:

    在理想情况下,rsync可以将自身作为客户端运行,并在远程系统上启动服务器进程。假设目标文件似乎已经存在于目的地上,这两个进程各自读取其本地副本并通过校验和块来识别文件的哪些部分不同。然后,这些差异将通过网络传输并更新目标文件。(这是一个滑动校验和,因此您甚至可以在文件开头插入一个字节,这是唯一要传输的块。)

    rsync但是,在单个系统上管理读取和写入本身的情况下,它假设读取和写入将花费相同的时间。(对于闪存来说不一定如此,但请忍受它。)因此,在考虑任何更新目标的写入之前,读取源文件和目标文件只是为了比较它们所花费的时间大致相当于它的时间。需要重写目标文件,所以这就是它的作用。

    可能的解决方案:

    1. 如果要写入 NAS,请勿写入已本地挂载的 NAS 文件系统。相反,要么使用rsync协议直接通过网络写入 NAS,要么ssh远程登录 NAS 并通过该连接传输数据。在这种情况下,您需要一个类似于这样的命令行:

      rsync -a --delete -M--fake-super /home/my-home remoteNAS:/path/to/mount-point-other-disk/
      
    2. 如果您确实在两个本地连接的磁盘之间读取/写入,请包含--times( -t) 选项并允许rsync忽略看起来已经被复制的文件:

      rsync -a --delete /home/my-home /mount-point-other-disk/
      rsync -rt --delete /home/my-home /mount-point-other-disk/
      

      其中第一个复制所有元数据,因此它不适合写入非 Linux 本机文件系统,例如 NTFS 或 FAT。第二个复制文件,但仅保留上次修改的时间(没有权限或所有权)。如果您正在写入 FAT 文件系统,请注意它只能以两秒的精度捕获时间戳,因此您需要警告rsync不要期望太多:

      rsync -rt --modify-window 1 --delete /home/my-home /mount-point-other-disk/
      
    • 1

相关问题

  • rsync - 使用 shell 脚本将每个 JPG/jpg 文件从一个硬盘驱动器移动到一个目录

  • tar 目录只发送修改过的文件块

  • 如何复制具有相对重复符号链接的目录树?

  • rsync 排除问题

  • rsync 端口 22 和 873 使用

Sidebar

Stats

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

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve