版本控制软件似乎主要用于以纯文本文件形式备份项目。
对于备份文件系统,文件数量大或尺寸大,常规文件复制/传输软件(例如rsync)在我看来更合适?
如果不是,版本控制备份文件系统的优点和缺点是什么?版本控制为何比常规文件复制或传输软件更有价值?
答案1
版本控制和备份在不同的管理级别上有不同的用途。在项目中,您使用配置管理和版本控制系统控制和管理代码,并且在系统级别,管理员(IT 部门或本地管理员)对每个相关数据存储(无论是用户的主目录还是生产数据)进行备份数据库,或项目的版本控制数据库)。在私人环境中,这种差异可能并不那么明显,但是一旦您放弃了两者都服务于“保存数据”的“某种程度上相同”目的的观点,它就会变得非常明显。在项目中使用版本控制来获得可靠且可重复的软件配置,并使用备份来确保系统的数据安全(以防止意外或恶意删除数据,在硬盘崩溃、火灾事件等情况下进行回退)。 )。
答案2
使用分布式(非集中式)版本控制是一种有效的备份策略,它是对更常见的备份方法的补充。同时使用这两种方法有很多话要说。
让我们回顾一下标准备份的工作原理。通常,全部文件系统上的文件被复制到某个远程位置。这是按照一些固定的定期计划完成的,通常使用 cron。这可能包括增量备份选项,这意味着某些备份可能仅保存与现有备份的差异。这样做通常是为了节省空间并允许在给定空间中进行更多备份。如果是这种情况,那么备份软件还具有重新组合所选备份的任务。
这里特别提到重复数据删除备份软件,例如博格备份和雷斯蒂奇。这种最先进的增量备份技术尝试不重复数据,并且仅存储新的、唯一的数据。
优点:
- 的状态全部文件在某个特定时间点保存。
- 用户不需要进行任何实际工作,至少对于完全自动化的备份来说是这样,这是常态。
缺点:
- 保存的状态与任何给定文件没有关系。这只是一个任意的时间点。
- 在实践中,早期版本的文件最终将丢失/丢弃。理论上,人们可以保留所有备份的完整历史记录,但由于空间原因很少这样做。然而,鉴于重复数据删除备份软件的效率更高,以及数据存储成本低廉且不断下降,如今保留所有备份变得更加可行。
- 由于定期保存文件系统快照的自动备份策略的固有限制,不会保存给定时刻的文件状态。更具体地说,如果相关文件系统被破坏,则自上次备份以来的所有更改都将丢失。
- 即使严肃的备份软件具有验证选项,也无法在不进行测试/交互的情况下知道备份是否有效。这对于压缩备份来说尤其成问题。
现在将其与使用分布式版本控制 (DVCS) 的备份进行对比。当我在 2015 年初写这篇文章时,有两个主要的免费分布式版本控制系统,即 Git 和 Mercurial。我认为出于多种原因,使用专有版本控制软件是一个坏主意,因此我将忽略此类野兽的存在。当然还有其他分布式版本控制系统存在,例如比兹尔,达尔克斯,单调和化石,但 Mercurial 和 Git 在 DVCS 领域使用最多。
如何使用 DVCS 进行备份?非常简单。提交到您的存储库,然后推送到其他地方,最好是推送到不同物理位置的远程计算机,尽管在紧要关头可以使用附加的 USB 驱动器。
优点:
- 每个文件的保存状态根据定义是定制的并且特定于每个文件。
- 存储库保留每个文件的完整快照历史记录。毕竟,这就是版本控制的含义。
- 即使假设尚未准备好进行正确的提交,也可以以非常短的时间间隔保存每个文件的本地状态。这可以在 Mercurial 中使用以下方法完成 Mercurial 队列扩展,或者新的进化扩展。如何完成此操作的细节超出了本文的范围,但有效的工作流程是非常细粒度的临时提交,稍后可以将其合并/细化/调整为永久提交。 git 有类似的队列特征。据我所知。 Git 与 Evolve 没有任何相似之处。
- 推送到远程 DVCS 是验证远程计算机上的备份/存储库是否正常运行的一种原始方法。虽然它不是 100% 的保证(有可能推送到损坏的存储库),但它至少告诉您之前所做的最近提交仍然存在于远程存储库中,并且具有正确的哈希值等。如果远程存储库的结构出现任何问题,标准 DVCS 将会大声抱怨。
缺点:
- 并非所有文件都会被保存,只会保存受版本控制的文件。
- 将超过一定大小的文件置于版本控制之下通常是不切实际的。就 Mercurial 而言,文件大小约为 10-20 MB 时就会开始遇到性能问题。有一些解决方法/技巧可以尝试解决这个问题,包括Mercurial 的大文件扩展还有著名的git 附件,由著名的乔伊·赫斯(Joey Hess)撰写,但据我所知,这些并不能替代适当的备份策略。
- 用户必须非常努力地设置存储库、进行提交、写入日志消息,以及可能将临时提交合并和调整为永久提交。
请注意,我有意将“标准备份”和“使用 DVCS 备份”的优缺点进行了镜像。删除 DVCS Con 2 将产生精确的镜像。正如我在本文开头所说,这些策略是互补的。
请注意,DVCS Con 3 并不是真正的 Con,因为在我看来,明智的用户无论如何都应该使用 DVCS。