我有一个很大的日志文件(大约 600 MB),我试图通过蜂窝网络传输它。因为它是一个日志文件,所以它只是附加到(虽然它实际上是在一个 SQLite 数据库中,只执行了 INSERT,所以它并不那么简单,但除了最后 4k 页(或者可能是一个很少)文件每次都是相同的。重要的是只有更改(以及需要传输的任何校验和)实际发送,因为数据连接是计量的。
然而,当我通过未计量的连接(例如免费 wifi 热点)执行测试时,我没有看到观察到或报告的数据传输加速或减少。通过慢速 WiFi 连接,我看到大约 1MB/s 或更少,报告传输将需要近 20 分钟。通过快速的 WiFi 连接,我看到了统一的更快速度,但没有关于加速的报告,第二次尝试传输(现在应该更快,因为两个文件相同)现在确实显示出任何差异。
我正在使用的(经过消毒以删除敏感信息)命令是:
rsync 'ssh -p 9999' --progress LogFile michael@my.host.zzz:/home/michael/logs/LogFile
Run Code Online (Sandbox Code Playgroud)
我最后得到的输出如下所示:
LogFile
640,856,064 100% 21.25MB/s 0:00:28 (xfr$1, to-chk=0/1)
Run Code Online (Sandbox Code Playgroud)
没有提到任何类型的加速。
我怀疑问题可能是以下之一:
我排除了以下情况:
我有一个脚本可以下载银行交易以存储在数据库中。要获得这些交易,每个帐户都需要一个密码。数据库是加密的,需要一个密钥才能访问它。所有这些密钥和密码本身都是加密的,需要一个主密钥才能检索。该脚本提示输入主密钥,使用它来检索所有必要的密码和密钥,然后执行其工作。
现在正在手动调用此脚本。除了保护主密钥的部分外,让它定期运行很容易。简单地将它以明文形式存储在文件中似乎不太安全,因为任何设法获得文件读取权限的人现在都可以广泛访问许多敏感信息。以脚本拥有的方式存储它(例如在脚本调用的二进制文件中混淆它)也不起作用,因为任何可以执行脚本的人都会在那里有一个攻击向量。
我读过这个问题,答案似乎是“将其存储在文件中”,并添加了建议不是纯文本的注释。但即使密码不是纯文本,似乎我们仍然需要与脚本沟通如何以某种方式读取文件,例如解密密钥或其他东西,我们又回到了原点。
我最近发现卷上的一些文件被神秘地截断了 - 或者更准确地说,被零长度文件替换。
幸运的是,这些文件是从多个地方硬链接的,实际上只有大约一半的链接被一个看似相同属性的零长度文件覆盖。
但是,当我查看备份时,发现问题发生在我之前的备份之前。对于有问题的卷,一个简单的镜像备份就足够了,因为文件不应被删除——它主要是附加的。但由于该文件实际上并没有被删除,我不能简单地告诉rsync
不要删除。
有没有办法告诉rsync
不同步本地长度为零但远程长度非零的文件?
我当然可以简单地编写一些代码来查找零长度文件并排除它们,但这是一个额外的耗时步骤(现在对文件系统进行两次完整扫描)并且它可以排除合法应该同步的文件(在如果存在预期长度为零的文件)。