[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

<!> 此页自 2009 年 9 月 17 被遗弃后,已不再被维护。请谨慎地参考这篇文章,直至本通告被删除为止。

BackupPC

这份指南将会协助你运用 CentOS testing 软件库内的 RPM 来设置 BackupPC。它不会详细地解释 BackupPC 所支持的一切设置。它亦会假设你会设置 BackupPC 通过 rsync 来进行备份。BackupPC 可支持 archive、tar、smb 及 rsyncd 的备份,但这份指南只会专注采用 rsync 的 Linux 主机。BackupPC 拥有论充足的文档关于设置方面的选项,这些指引亦收藏在它的网页界面中。另外,BackupPC 应该驻于一台专用的服务器上,因为 Apache 必须以系统上 BackupPC 用户的身份来执行,而这样会影响网页服务器的正常运作。

1. 系统

CentOS 5.x

2. 参考文件

[http://backuppc.sourceforge.net/]

3. 系统设置

3.1. 设置软件库

首先要做的事情就是将 CentOS testing 软件库连同 yum-priorities 插件一并安装。

# cd /etc/yum.repos.d
# wget http://dev.centos.org/centos/5/CentOS-Testing.repo
# yum install yum-priorities

请依从 wiki 内有关设置 (priorities)] 的指引。如果你安装了 RPMFroge 的软件库,你必须确定所有 CentOS Base 项目的优先次序是 1,RPMForge 项目的优先次序是 2,而 CentOS testing 软件库的优先次序是 3。如果你并未安装 RPMForge 软件库,所有 Perl 组件将会下载自 testing 软件库,否则,它们将会来自 RPMForge。要设置 RPM 软件库,请依从 wiki 内有关 RPMForge]的指引。

3.2. 安装 BackupPC

接下来,请安装 BackupPC 的 RPM、Apache、及 mod_perl。Perl 所依赖的一切将会自动被收集起来。

# yum --enablerepo=c5-testing install backuppc httpd mod_perl

3.3. 设置 Apache

如上述所提及,假若要一切正常地与 CGI 及 mod_perl 运作,Apache 的执行身份必须是安装 RPM 时在系统上所创建的 BackupPC 用户。请你现在就把合适的值设于 httpd.conf 内。

# vim /etc/httpd/conf/httpd.conf
## 更改 User apache 为 User backuppc
User backuppc
Servername backuppc.domain.com:80

存储并离开文件,然后更改被创建于 conf.d 目录下的 backuppc.conf 文件。

# vim /etc/httpd/conf.d/backuppc.conf
## 将 Allow from 127.0.0.1 改为 all
Allow from all

存储并离开这个文件,然后创建你将会用来访问网页界面的用户及密码。

# htpasswd -c /var/lib/backuppc/passwd/htpasswd your_user
New password: your_password
Re-type new password: your_password
Adding password for user your_user

最后,引导 Apache 并设置它于开机时引导。然后浏览你的机器并确定 Apache 可以派出测试页面。

# service httpd start
# chkconfig httpd on

请浏览 http://你的服务器 并确定 Apache 能正常运作。

4. BackupPC 服务器设置

4.1. BackupPC 的主要设置

初次设置时,你必须在命令行上编辑数个参数,额外的你可以通过命令行或网页界面来完成。请打开 BackupPC 的主要配置文件,然后设置下列参数。TopDir 这个路径就是放置实际备份的地地。它的缺省值是 /var/lib/backuppc。我利用一个加密的分区来作备份,因此我的路径是 /srv/backuppc。请按你的需要修改它。

# vim /etc/BackupPC/config.pl

## BackupPC 缺省的传输方法。
$Conf{XferMethod} = 'rsync';

## 备份数据存放位置的路径。
$Conf{TopDir}      = '/var/lib/backuppc';

## init.d 内用来引导服务器的路径。
$Conf{ServerInitdPath} = '/etc/init.d/backuppc';
$Conf{ServerInitdStartCmd} = '$sshPath -q -x -l root $serverHost$serverInitdPath start';

## 你以 htpasswd 创建获授权的用户。
$Conf{CgiAdminUsers}     = 'your_user';

4.2. 设置 BackupPC Sudo

backuppc 这位用户须要拥有 sudo 权限来执行 gtar 及 tar 的指令。否则,BackupPC 便不能正确地运作。Sudo 应该已被安装在你的系统上,因此你可以通过 visudo 这个指令来作出所需的修改。

# visudo

## 注释掉 Defaults requiretty
## 加入以下两行。
Defaults !lecture
backuppc ALL=NOPASSWD:/bin/gtar,/bin/tar

存储并离开这个文件,然后重新引导 Apache,引导 BackupPC 并设置它在开机时引导。

# service httpd restart
# service backuppc start
# chkconfig backuppc on

