2010-01-23

Gistore 项目正式发布 —— 基于 Git 的 Linux 数据备份系统

在之前的 gistore 项目发布预告 的博客中,我们已经提到了 gistore 项目,今天我们正式将此项目发布: 什么是 Gistore,如何使用呢?

何为 Gistore?

Gistore 是群英汇为了应对企业对于数据备份,信息安全的需求而开发的一款工具软件,以 git 版本控制系统作为数据增量备份的机制。
Gistore = Git + Store
Gistore 的设计参考了 etckeeper,用户可以对全盘任何目录的数据纳入到备份中,定制非常简单和方便。优点有:
  • 备份数据的历史查询和恢复,可以使用 git 命令,而不用去记忆备份工具独有的命令
  • 多机异地备份非常简单,使用 git 克隆即可解决。可以采用 git 协议,http,或者更为安全的 ssh 协议
  • Git 的存储效率非常高效
  • Gistore 的备份工作区是 bare 形式的 GIT 版本库,不包含工作区文件,更节省磁盘空间
Gistore 只能运行在 Linux 或类似系统上,因为 gistore 需要调用系统命令: mount/umount ...

Gistore 的安装

如前所述,gistore 已经上传到 PYPI,并且源代码也已经贡献到 Github 上,可以使用两种方法来安装:

方法一:使用 setuptools 从 PYPI 上获取 gistore 软件包

  • 确保机器上已经安装了 setuptools。
    • 在 Debian 上可以使用下面的命令安装 setuptools
      $ sudo aptitude install python-setuptools
      $ which easy_install
      /usr/bin/easy_install
      
    • 其他 Linux 发行版安装 setuptools,可以参考 setuptools 官方网站
  • 使用 easy_install 命令安装 gistore
    $ sudo easy_install gistore
    Searching for gistore
    Best match: gistore 0.1
    Adding gistore 0.1 to easy-install.pth file
    
    Using /usr/lib/python2.5/site-packages
    Processing dependencies for gistore
    Finished processing dependencies for gistore
    $ which gistore
    /usr/bin/gistore
    

方法二:从源码安装 gistore

  • 先用 git 从 Github 上克隆 代码库 $ git clone git://github.com/ossxp-com/gistore.git Initialized empty Git repository in /home/jiangxin/gistore/.git/ remote: Counting objects: 28, done. remote: Compressing objects: 100% (23/23), done. remote: Total 28 (delta 8), reused 0 (delta 0) Receiving objects: 100% (28/28), 19.13 KiB | 5 KiB/s, done. Resolving deltas: 100% (8/8), done. $ cd gistore $ ls -aF ./  ../  cfg/  CHANGELOG  COPYING  gistore*  .git/  lib/  MANIFEST.in  README  setup.py
  • 执行 setup.py 脚本完成安装 $ sudo python setup.py install ... $ which gistore /usr/bin/gistore

Gistore 的使用

Gistore 的术语

  • 备份库:通过 gistore 创建并维护的一个用于备份的 git 库
    • 包含 git 库本身(.git目录, .gitignore文件等)
    • 以及 gistore 相关配置(.gistore)目录
  • 备份项:可以为一个备份库指定任意多的备份项目
    • 例如备份 /etc 目录, /var/log 目录, /boot/grub/menulist 文件等
    • 备份项在备份库的 .gistore/config 文件中指定,如上例的备份项在配置文件中写法为: [store /etc] [store /var/log] [store /boot/grub/menu.lst]
  • 备份任务:在执行大部分 gistore 的命令时,需要指定一个任务或者多个任务
    • 备份任务,可以是对应的 备份库 的路径,可以使用绝对路径,也可以使用相对路径
    • 如果不提供备份任务,缺省将当前目录作为 备份库 的所在
    • 也可以使用一个别名来标识备份任务
  • 任务别名和任务列表:在 /etc/gistore/tasks 目录中创建的备份库的符号链接的名称,作为这些备份库的任务别名
    • 如果没有任务别名的机制,管理员很难定位当前到底存在多少个备份库
    • 将分散在磁盘各个目录的备份库创建符号链接到目录 /etc/gistore/tasks/ 目录下,就为该备份库创建了一个别名
    • 将所有的别名显示出来,就是任务列表

创建并初始化备份库

在使用 gistore 开始备份之前,必须先初始化一个备份库。
  • 命令行格式
    gistore init [备份任务]
  • 示例
    • 将当前目录作为备份库进行初始化
      $ gistore init
    • 将指定的目录作为备份库进行初始化
      $ sudo gistore init /backup/database

备份库的配置,以及为备份库指定备份项

一个备份库的备份项的设置,是在备份库根目录下的 .gistore/config 文件中定义的。例如下面的配置内容:
# Global config for all sections
[main]
backend = git
root_only = true

[default]
keep_perm = no
keep_empty_dir = no

[store /etc]
keep_perm = yes
keep_empty_dir = yes

[store /opt/mailman/archives]

[store /opt/mailman/conf]
[store /opt/mailman/lists]
[store /opt/moin/conf]
[store /opt/moin/sites]
如何理解这个配置文件呢?
  • [main] 小节设置了缺省的版本控制系统为 git,并且只有 root 用户能对该版本库进行操作
  • [default] 小节设定了备份项的缺省备份行为。如缺省不记录文件或目录的属主等权限信息,不保存空目录 这是因为 git 版本控制系统不能记录文件或目录的属主等权限相关设置,git 还直接删除空目录,这在有的情况是不允许的。
  • [store /etc] 小节是说,要对 /etc 目录进行备份,对于该目录,要保留空目录,并且记录用户权限信息
  • 后续的小节陆续增加了更多的备份项,包括:/opt/mailman/archives, /opt/mailman/conf, /opt/mailman/lists, /opt/moin/conf, /opt/moin/sites 目录等。这些目录采用缺省的备份设置

执行备份任务

执行备份任务非常简单:
  • 进入到备份库根目录下,执行:
    $ sudo gistore commit
  • 或者在命令行上指定备份库的路径
    $ sudo gistore ci /backup/database

设定备份任务的别名以及查看任务列表

因为 gistore 可以在任何目录下创建备份任务,因此管理员很难定位当前到底存在多少个备份库。还有就是执行备份时,要在命令行指定长长备份库路径。 任务别名就是用来解决这些问题的。 为备份任务创建任务别名非常简单,只需要 在 /etc/gistore/tasks 目录中创建的备份库的符号链接,该符号链接的名称,作为这些备份库的任务别名
$ sudo ln -s /home/jiangxin/Desktop/mybackup /etc/gistore/tasks/jx
$ sudo ln -s /backup/database /etc/gistore/tasks/db
 
于是,就创建了两个任务别名,在以后执行备份时,可以简化备份命令:
$ sudo gistore ci jx
$ sudo gistore ci db
查看一份完整备份列表也非常简答:
$ gistore list
    db        : /backup/database
    jx        : /home/jiangxin/Desktop/mybackup
当 gistore list 命令后面指定某个任务列表时,相当于执行 gistore status 命令,查看备份状态信息:
$ gistore status db

关于备份库的镜像,备份数据的恢复

无须多言,参见 git 用户手册。
blog comments powered by Disqus