日志标签 备份
如何同步 Gistore 的备份数据?
8月14日
Gistore 在公司内部以及部分客户推广一段时间来看,还是很满意的,但是如何实施双机备份或者管理员远程克隆是一个问题。
- 每个需要同步 gistore 备份库的用户都需要建立单独的系统帐号?
- 或者引入复杂的 Git 库管理工具?
最新的解决方案非常的简单,只引入了一个系统帐号 gistore,使用该帐号进行备份库的克隆操作:
- 将同步者的公钥上传。可以使用下面的命令(需要开启 gistore 的口令认证)
$ ssh-copy-id -i id_rsa gistore@<REMOTE.SERVER>
- 使用 git 命令执行克隆操作。
例如下面的命令克隆 /etc/gistore/tasks/system 指向的 gistore 备份库$ git clone gistore@<REMOTE.SERVER>:system
那么是如何实现的呢?
- 使用了群英汇改进的 gitosis 提供 git 库访问控制服务
- 利用了改进后的 map 指令,将访问的 git 库的地址映射到对应的 gistore 备份库
例如访问 system,实际访问的是 /etc/gistore/tasts/system/repo.git 指定的代码库。相关的 map 指令:map readonly * = (.*):\1/repo
- 不对单个公钥连接进行身份识别,而是所有的登录用户都使用唯一帐号。这样简化了授权模型,降低了配置难度
实际上是在 /etc/ssh/sshd_config 中增加了如下设置:# ossxp gistore backup account settings: Match user gistore ForceCommand gitosis-serve gistore X11Forwarding no AllowTcpForwarding no AllowAgentForwarding no PubkeyAuthentication yes #PasswordAuthentication no - 以上的操作,都在安装群英汇 gistore 软件包的时候自动配置,无须人工介入。
解决 gistore 备份数据中的 git 库(submodule)的备份
8月3日
昨天在从客户现场回公司的路上,想明白了 Gistore 备份出现的 AM 标识的备份数据就是含有变更的子模组。
之前 Gistore 不能解决的一个备份问题是,当备份的数据中包含 git 库,备份数据将不会保存在 gistore 版本库中,而是以 submodule 方式加入备份库。实际的效果是,数据没有备份下来。例如:
- 安装了 etckeeper,用于维护 /etc 下配置文件的变更。实际上 /etc 目录本身已经是一个 git 库了
如果在 gistore 任务建立前,/etc 目录已经 git 化,则不能有效的对 /etc 进行备份 - 某个备份数据的目录,被人为的 git 化。这可能是在 hacking 时遗留的 git 库
我在改动服务器的某些数据(如界面模板等),经常将目录 git 化,然后再修改/比较/提交
如果不能有效的对 git化的备份目录进行备份,肯定会收到惩罚。
在最早的实现中,只是在备份之后的后处理(post_check)查找以 git 子模组方式添加的目录,并打出相应的警告信息。如何能够自动进行处理,一直排在工作队列中,昨天晚上开始了修改。
检查子模组
首先要找出哪些目录是以子模组方式添加的。最开始想到了从状态中找出 AM 标识的子模组,进行修改,但是存在问题:1. 添加没有变更的git化的目录,不会显示为 AM(添加且含修改),而显示为 A(添加)。2. 不能有效的发现 gistore 版本库中已经提交数据中以 git 子模组方式添加的目录。
于是采用分析 git submodules status 命令的输出,确定子模组。不过这个命令需要多次迭代执行(遇到无 .submodules匹配报错退出),才能找到所有的子模组。
重新以普通目录和文件方式添加子模组
首先删除已经提交的按照子模组方式保存的目录,重新添加不能直接添加子模组目录,否则仍会按照子模组方式添加。采用的方法是:
- 删除已经按照子模组方式添加的目录
git –git-dir=repo.git rm –cached sub/module … - 在子模组目录下创建一个临时文件,并添加该临时文件
git –git-dir=repo.git –work-tree=run-time add sub/module/<TMPFILE> - 对子模组目录执行添加操作
git –git-dir=repo.git –work-tree=run-time add sub/module - 别忘了删除临时文件
git –git-dir=repo.git –work-tree=run-time rm sub/module/<TMPFILE> - 迭代执行,直到没有子模组发现为止
Gistore 版本升级为 0.2.3,在服务器上重新安装和执行,将原来子模组方式添加的目录重新纳入备份中,放心了。
Gistore 应用:备份博客数据
- 我们在公司服务器上创建了一个名为 wordpress 的任务,备份 wordpress 数据库导出文件,wordpress 配置文件,wordpress 插件目录,wordpress 上传图片及附件。
- 将 wordpress 任务的 git 库,加入 git 服务器中,并设置权限
- 每个有权限的公司员工,都可以使用 git 命令克隆/同步公司服务器上的 wordpress 版本库,将博客数据保存下来
Gistore(基于 git 的数据备份软件)升级至 0.2.x
7月29日
在 10年1月份的一篇 Gistore 发布声明的博客中 ,我介绍了我们自己开发的一个用户数据备份的小工具 Gistore。
是什么原因让我们开发备份工具呢?这是因为:
- 我们公司的数据备份的需要
- 客户数据备份需要更好用的软件
- rdiff-backup 和 flexbackup 的备份方案不够好
实际上 rdiff-backup 用做数据备份,已经足够好了,你可以从我们公司的维基中看到 rdiff-backup 的使用方法:
但是 rdiff-backup 的解决方案的问题是:
- 命令难记,包括我自己在数据恢复的时候还要一遍一遍的查阅文档
- 之所以命令难记,实际上是因为备份工具本身的使用率很低,只有在灾难恢复时候会用到,所以命令不熟悉是一定的。
- 数据的异地镜像比较复杂,需要引入其它工具
为什么不用 Git 开发一款工具呢?
- Git 的命令天天在用,实在是太熟悉了
- Git 的数据同步太方便了,在同步过程能够实时查看进度
此次 Gistore 升级,解决了半年多的使用过程中积累问题,并且增加了易用性。
阅读全部内容 »
Gistore 项目正式发布 —— 基于 Git 的 Linux 数据备份系统
1月23日
在之前的 gistore 项目发布预告 的博客中,我们已经提到了 gistore 项目,今天我们正式将此项目发布:
- pypi 上的项目页:gistore 项目
- Github 上的版本库:http://github.com/ossxp-com/gistore
什么是 Gistore,如何使用呢?
阅读全部内容 »
预告: Gistore 项目开发中——使用Git做数据备份
1月18日
在 etckeeper 项目的启发下,着手开发一个基于 Git 的数据备份解决方案,可以备份任何目录下的数据,而非仅仅 /etc 路径下数据。
这个新的备份工具定名为 Gistore,是 git 和 store 两个单词的混合体。

最新评论