【51CTO精选译文】备份是系统管理员的必修课。在51CTO的专题《Linux 系统备份——操作实践与工具介绍》中介绍了一些常用的备份工具,但这仅仅是数量众多的备份工具当中的一部分。本文介绍的是一个新备份利器:Duplicity。下面这篇评测文章出自知名的英文运维博客Everything Sysadmin,作者Tom Limoncelli现在是Google的系统管理员。
曾经,我需要将一个服务器备份到远程硬盘上,有几种方式,而且我也可以自己动手写一个方法。不过,我找到了 Duplicty,现在我向你强烈推荐:
Duplicity 使用 librsync 生产一个非常小的额外备份。它能够生成递增备份,然后使用 GPG 进行加密,能够适用常用的方法发送至另一个服务器上,比如:scp、ftp、sftp、rsync等等。可以从任何目录开始备份,不限于加载点(mountpoint),并且可以指定你想要排除的文件。
安装
如果你之前没有做过,那最难的部分就是设置 GPG 密钥。你需要保护好你的密钥。比如,你的机器着火丢失了所有数据,而且没有做密钥备份,那将无法进行恢复。我把密钥刻录了几张 CD 作为多个备份。
我要备份的机器是 colo 上的虚拟机。他们没有提供备份服务,所以不得不自己动手。机器使用的是 FreeBSD 8.0-RELEASE-p4并且运行正常。代码也是非常便携式的:Python、GPG、librsync等等。没有涉及内核或原始设备等类似问题。
我写了一个简单脚本,扫描所有我想要备份的目录,然后运行:
duplicity --full-if-older-than 5W --encrypt-key="${PGPKEYID}" $DIRECTORY scp://myarchives@mybackuphost/$BACKUPSET$dir
“--full-if-older-than 5W”表示进行递增备份,每隔 35 天进行一次完全的备份。我用 5W 而不是 4W,因为我想确保完全备份不会低于一个月。我每个月支付宽带费用,我不想在一个月遇到两件麻烦事,这会让人崩溃。
我的方法:使用 scp 将文件备份到另一个机器上,这是一个很便宜的 USB2.0 硬盘,容量 1T。这样设置,以便我能够用 ssh 从源机器访问目标机器而无需密码。上例中的“myarchives”是我做备份用的用户名,“mybackuphost”是主机。事实上,我指定了主机名,使用 .ssh/confi 将默认用户名设置为“myarchives”。这样,我可以在其他 shell 脚本中指定“mybackuphost”。
恢复
当然,人们真实关心的不是备份,而是恢复。在恢复文件时,duplicity 找到哪些递增和完整备份需要进行恢复和解密。你只需指定日期(默认是“the lastest”,即***),然后它会自动完成所有工作。我所需的工作如此至少,这点让我印象非常深刻。
系统运行一段时间之后,就需要进行恢复了,以确保一切正常。
恢复语法有点让人困惑,文档中也没有提供太多示例。最常见的情况并非是对所有备份组进行恢复,而是:“某个文件有问题,或者我觉得某个文件有问题,所有我需要恢复旧版本(从某个特定日期来看)到 /tmp,来看看这个文件原本是什么样的。”
我感到困惑的是:
1) 指定了文件或目录的路径,但你没有列出指向备份加载点或目录的路径。事后来看,这是显而易见的事情,当时这的确让我很纳闷。让我明白过来的是,当我列出文件时,文件会显示出来,而没有加载点
2) 指定备份放置的地方时,你必须非常小心。你可以在命令行中指定,并在“--file-to-restore”选项中指定恢复的文件。你不能在命令行中指定所有文件,然后让 duplicity 去猜从哪里分割——它做不到。
为了不用在意外删除了重要文件之后的紧急情况下重新温习那些命令,我做了一个如何进行恢复的记录。为了服务新手们,我又进行了一些改善如下:
***步:列出所有备份到 “home/ta”区的文件:
duplicity list-current-files scp://mybackuphost/directoryname/home/tal
要理出它们在某个特定日期的情况,添加:--restore-time "2002-01-25"
第二步:从该列表恢复文件(不是恢复到最初位置):
duplicity restore --encrypt-key=XXXXXXXX --file-to-restore=path/you/saw/in/listing scp://mybackuphost/directoryname/home/tal /tmp/restore
假设旧文件在“/home/tal/path/to/file”,备份在“/home/tal”,你需要指定--file-to-restore 作为“”,而不是“/home/tal/path/to/file”。你可以列出一个目录来获取所有文件。/tmp/restore 应是一个已经存在的目录。
恢复某个特定日期的文件,添加:--restore-time "2002-01-25"
结论:Duplicity 非常棒,而且速度也很快。这是因为善用 libsync 让备份变得很小,同时也因为他们保持了备份文件的索引,这样为了获得文件列表无需对整个备份进行读取。备份文件很小,划分为多个小文件,这样源机器就不需太多的临时空间。用起来也非常简单:他们能够完成所有递增和完整备份的工作,从而让你能够把关注焦点放在对什么进行备份和恢复上。
提示:与如何备份系统一样,你需要不时进行一下“消防演习”,对恢复流程进行试验。建议你将备份流程打包在一个 shell 脚本中,这样每次都可以使用同一种方式。
再次强烈推荐: http://duplicity.nongnu.org
原文:http://everythingsysadmin.com/2010/10/review-the-duplicity-backup-sy.html
作者:Tom Limoncelli
【编辑推荐】