我正在寻找从Linux服务器备份各种目录和文件到AWS Glacier。 我正在努力解决如何做到这一点的细节。
我想逐步上传文件。 所以基本上,如果一个文件没有改变,我不想再次上传到冰川,如果它已经存在那里。 我想我有这个部分解决。 由于您无法即时获取冰川保pipe库中的存档列表,因此我将保留上传文件的本地数据库,以便能够分辨存储库中存在的内容以及不存在的内容。 这将允许我做增量备份(只上传丢失或更改的文件)。
根据( http://aws.amazon.com/glacier/faqs/ ):
存储在Amazon Glacier中的档案是不可变的,即档案可以被上传和删除,但不能被编辑或覆盖。
那么,如果我上传一个文件/档案文件,然后在本地更改文件,下一次我做备份时,会发生什么情况,因为它不能用新版本覆盖文件,Glacier如何处理?
AWS每GB收取0.03美元,用于删除不到3个月的存档。 由于我正在做一个本地服务器的备份,我想删除本地不存在的归档文件。 什么是组织这个最好的方法。 使用本地存储的存档清单来确定哪些数据不再存在,如果大于3个月,请将其从Glacier中删除? 这似乎很简单,但有没有更好的方法呢?
您可以上传单个文件作为存档,或者通过在上传之前将文件分组为TAR或ZIP文件来提高效率。 TAR / ZIP文件的想法是有吸引力的,因为它使得它更简单,你会收取较less的存储费,但我想知道我将如何处理增量上传。 如果上传了一个包含10,000个文件的20 MB压缩文件,并且其中一个文件在本地进行了更改,那么是否需要上传另一个20 MB的压缩文件? 现在,我需要吃掉在这些zip文件中存储几乎所有东西的两个副本的成本…另外,我将如何处理删除不在本地存在的ZIP文件中的东西? 由于我不想删除整个zip文件,现在我要花费存储不再存在的文件。
也许我正在反思这一切。 什么是最直接的方法来处理这些问题?
我不知道是否重要,但是我正在使用PHP SDK作为这个备份脚本。 另外,我不想先上传到S3存储桶,然后将存储桶备份到Glacier,因为我现在必须支付S3存储和传输费用。
那么,如果我上传一个文件/档案文件,然后在本地更改文件,下一次我做备份时,会发生什么情况,因为它不能用新版本覆盖文件,Glacier如何处理?
根据冰川常见问题解答 :
您将数据存储在Amazon Glacier中作为存档。 每个存档都分配有一个唯一的存档ID,稍后可用于检索数据。 档案可以代表单个文件,也可以select将多个文件组合成单个档案。 您将档案上传到保pipe库。 保pipe库是用于组织数据的档案集合。
那么这意味着每个上传的文件都被分配一个唯一的ID。 上传相同的文件两次,文件的每个副本都有自己的ID。 这使您能够恢复到以前版本的文件,如果需要的话。
使用本地存储的存档清单来确定哪些数据不再存在,如果大于3个月,请将其从Glacier中删除? 这似乎很简单,但有没有更好的方法呢?
为了避免删除不到3个月的数据附加费,这可能是最好的办法。 但是,这不仅仅是数据不再存在,你需要跟踪和删除。 如上所述,只要文件发生变化,并将其重新上传到Glacier,您就会得到一个新的文件ID。 如果您不希望恢复到旧版本的function,最终还是希望删除旧版本的文件。
如果上传了一个包含10,000个文件的20 MB压缩文件,并且其中一个文件在本地进行了更改,那么是否需要上传另一个20 MB的压缩文件? 现在,我需要吃掉在这些zip文件中存储几乎所有东西的两个副本的成本…另外,我将如何处理删除不在本地存在的ZIP文件中的东西? 由于我不想删除整个zip文件,现在我要花费存储不再存在的文件。
这是你必须为自己决定的权衡。 你压缩/压缩一切,然后被迫跟踪这些文件和其中的一切,或者是值得的,你可以单独上传文件,所以你可以单独清除它们,因为它们不再需要。
你可能会考虑一些其他的方法:
说了这么多,然而,冰川可能不是您的需求最好的方法。 冰川是真正意义上的数据存档,这不仅仅是备份服务器。 如果您只想执行服务器的增量备份,那么使用S3代替Glacier可能是更好的方法。 使用像Duplicity或者rdiff-backup这样的工具(与s3fs一起使用)可以让你对S3存储桶进行增量备份并且很容易地进行pipe理。 多年来,我在几个linux系统上使用了rdiff-backup,发现它工作的很好。
这里是* nix的命令行工具,它支持上传唯一修改的文件,replace本地修改的文件,删除本地删除的文件从冰川https://github.com/vsespb/mt-aws-glacier
作为替代,您可以使用Duplicity之类的东西,然后上传它生成的档案。
这有几个好处:
与冰川使用Duplicity最简单的方法是: