- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我会先尝试定位问题。我们有一个构建为大型文件树的项目。该构建有数百 MB,包含许多(较小的)文件,其中只有一小部分在构建之间发生变化。我们希望保留这些构建的一些历史记录,并且为了有效地做到这一点,我们希望硬链接(hard link)在构建之间不会更改的文件。为此,我们使用 rsync
(作为 cp
的更强大的兄弟),使用选项 --link-dest
从本地源到本地目标> 用于执行硬链接(hard link)魔术。
这适用于增量构建:大多数文件未被触及,rsync
正确执行硬链接(hard link)技巧。使用完全重新编译构建(出于与此处无关的原因我们必须这样做),事情似乎没有按预期工作。由于重新编译,所有文件都获得了新的时间戳,但就内容而言,大多数文件仍与之前的构建相同。但即使我们使用 rsync
和 --checksum
选项(所以 rsync
“同步”/基于内容的硬链接(hard link),而不是文件大小+时间戳) , 不再有任何硬链接(hard link)。
我试图用这个简单的 (bash) 脚本来隔离/说明问题:
echo "--- Start clean"
rm -fr src build*
echo "--- Set up src"
mkdir src
echo hello world > src/helloworld.txt
echo "--- First copy with src as hardlink reference"
rsync -a --checksum --link-dest=$(pwd)/src src/ build1/
echo "--- Second copy with first copy as hardlink reference"
rsync -a --checksum --link-dest=$(pwd)/build1 src/ build2/
echo "--- Result (as expected)"
ls -ali src/helloworld.txt build*/helloworld.txt
echo "--- Sleep to have reasonable timestamp differences"
sleep 2
echo "--- 'Remake' src, but with same content"
rm -fr src/helloworld.txt
echo hello world > src/helloworld.txt
echo "Third copy with second copy as hardlink reference"
rsync -a --checksum --link-dest=$(pwd)/build2 src/ build3
# Using --modify-window=10 gives results as expected
# rsync -a --modify-window=10 --link-dest=$(pwd)/build2 src/ build3
echo "Final result, not as expected"
ls -ali src/helloworld.txt build*/helloworld.txt
第一个结果如预期:所有三个副本都是硬链接(hard link)的(相同的 inode)
30157018 -rw-r--r-- 3 stefaan staff 12 May 10 01:28 build1/helloworld.txt
30157018 -rw-r--r-- 3 stefaan staff 12 May 10 01:28 build2/helloworld.txt
30157018 -rw-r--r-- 3 stefaan staff 12 May 10 01:28 src/helloworld.txt
最终结果不符合预期/期望:
30157018 -rw-r--r-- 2 stefaan staff 12 May 10 01:28 build1/helloworld.txt
30157018 -rw-r--r-- 2 stefaan staff 12 May 10 01:28 build2/helloworld.txt
30157026 -rw-r--r-- 1 stefaan staff 12 May 10 01:28 build3/helloworld.txt
30157024 -rw-r--r-- 1 stefaan staff 12 May 10 01:28 src/helloworld.txt
第三个副本 build3/helloworld.txt
没有硬链接(hard link)到 build2
中的副本,即使内容相同,所以校验和检查应该看到这个。
有人知道这里出了什么问题吗?我的期望错了吗?或者 rsync 在从本地同步到本地时是否忽略了 --checksum
选项,例如因为它知道查看 inode 编号比花时间在校验和上更聪明?
最佳答案
问题是使用“-a”标志会强制保留修改时间(隐含地,“-t”)。
如果您改用“-rlpgo”(或在“-a”之后加上“--no-times”),修改时间将不再被考虑保存,因此 inode 将被共享。您仍然必须指定“--size-only”或“--checksum”(后者显然更安全),这样它就不会根据文件时间进行比较。
文档没有明确区分哪些标志用于触发更新,哪些用于控制属性的保存。
关于linux - Rsync with --checksum 从本地到本地?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10525748/
我一直在分析一些 230V 通信并试图找出协议(protocol)的校验和算法。从我了解到的通信结构如下: 第一个 block 总是相同的,必须是某种开始结构(910hex) 然后嵌套5个 block
我们正在通过 Phonegap 构建安卓混合应用程序。使用 PayTm 网络集成工具包。 正确生成校验和。但是,当提交表单进行付款时,会返回 **Invalid Checksum ** 问题。 最佳答
在运行金字塔配方时,以下在 chef-solo 中失败: =======================================================================
我正在尝试使用此处描述的3个步骤-http://www.javaworld.com/community/node/3968创建一个自定义Maven存储库。因此,我遵循了所有步骤,并在这里有了存储库:
我想在现有的角度应用程序中安装最新的 Electron 版本,因此我按照npm命令进行安装。 命令:npm i electron@latest 预期行为 Electron 应成功安装。 实际行为 因此
我有一个警报系统,我已将其配置为通过以太网向我的手机发送 SMS 消息。 这是我收到的一些短信: 5522 18 1137 00 003 1C76 5522 18 3137 00 003 3278 5
如果给定代码 + CRC 字符串,如何计算 CRC 算法? 我有几个由代码 + 匹配的 CRC 组成的字符串,但不知道如何计算有问题的 CRC,以便我可以生成更多的代码字符串。以下是一些示例(16 位
我是一名电子工程师,并没有发现从纯数学角度考虑 CRC 很重要。但是,我有以下问题: 为什么我们在计算 CRC 时要在消息中添加 n 个零,n 是生成多项式的次数吗?我在模2长除法以及CRC的硬件实现
假设我最后有一些带有 16 位校验和的数据包。我想猜测使用了哪种校验和算法。 首先,从转储数据中,我可以看到数据包有效负载中的一个字节变化完全改变了校验和,所以我可以假设它不是某种简单的异或或求和。
从 Internet 下载各种可执行文件或 zip 文件时,我从未使用过校验和。我知道它用于检查一致性并增加一点安全性。但是,当您从 Apache 或 Microsoft 等受人尊敬的项目下载时,有必
我有短的、可变长度的十进制数字,例如:#41551,它们是由人类手动转录的。输入错误会导致不良结果,所以我的第一个想法是使用 Luhn 算法添加校验和 - #41551-3。然而,这只会检测到错误,而
我正在寻找一种校验和算法,其中对于大数据 block ,校验和等于所有较小组成 block 的校验和之和。我发现的大部分内容都来自 RFC 1624/1141,它们确实提供了此功能。有人对这些校验和技
我有一个关于如何计算互联网校验和的问题。我在书中找不到任何好的解释,所以我在这里询问。 看看下面的例子。 发送以下两条消息:10101001和00111001。校验和用1的补码计算。到目前为止我明白了
以太网帧检查序列始终附加在数据链路层帧的末尾。为什么它附加到帧的末尾而不是其他地方? 我想了一下,认为这可能与例如如何进行有关。计算 CRC 校验和,如果帧的结构是 header+payload+cr
我正在尝试在 Verilog 中为 SENT 传感器协议(protocol)实现 CRC 算法。 在 SAE 发布的一份文件中,他们说他们的 CRC 使用生成多项式x^4 + x^3 + x^2 +
只需添加位即可生成校验和。取 1 补码的额外步骤有何用处? 我理解这个理论。我知道如何计算 1 的补码,并且知道如何将补码相加使结果全为 1。 我想看一个如何检测错误的简单示例。 最佳答案 我相信您正
Google 代码提供如下条形码: 当您下载软件时。它的目的是什么(我假设它与SHA1校验和有关,但如果是这样,它是如何使用的)? 编辑:现在我知道了它的名字,我发现 this article 。谢谢
当我尝试运行此语句时,我的程序无法编译: Checksum checksum = new CRC32(); 错误:找不到符号 符号:校验和类 我在程序开始时完成了以下操作。 import java.u
当我使用 torrent 下载 ISO 镜像时;我应该仍然验证文件的完整性(例如通过计算 sha256 哈希),还是在下载时自动完成? 最佳答案 BitTorrent 协议(protocol)具有一种
我必须做一点 java 自检程序(self-checksum)。这是我的代码示例 public class tamper { public static int checksum_self
我是一名优秀的程序员,十分优秀!