是否可以使用 阿帕奇颠覆 (SVN)作为通用备份工具?(作为一种 同步 选择。)

有帮助吗?

解决方案

我发现这篇文章非常酷地描述了如何使用 svn 备份你的主目录,等等:

我使用 Subversion 来备份我的 Linux 机器。通过一些小的创意,它可以轻松涵盖:

  • 每日快照和异地备份。
  • 轻松添加和删除文件和文件夹。
  • 文件版本的详细跟踪。

它还允许一些额外的功能:

  • 定期记录电子邮件以通过 Subversion 的事件挂钩跟踪文件系统活动。
  • 用户可以请求从任何存储库修订中检出其主文件夹。
  • 可以使用一些 svn checkout 命令设置新的或替换的服务器。

来源: http://www.mythago.net/svn_for_backup.html

还发现 本文 其中显示了对主目录进行版本控制的示例。这允许您通过将主目录签入新计算机来随身携带您的环境。我曾经做过类似的事情,发现它非常有用。

其他提示

使用 SVN 作为二进制文件的备份时要记住的一件事是,SVN 将使文件大小加倍,因为它保留每个文件的本地副本(在 .svn/text-base 中)。

除此之外,我还使用 SVN 进行备份。只需添加所有文件,然后通过脚本提交即可。

作为“通用”备份,我想说这可能不是最好的主意,主要是由于其他人给出的原因(大量多余的文件夹和浪费的磁盘空间)。如果您只想保留备份,我再说一遍,根据您的需求,可能有更好的选择,例如:您是否需要保留每个文件的每个版本,或者数据的某些快照就足够了?

然而,在我的办公室,我们有一个 6 人的小团队,负责处理共享文件(例如:政策和程序手册、登记表等)。很多时候,团队成员会远程工作(在家或旅行时),而且通常是离线工作。我们没有使用中央共享文件夹设置,而是使用 SVN 为每个人提供文件夹的完整工作副本,他们可以在任何可能的情况下处理、参考和同步。这就是一石二鸟:即使在离线状态下,每个人都可以访问和编辑文件,而且它为我们的备份提供了巨大的冗余。如果我的笔记本电脑 着火, ,这并不麻烦,因为我可以查看另一个副本(显然是在另一台计算机上)。如果服务器着火了,我们将需要恢复存储库的备份。如果服务器和所有存储库备份着火,那么您丢失的只是旧版本的文件。丢失任何当前数据的唯一方法是服务器、存储库备份和每台具有结帐功能的计算机都神秘地着火。

但正如有些人所说,SVN 永远不会从存储库中删除信息,这意味着如果您只想将备份保留 60 天,那么,您不能。这并不完全正确。通过使用 出口, 倾倒进口 您可以有效地清除旧版本的文件。这并不漂亮,但这是可能的。

有一件事会让我很烦恼,那就是“.svn”文件夹,svn 会将其放入它跟踪的每个文件夹中。

它们看起来很烦人,当您复制文件夹时,您应该记住不要复制它们(否则您的沙箱可能会被激怒),并且 grep 一堆文件夹要困难得多,因为 . svn 资源文件夹。

我喜欢使用源代码控制来控制环境的想法。但我个人不会选择 svn 来完成这项工作。我会选择像 git 这样的东西。但这可能只是我...

我确实使用 SVN 来备份我的计算机,并同步我的笔记本电脑和台式机。但它确实存在前面答案中提到的问题,主要是磁盘使用量翻倍。我还觉得过多的文件和 SVN 进程不断检查我的硬盘是否有更改会使我的机器变慢。

然而,我想强调的是,SVN 非常适合同步不同的机器,而且如果需要的话,您还可以在任何地方检出文件——我什至通过 Web 界面在浏览器中执行此操作,有时。

总而言之,我对使用 SVN 进行通用备份的感受很复杂。但如果你这样做,我建议 不是 存储诸如电影、照片和音乐之类的库,因为它们往往很大(受到双倍空间使用的巨大影响)并且不可变——您不需要为此使用版本控制系统,因为在极少数情况下,当您更改文件,通常不需要旧版本(SVN 不擅长制作/存储二进制文件的差异,它保存文件的整个新版本)。因此,除非 SVN 能够适应这些情况(我的长期项目意图),否则我建议使用替代方法来备份此类文件。

你也可以考虑 布普 - 基于git packfile格式的高效文件备份系统。 它存储数据的方式基于 git,这对于存储文件及其差异非常有效。

我已经使用 CVS 作为 Ghost 的替代品,所以我不明白为什么不这样做。