请打开你的浏览器并进到位于 http://你的服务器/backuppc 的 BackupPC 网页界面。你须要以先前创建的用户及密码来登录,然后你便会看见一版关于 BackupPC 服务器一般信息的页面。要不然,请重复你的步骤并确定 Apache 及 BackupPC 的设置皆正确。

4.3. BackupPC SSH 金钥

由于我们会专注以 rsync 进行备份,你也许会想为 backuppc 进程创建无须密码的金钥,让它能远程连接到需要备份的主机上。请以 root 的身份在 /var/lib/backuppc 内置立隐藏的 SSH 目录,继而修改权限。

# cd /var/lib/backuppc
# mkdir .ssh
# chown backuppc.backuppc .ssh
# chmod 700 .ssh

接着,请改为 backuppc 这个用户。你须要指定一个指令壳,因为 backuppc 这位用户缺省是没有指令壳的。然后请利用 ssh-keygen 创建没有密码的 SSH 金钥。

# su -s /bin/bash backuppc
bash-3.2$ ssh-keygen -t dsa

Generating public/private dsa key pair.
Enter file in which to save the key (/var/lib/backuppc/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/lib/backuppc/.ssh/id_dsa.
Your public key has been saved in /var/lib/backuppc/.ssh/id_dsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx backuppc@host.domain.name

4.4. 复制服务器金钥到客户端

你必须将你服务器上创建的金钥复制到每一台要被备份的客户端里。就此,请继续上一步,在服务器上以 backuppc 这个用户的身份执行 ssh-copy-id 这个指令。

bash-3.2$ ssh-copy-id -i .ssh/id_dsa.pub root@host_to_backup

它应该会将金钥复制到主机里,并通过 SSH 把你登录该台机器。

5. 设置客户端

5.1. BackupPC 的基础

在你开始使用网页界面前,让我们为应用于各主机的设置及选项提供一些基本的解释。我所阅读的其它指南在这方面都令我不知所措。你刚才所编辑的主要配置文件,位于 /etc/BackupPC/config.pl,藏有 BackupPC 的所有缺省值。这个配置文件可以在命令行上编辑,也可以通过为每个选项提供文档的图像界面来修改。你登录网面界面时,在左边可看见 Edit Config 这个页签。当你点击它时,你其实在编辑 /etc/BackupPC/config.pl 这个文件。直至你阅读文档为止,请不要改动任何缺省的选项,否则你可能很快便会发现一个失效的备份系统。

虽然主要配置文件提供所有缺省值,你亦可以为个别主机更改这些设置。当你在网页界面上加入一台主机后,你为该主机所加入的任何设置值将会取代缺省值。这样做亦会创建一个独立的文件,/etc/BackupPC/pc/主机名称.pl。这个文件藏有所有曾经被修改,或与 /etc/BackupPC/config.pl 内有差别的设置值。譬如说,这些文件的内容会是你为某主机设置在备份时要包括或排除的目录。

除非你将会在所有主机上备份相同的目录,否则你在创建了一台主机后便应利用此功能来设置目录。这一步可以通过 Xfer 页签上的 RsyncShareName 来完成。紧随这个设置之下是 BackupFilesExclude 选项,让你将 /var/cache 等目录排除于备份之外。

BakcupSettings 这个主页签里,你会找到 DumpPreUserCmd。它容许你指定任何脚本在在进行目录的 rsync 前被执行。举个例说,假如你需要令数据库转储然后再备份,你可以在这个脚本里指定。SourceForge 上已然备有 AutoMySQLBackup,所以它在下一部份会有所描述。DumPostUserCmd 容许你在备份后执行一个指令,而 DumpPreShareCmdDumpPostShareCmd 容许你在分享一个备份之前及之后执行脚本。注:很多人似乎被这些设置里的参数所混淆。你不能将这些字段视作命令行或指令壳。指令壳语法在这里不会生效,因此你如果需要执行多个指令或脚本,请将它们放进客户端的一个脚本里,让它们一个接一个地被执行。

最后,你可以在 Schedule 这个页签设置如何进行完整及渐进式的备份。你可以在 Edit Config 将它设置为缺省级别,又或者为个别主机进行设置。缺省值是保留一套完整备份及六套渐进式的备份。这样你便会拥有一个星期的备份。FullPeriod 的值是 6.97,意思即是每 7 日便进行一次完整备份。IncrPeriod 的值是 0.97,意思即是每日都进行渐进式备份。IncrKeepCnt 的值是 6,也就是说 6 日渐进式备份后,就有一日是完整备份。你也可设置 BlackoutPeriods,即是你不想进行备份的日子。这里的每个设置在文档内都有所解释,因此这详阅。

5.2. 在网页界面加入客户端

接下来,请通过网页界面加进客户端及它的一切设置。请点击 Edit Hosts 页签,继而按 Add 按钮。填入你想备份的主机名称,然后在 User 部份之下,以 backuppc 作为用户。这必须是 backuppc,因为备份是已这位用户来引导的。其它设置都不行。完成后,请按顶部的 save 按钮。当你点击位于左面的 Host Summary 连结时,你应该能看见你的新主机。要开始改动主机的设置,请点击机名,然后一个新的本地将会在顶部打开。请点击在主机名称之下、最左上方的 Edit Config。

由此点起,你所做的一切修改将会取代缺省的设置值,并会被存储到 /etc/BackupPC/pc/主机名称.pl 这个文件内。请点击 Xfer 这个按钮,然后开始在 RsyncShareName 下加入目录。在它以下的 Include/Exclude 本地内,你可以将任何要排除的东西加进 BackupFilesExclude。完成后,请确定会已点击在最顶部的 save。加入一台主机大致上便是这样。如果你选择一台主机,你可以手动式地开始及终止备份来检查操作是否正常。

根据缺省值,BackupPC 会日以继夜地、每小时醒来检查是否有主机被排序作备份。要更改这个特性,请进到 Server configuration 页签下的 EditConfig 部份。请更改 WakeupScahedule 来迎合你的需要。

5.3. 将数据库备份

要在所备份的主机内包含数据库的转储,你有两个选择。第一,你可以写一个在主机进行备份前执行的脚本。第二,你可以利用 SourceForge 上的 AutoMySQLBackup 脚本计划来转储你的 MySQL 数据库。通过在脚本上作出简单的修改,你可以轻易地令它支持 PostgreSQL 数据库。开始时,请从 SourceForge] 下载脚本。请将这个脚本复制到要备份的主机,将它于在 /usr/local/bin 等位置。我一般会将该脚本换名来反映它所转储的主机名称。这一步并非必须,它只是较有逻辑而己。然而,你必须确定这个脚本是可执行的。

