我尝试使用EC2制作每日构建计算机并将每日版本存储在S3中。
这些版本是完整的磁盘映像,因此非常臃肿(300 + MB总计,95%OS内核/ RFS /库,5%实际软件)。而且他们的变化很小。
理想情况下,通过良好的压缩,存储成本应该接近O(t)
,t
一段时间。
但是,如果我每天只将这些文件添加到S3,版本号作为文件名的一部分,或者每次都使用相同的文件名,但S3版本的版本,则成本为O(t^2)
。
因为根据this,所有版本都占用了空间,而且自新版本创建以来,新版本需要为空间付费。
冰川更便宜但仍然O(t^2)
。
有什么建议吗?
答案 0 :(得分:1)
基本上您正在寻找的是增量文件级备份。 (即仅备份更改的内容)并使用完整备份并应用增量(即增量)重建当前状态。
如果您需要使用最新的图像,您可能需要进行增量+保持最新图像。您可能还希望不时进行完全备份,以减少从增量重建所需的时间(并且您将需要保留与备份关联的某种元数据)。
总而言之:你所描述的是可能的,除了推动图像之外,你只需要做额外的工作。据推测,您有一个生成图像的构建过程,可以在生成和上载之间插入额外的步骤。恢复过程将比现在更加复杂。
为了让您开始查看二进制差异工具,如bsdiff / bspatch或xdelta。您可以生成增量并仅备份增量。图像也是压缩的,所以如果你对压缩版本进行差异化,你就不会走得太远,所以你可能想要对未压缩的文件进行区分。另一种看待它的方法是在生成图像之前进行差异处理并仅选取更改的文件(可能更复杂)