我很好,因为你可以标记基线:您可以更改管理机器。

显然,这在 Unix 上比 Windows 上效果更好。

让我打消这个想法的是,对于一般用途,任何二进制数据都会在任何更改时被复制,而 SCM 系统所基于的文本内容可以轻松地以差异的形式进行更新。

所以你可以这样做,只是要注意,如果你进行大量编辑,你可能不想用它来管理照片存储库之类的东西。

更通用的备份解决方案(例如,Time Machine)的好处是,它们可以在一段时间后汇总多个二进制更改以节省空间。我不确定在 SVN、git 或 Mercurial 中这有多容易。

使用SVN进行备份是可行的。然而,随着时间的推移,删除不需要的旧修订可能会很困难。假设您只想保留 30 或 60 天的备份。SVN 不提供删除任何早于 X 天的历史记录的简单方法。如果您没有办法清除旧历史记录,您最终将耗尽备份驱动器的空间。

这是来自 SVN关于svndumpfilter的书 命令:

由于Subversion将所有内容存储在不透明的数据库系统中,因此尝试手动调整是不明智的,即使不是很困难。而且,一旦数据存储在您的存储库中,颠覆通常不会提供删除该数据的简单方法。[13]

[13] 顺便说一句,这是一个功能,而不是一个错误。

我发现 一致 对于 rsync 替代方案来说,它是比 svn 更好的选择。

JoaoPSF 的这一说法是不正确的:

(SVN 不擅长制作/存储二进制文件的差异,它保存文件的整个新版本)

请参阅此引用 Subversion 如何处理二进制文件:

请注意,文件是否为二进制文件不会影响用于存储该文件更改的存储库空间量,也不会影响客户端和服务器之间的流量。出于存储和传输的目的,Subversion 使用了一种 diffing 方法,该方法对二进制文件和文本文件同样有效。这与 svn diff 命令使用的比较方法完全无关。

当您想要恢复对系统造成影响的更改、尝试更改或将更改从一台服务器转移到另一台服务器时,使用源代码控制备份 /etc 会很有帮助。

但 Subversion 的大量 .svn 目录可能会妨碍这一点,不仅在搜索时,而且在某些情况下,例如 *.d 文件夹,设计不良的系统可能会将 .svn 文件夹本身解释为包含配置数据。

我现在更喜欢使用 Mercurial 来备份 /etc,因为它会在 /etc 下放置一个 .hg 文件夹。对于真正的备份而不仅仅是版本控制,您需要将该 .hg 文件夹复制到其他地方。

要在 Linux 上使用 SVN 作为备份,请执行以下操作:

  1. 创建一个空的存储库。
  2. 将空存储库检出到要备份的文件夹树中。
  3. 使用以下代码片段 (svnauto)。您必须将“myuser”和“mypassword”替换为存储库的有效凭据:
    #!/bin/sh
    svn status --depth=infinity --username=myuser --password=mypassword > /tmp/svnauto_tmp.list
    cat /tmp/svnauto_tmp.list | grep '^?' | sed -e 's/^?       /svn add --depth=infinity --force --username=myuser --password=mypassword "/g' -e 's/$/@"/g' | sh
    cat /tmp/svnauto_tmp.list | grep '^!' | sed -e 's/^!       /svn delete --username=myuser --password=mypassword "/g' -e 's/$/@"/g' | sh
    rm -f /tmp/svnauto_tmp.list
    svn update . --username=myuser --password=mypassword
    svn commit --username=myuser --password=mypassword --message "Automatic backup"

上面的脚本将添加/删除和更新当前目录中的任何文件和子目录。简单地使用它 cd 到要备份的文件夹(当然必须是工作副本),然后运行 svnauto. 。请注意,您需要在系统上安装 grep 和 sed,它会在 /tmp 中创建一个临时文件。它可以在 cron 作业中用于夜间提交,使用以下 cron 脚本:

#!/bin/sh
export LANG=en_US.UTF-8 && cd /my/directory && echo Starting backup $(date) > /root/backup_log.txt && /root/svnauto >> /root/backup_log.txt 2>&1 && echo Finished backup. >> /root/backup_log.txt && cat /root/backup_log.txt

该 cron 脚本假设 /my/directory 是您要备份的文件夹(根据需要替换)。它还假设您将 svnauto 脚本在 /root. 。它创建一个日志并在最后显示它。还有一个细节:首先 export svn 需要找到合适的语言。您可能需要将此行调整为您自己的本地语言才能使其正常工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top