[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