windows - block 级复制和 Rsync

标签 windows backup rsync

我正在尝试使用适用于 Windows 的 grsync(rsync 的 GUI)来运行备份。在我备份的目录中,有许多定期更新的较大文件。我希望能够只同步对这些文件的更改,而不是每个备份的整个文件。我的印象是 rsync 是一个 block 级文件复制器,只会复制在每次同步之间发生变化的字节。或许事实并非如此,或者我误解了什么是 block 级文件复制!

为了对此进行测试,我使用 grsync 在两个目录之间同步一个 5GB 的 zip 文件。然后我在 zip 文件中添加了一个非常小的文本文件并再次运行 grsync。然而,它又开始复制整个 zip 文件。是否有一个实用程序只能将更改复制到此 zip 文件而不是整个文件?或者 grsync 中是否有可用于此效果的命令?

最佳答案

复制整个文件的原因很简单,当在本地文件系统上的两个目录之间复制时,处理 block 级更改的算法被禁用。

这会起作用,因为文件正在被复制(或更新)到远程系统:

rsync -av  big_file.zip remote_host:

这将不使用“delta”算法并且将复制整个文件:

rsync -av  big_file.zip D:\target\folder\

一些注意事项

  1. 即使目标是网络共享,rsync 也会将其视为本地文件系统的路径,并会禁用“delta”( block 更改)算法。
  2. 将数据添加到数据文件的开头或中间不会扰乱处理 block 级更改的算法。

基本原理

在两个本地目标之间复制时,delta 算法被禁用,因为它需要完全读取源文件和目标文件以确定哪些 block 需要更改。理由是读取目标文件所花费的时间与写入目标文件所花费的时间大致相同,因此没有必要先读取它。

解决方法

如果您确定从您的目标文件系统读取比写入它快显着,您可以通过包含 --no-whole- 来强制 block 级算法运行文件标志。

关于windows - block 级复制和 Rsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28819379/

相关文章:

java - 使用带针孔的 SSH 将 Java 应用程序部署到多个虚拟机

python - 如何在 Windows 上有效地 "replace" `os.execvpe` - 如果 "child"进程是交互式命令行应用程序?

c++ - "Private Bytes"没有反射(reflect)它。如何找到进程分配的确切内存?

mysql - AWS RDS 实例的可用时间点恢复点

r - 忽略带有Roxygen的文件

cassandra - 清理 Cassandra 增量备份文件夹的最佳实践

subprocess - 在 Linux 上使用 systemd 与 sshpass 进行 Rsync : 'Host key verification failed.'

rsync - 无法在我的服务器和我的 Mac 之间进行 rsync

node.js - .settings 在 Windows 上的 Microsoft Visual Studio Code 中不起作用 'mocha'

c# - 获取错误 "System.Runtime.Versioning.TargetFrameworkAttribute from assembly ' mscorlib,版本 = 2.0.0。 0'"