我尝试编写一个“完美”的备份程序(如下),但遇到了问题(也在下面)。是否有效率/工作版本?:
假设:您从“本地”备份,您拥有并且磁盘空间有限,因为“远程”具有无限的磁盘空间并且属于其他人,因此您需要加密。网络带宽是有限的。
'local'为每个文件保留一个包含此数据的备份文件的数据库:
文件名,包括完整路径
文件的最后修改时间(mtime)
sha1sum文件的未加密内容
sha1sum文件的加密内容
给定要备份的文件列表(有些可能已备份),程序运行'find'并获取每个文件的完整路径/ mtime(这相当有效;相反,计算每个文件的sha1sum不会有效)
该程序丢弃文件名和mtime在“本地”db中的文件。
程序现在计算每个剩余文件的未加密内容的sha1sum。
如果sha1sum与'local'db中的一个匹配,我们在'local'db中创建一个特殊条目,将该文件/ mtime指向现有条目的文件/ mtime。实际上,我们说“我们备份了这个文件的内容,但是在另一个文件名下,所以不需要再备份它”。
对于每个剩余的文件,我们加密文件,获取加密文件内容的sha1sum,将文件rsync到sha1sum。示例:如果文件的加密sha1sum是da39a3ee5e6b4b0d3255bfef95601890afd80709,我们将它同步到'remote'上的/ some / path / da / 39 / a3 / da39a3ee5e6b4b0d3255bfef95601890afd80709。
一旦上面的步骤成功,我们将文件添加到'本地'数据库。
请注意,除非绝对必要,否则我们会有效地避免计算sha1sums和加密。
注意:我没有指定加密方法:这是用户的选择。
问题:
我们必须定期加密和备份“本地”数据库。但是,“本地”数据库快速增长,并且rsync的加密文件效率低下,因为“本地”数据库中的一个小变化意味着“本地”数据库的加密版本发生了重大变化。
我们在'local'上为'local'上的每个文件创建一个文件,这个文件很丑陋而且过分。
我们经常查询“本地”数据库。即使是w /索引,这些查询也很慢,因为我们经常对每个文件进行一次查询。通过批处理查询或其他东西可以加快速度。
可能是我现在忘记的其他问题。