# scp automysqlbackup.sh.2.5 host_name:/usr/local/bin
# ssh host_name
# mv automysqlbackup.sh.2.5 mysql_hostname_dump
# chmod +x mysql_hostname_dump

这个脚本内已包含所有选项的详尽注释。请你务必从头阅读一次,好让你知道它在做什么。AutoMySQLBackup 连接到并转储所有你指定的数据库到 /backups、发电邮给你(若设置了的话)、并且采用循环的方式来确定你拥有一组数据库转储。

请确定你已填入 USERNAME、PASSWORD、及 DBNAMES。如果你想设置电邮,请遵照脚本内的方法来进行设置。设置的过程非常简单,因此当你把选项修改好,请在要被备份的主机上手动式执行脚本一次。这样你可以检查 /backups 这个目录有否被创建,与及转储有否发生。

# cd /usr/local/bin
# ./mysql_hostname_dump

……大量输出……或错误……请据此作出修正。

# cd /backups
# ll

你应该会看见一个分开每日、每周、及每月的目录结构,而每个数据库的名称又会以独立目录的型式出现在它们之内。你可以遍历这些目录来找出对应你的数据库的 .sql.gz 文件。

5.4. 为 BackupPC 主机加入 DumpPreUserCmd

既然转储用的脚本已经实际地在主机上设置好,我们便可以在 BackupPC 的网页界面设置 DumpPreUserCmd 要通过 SSH 连接到被备份的主机并执行 AutoMySQLBackup。请在网页界面选择一台主机,然后选择位于左上方的 EditConfig 页签。选择 BackupSettings 页签并进到 User Commands 以下部份。第一行便是 DumpPreUserCmd。请在这部份加入下面数行。

$sshPath -q -x -l root $host /usr/local/bin/mysql_hostname_dump

选择顶部的 save,然后进到主机的 Xfer 页签。请确定你在 RsyncShareName 内加入 /backups 这个目录,否则你的转储永远不会从主机复制出来。这应便完成了,现在你的主机的 MySQL 数据库将会在 BackupPC 对目录进行 rsync 前被转储。如上述所说,你可以简易地编辑 AutoMySQLBackup 并改为一个 AutoPostgreSQLBackup 脚本。你只须将所有 MySQL 的语法改为 PostgreSQL 的指令及选项。

6. BackupPC 的其它功能

之前已经提及,BackupPC 亦可以将 SMB 的共享资源备份、利用 tar 来进行备份、及将备份保存在其它媒体上。BackupPC 的相关文档对每个功能都有所解释。

$Conf{XferMethod} = 'rsync';

The valid values are:

      - 'smb':     通过 smbclient 及 SMB 通讯协议进行备份及撤消。
                   WinXX 的最简单选择。

      - 'rsync':   通过 rsync(通过 rsh 或 ssh)进行备份及撤消。
                   linux/unix 的最佳选择。亦是 WinXX 的好选择。

      - 'rsyncd':  通过客户端上的 rsync 守护程序进行备份及撤消。
                   执行着 rsyncd 的 linux/unix 客户端的最佳选择。亦是 WinXX
                   的好选择。

      - 'tar':     通过 tar 或在 ssh、rsh 或 nfs 里执行的 tar 进行备份及撤消。
                   linux/unix 的一个好选择。

      - 'archive': 主机是台特殊的存档主机。备份不会进行。存档主机是用来将其它
                   主机的备份保存到磁带、CDR 或 DVD 等永久性媒体里。

如果你要备份 Windows 主机,你应该采用 SMB,并在 Windows 机器里创建共享资源,又或者在互联网上寻找如何在 Windows 上应用 rsync 及 Cygwin。这些都超越了本篇文章的范畴。要不然,希望你愉快地为机器进行备份。

7. 利用 autofs 将 Windows 主机备份

另一个将 Windows 主机备份的方法就是采用 autofs,它是一个用来自动挂载及卸下文件系统的工具。如果你想进行远程备份,这个方法并不适合你,因为它最适宜用在受信任的本地网络里。密码将会被存储在 BackupPC 服务器上的文件里。不过,假若你在自己的网络上有 Windows 计算机及服务器,这个方法非常好用,因为你不须在 Windows 主机上安装软件或客户端。它却会在有需要时利用 Windows 机器上的 Samba 共享资源自动挂载为文件系统。

7.1. 设置 autofs

你的 Linux 服务器应该已经安装了autofs 这个组件。你首先要做的事情就是加入一个独立的文件来处理 Windows 主机,连同你在进行自动挂载时想传送的选项。请打开 /etc/auto.master 并加入这些内容。

# vim /etc/auto.master
/windows        /etc/auto.windows       --timeout=30    --ghost

这些选项告诉 autofs 以 /windows 作为基本的挂载点,从 /etc/auto.windows 取得所有 Windows 的 autofs 主机,采用 30 秒的闲置时限,并为挂载点创建重影(空置)目录。言下之意就是当挂载闲置 30 秒后将共享资源卸下,并且由于它会留下空置的目录,你不能在未挂载的情况下将它删除。

接着,请将一台主机连同你所需的适当选项加进 auto.windows 这个文件内。

# vim /etc/auto.windows
machinename     -fstype=cifs,ro,credentials=/etc/.autofs.smbpasswd      ://machinename/C\$

这行的意思是通过 cifs 以只读的方式挂载 machinename。一般来说,你不必只读以外的访问权,因为你只是进行文件备份。金钥文件会存储挂载时所需的 samba 用户名称及密码。最后,采用 C 磁盘作为挂载点。如果你的 Windows 安装在另一个磁盘上,或者你的数据放在另一个碟磁别名,请改用它。

请新增金钥文件,当中包含挂载 samba 共享资源时所需的正确凭证。你多数不必加入本地名称,因为除去它应该依然可行。

# vim /etc/.auto.smbpasswd
username=DOMAIN/username
password=password
# chmod 600 /etc/.auto.smbpasswd

这应便完成了它的设置。请重新引导 autofs 当注程序并立即尝试挂载你的共享资源。现在当你进入该目录时,它会自动挂载你的 Windows 机器上的共享资源。只要你逗留在挂载了的目录中,它会保持被挂载。随着你离开该目录,30 秒的闲置时限便会开始计时,然后你的共享资源便会被卸下。

# service autofs restart
# cd /windows/machinename
# mount
//machinename/C$ on /windows/machinename type cifs (ro,mand)

7.2. 设置 BackupPC 使用 autofs 的主机

现在请于 BackupPC 的网页界面,利用先前的方式新增一台主机。加入一般 Linux 主机与 autofs 的 Windows 主机之间的差别并不多。基本上,最大的分别就是你不须用 SSH 来访问该主机,因为将你会在 BackupPC 上挂载那个 Windows 文件系统。

当你加入主机后,进到 Edit Config -> Xfer。请修改以下的 rsync 指令:

RsyncClientCmd = $rsyncPath $argList
RsyncClientRestoreCmd = $rsyncPath $argList

现在,于你要备份的共享资源内,你可采用与备份一般 Linux 服务器时相同的格式。如果你想备份包含空格的目录,请直接输入它的名字。据我所理解,删除 $argList+ 尾部的 + 号能改善处理换码码,因为备份是在本地进行,而不是通过 SSH。

RsyncShareName = /windows/machinename/backup
RsyncShareName = /windows/machinename/Documents and Settings

就是这样了。现在你应该开始看见你的 Windows 目录被备份。

Translation of revision 9


2023-09-11 07:23