BackupPC: 備份伺服器

English Version

在我們學校,像其它許多學校和機構,備份自己的資料是事後想到的或許根本沒有做備份。直到災難發生時,如你電腦一個磁碟機死了,然後你真正開始懂的備份你資料的重要性。除了令人神經崩潰的經驗,重建自己原 來幾個月的資料是非常困難和耗費時間。通常重建不可能會達到 100%。

今年,我們學校想集中我們全校備份資料的工作。所以,我們必須建或購買一個備份伺服器。要買專有的備份伺服器會花費超過 二十萬新台幣(6,655 美金),太昂貴了!熟悉 Linux 的我相信應該在網際網路可以找到開源企業級的備份軟體。谷歌搜索後,三名開源備份解決方案脫穎而出:Amanda, BaculaBackupPC。我決定使用 BackupPC 因為很容易安裝,並被認為是一個企業級的備份解決方案。如果這是可行的話,那麼買一台電腦,一個約 4TB - 6TB 的硬碟,備份伺服器的總成本大約是二萬新台幣(665 美金)。備份軟體當然是免費的!

我現在使用的是 Fedora20 當備份伺服器。Fedora 20 的 BackupPC 版本為 3.3.0-2,rsync 的版本為3.1.0-5。我將使用 rsyncd 傳輸方法,因為這是最快的方法來備份資料。因此,對於 Windows XP 客戶端,我要使用的是 cwRsync 的最新免費版和 rsync 的版本為 3.1.1pre1

我假設以下:

網域 example.com
Linux BackupPC 伺服器 backup.example.com 192.168.1.1
Windows XP backup 備份用戶 data.example.com 192.168.1.2

伺服器:

BackupPC 需要 httpd (Apache) 伺服器已經安裝了。如沒有的話,安裝方式是::

yum install httpd

然後就可以安裝 BackupPC:

yum install BackupPC

yum 也會一起安裝所有 BackupPC 所需要的檔案。

安裝 BackupPC 之後,會自動建立一個新使用者 backuppc:backuppc。

編輯 /etc/httpd/conf.d/BackupPC.conf 加:

# Apache 2.4
<RequireAll>
    Require valid-user
    <RequireAny>
        Require local
        Require host example.com  <== 加這一列。這樣所有在網域裡的電腦都可以連線到 BackpPC 伺服器。
    </RequireAny>
</RequireAll>

建立一個使用者 (backuppc) 來管理 BackupPC:

htpasswd -c /etc/BackupPC/apache.users backuppc

htpasswd 會要求你輸入密碼。當你連接到 backup.example.com 時,你登入為 backuppc 和你所給的密碼。

如果你想增加管理員,例如 ben,建立 ben 和他的密碼:

htpasswd /etc/BackupPC/apache.users ben

編輯 /etc/BackupPC/config.pl (我只改以下兩個項目):

$Conf{TopDir} = '/var/lib/BackupPC/'; ==> $Conf{TopDir} = '/backup/backuppc/';  <== 改變備份資料的目錄/檔案到 /backup/backuppc
$Conf{PingPath} = ''; ==> $Conf{PingPath} = '/usr/bin/echo';

編輯 /etc/BackupPC/hosts 然後檔案最下面加這一列:

data 0 backuppc ben

data 要備份電腦主機 的名稱 (data.example.com)
0 使用固定 IP
backuppc data 主機備份資料的管理員
ben data 主機備份資料另一個管理員。如你想自己一個人來管理就不要放 ben

我的硬碟是這樣分割:

/dev/sda1 /boot 1 GB 即使使用 GRUB2 啟動載入程式,空間一定足夠
/dev/sda2 / 50 GB Linux 作業系統
/dev/sda3 /backup 剩下少 10 GB 為 swap 使用 要放備份資料的分割區
/dev/sda4 swap 10 GB swap

因為我想把所有備份資料放在 /backup/backuppc/,所以,先到 /backup 然後建立 backuppc 目錄,改變 backuppc 目錄的屬性和擁有者為 backuppc:backuppc (還記得安裝 BackupPC 之後所建立的使用者?)。

cd /backup
mkdir backuppc
chmod 750 backuppc
chown backuppc:backuppc backuppc

現在備份伺服器設定已完成。必須要重新啟動 httpd 和 backuppc:

systemctl restart httpd
systemctl restart backuppc

刪除一個主機和相關的備份資料

要完全刪除客戶及其所有備份,在 conf/hosts (/etc/BackupPC/hosts) 檔案刪除主機名稱。然後,也要刪除在 __TOPDIR__/pc/ (/backup/backuppc/pc/) 主機名稱的目錄。無論何時更改 hosts 檔案,必須送 backuppc 一個 HUP(-1)信號,叫 backuppc 重新讀取 hosts 檔案內容。如果你不這樣做,下次定期喚醒時 backuppc 會自動重新讀取 hosts 檔案內容。

退休一個主機

如果你想停止備份舊的客戶端電腦,但仍希望保持 BackupPC 的備份資料就可以通過 Web 界面禁用備份:

Select a host...
點 Edit Config
點 Schedule
點 Override 然後設 BackupsDisable 為 2

設為 1 時:允許手動備份。設為 2 時:禁止任何備份。

客戶 (Windows XP)

下載 cwRsync_5.3.0_Free.zip,Junction.zip,rsyncd.conf 和 rsyncd.secrets 到 c:\rsyncd。

解壓 cwRsync_5.3.0_Free.zip 和 Junction.zip 到 c:\rsyncd。

建立 rsyncd.cmd 檔案,內容為:

@echo off
c:\rsyncd\rsync --config=/cygdrive/c/rsyncd/rsyncd.conf --daemon

編輯 rsyncd.conf:

use chroot = false
max connections = 2
lock file = c:/rsyncd/rsyncd.lock
[backup]    <== 模組名稱
    path = /cygdrive/c/rsyncd/backup  <== 目錄 d:\我的輩分 的 symlink
    comment = 描述被份資料的內容
    strict modes = false
    auth users = backuppc   <== 使用 htpasswd 所建立的使用者名稱
    secrets file = c:/rsyncd/rsyncd.secrets
    hosts allow = 192.168.1.1   <== 允許 backup 伺服器連接
    read only = false
    list = false

path = :如果你要備份整個 d:\ 磁碟機,用 path = /cygdrive/d/ 就可以了。但是,如果你想備份一個特定的目錄,並且只要你使用純 ASCII 編碼的目錄名稱,就不會有問題。使用 ASCII 延伸編碼像德國的 Umlaut (Ü) 或法國的 cedilla (Ç) 會產生找不到目錄的問題。意思是說,任何字元的第 8 位元為 1 時就會有這個問題。台灣使用的 Windows XP 就有這個問題。因為使用的編碼是繁體字 (BIG5) 而 BIG5 的字元包含 2 個位元組。第一個位元組的第 8 位元一定是設為 1。我覺得這是一個軟體錯誤。

那怎麼辦?junction.exe 就派上用場了!junction.exe 建立一種,Linux 使用者很熟悉的,symlink。簡單的說,junction.exe 建立目錄或檔案的別名。為了不弄亂備份客戶端的目錄和檔案結構,我建議將所有 symlinks 都放在 c:\rsyncd。. 假如我想對目錄 「d:\我的備份 」做一個 symlink 命名為 backup,我先到 c:\rsyncd,然後執行以下指令:

junction backup d:\我的輩份.

rsyncd.conf 的 path 就應該是 path=/cygdrive/c/rsyncd/backup。這樣就不會有問題了。

編輯 rsyncd.secrets:

更改 #UUU:PPP ==> myname:mypassword

備份伺服器要連線到客戶端時會使用 myname:mypassword。

cwRsync 沒有 rsyncd.conf 和 rsyncd.secrets 這兩個檔案。我從 cygwin-rsyncd-3.0.9.0_source.zip 檔案拿的。但是我比較喜歡用 cwRsync 的 rsync.exe 因為是最新而最快的版本。 我上面所提到的所有檔案都可以在我 ftp 伺服器下載

執行 rsyncd.cmd 之後,Windows XP 備份客戶端已準備就緒了,等待備份伺服器連線。如果你啟用防火牆,會出現一個信息。請允許和打開 rsync 埠 873。

為了確保 rsync 是真的在執行,請一起按 Ctrl + Shift + Esc 鍵。這會顯示 Windows 工作管理員。點「處理程序」你會看到 rsync 列在哪裡。

現在該連接到 backup.example.com 網頁伺服器來做進一步配置 BackupPC。. 啟動你的瀏覽器然後鍵入:

http://backup.example.com/backuppc

鍵入使用者名稱 backuppc 然後鍵入密碼。 連接到 BackupPC 網頁介面之後,在螢幕左上面點 Select a host... 然後點選主機名稱 (data)。點 Edit Config。點 Xfer 然後修改以下項目:

XferMethod 點 Override 然後選傳輸方法為 rsyncd。
ClientCharset 空的
ClientCharsetLegacy 點 Override 然後刪除內容 (iso-8859-1)。
RsyncShareName: 點 Override 然後輸入你在 rsyncd.conf 命名的模組名稱。在中括號裡,就是 backup。
RsyncdUserName 點 Override 然後輸入你在 rsyncd.secrets 所設定的使用者名稱代替 UUU (myname)。
RsyncdPasswd 點 Override 然後輸入你在 rsyncd.secrets 所設定的使用者密碼代替 PPP (mypassword)。

點上面的 Save。在左邊點 data home。然後點 Start Full Backup。BackupPC 現在會連接到 Windows XP 客戶而開始做完全備份。

按預設備份排程:

完全備份 每七天 ,保留最新備份
增量備份 每天,保留六個最近備份

當你點了 Save 之後,BackupPC 在 /etc/BackupPC/pc/ 裡會建立一個配置檔案 hostname.pl,就是 data.pl。所以,如果你想改變網頁介面的語言,例如法語,在 /etc/BackupPC/pc/data.pl 加一列:

$Conf{Language} = 'fr';

BackupPC 支援以下語言:

捷克 (cz.pm)、德文 (de.pm)、英文 (en.pm)、西班牙文 (es.pm)、法文 (fr.pm)、意大利文 (it.pm)、日文 (ja.pm)、荷蘭(nl.pm)、
波蘭 (pl.pm)、巴西葡萄牙文 (pt_br.pm)、俄羅斯 (ru.pm)、烏克蘭 (uk.pm) 和簡體中文,中國 (zh_CN.pm)。

有沒有注意到台灣使用的繁體字沒有支援!沒有關係,我用 iconv 將 zh_CN.pm 轉換成 zh_TW.pm:

我拿 zh_CN.pm (UTF8 簡體字) 轉換成中國使用的 GB2312。GB2312 轉換成台灣使用的 BIG5。最後把 BIG5 轉換成 UTF8 (繁體字)。

因為中國和台灣的用語有一些差別,例如:(中國) 磁盤,(台灣) 磁碟,我編輯 zh_TW.pm 改一改這些用語就可了。zh_TW.pm 檔案也可以從我的 ftp 伺服器下載。把這檔案放在 /usr/share/BackupPC/lib/BackupPC/Lang/,然後用 $Conf{Language} = 'zh_TW'; 就可以了。

要確定啟動電腦時會自動執行 c:\rsyncd\rsyncd.cmd 將 rsyncd.cmd 指令加入到系統「啟動」檔案夾:

1. 開始 --> 所有程式 --> 右點選「啟動」檔案夾 --> 開啟
2. 檔案 --> 新增 --> 捷徑
3. 瀏覽 --> 點選要執行的程式,就是瀏覽到 c:\rsyncd 然後點選 rsyncd.cmd
4. 下一步 --> 完成 (你現在可以在「啟動」檔案夾看到這捷徑)
5. 下一次你啟動你的電腦,rsyncd.cmd 會自動執行了。

以下是 Windows XP 繁體中文(BIG5 編碼)版本客戶端的完全備份後的圖片。很顯然,我不能使用該目錄名稱因為是使用中文編碼的。所以,我用 junction.exe 做一個 symlink 命名為 backup:

恭喜你。你現在已經擁有一個企業級的備份伺服器!


下一次,當我拿到一個 Windows 7 電腦,我會試一試如何設定 Windows 7 的備份客戶。在此,這篇文章到此結束。

客戶 (Windows 7)

2014/09/27: 我終於拿到了一台 Windows 7 電腦。 於是我開始試驗如何設定 Windows 7 備份客戶。程序是跟 Windows XP 一樣,但 Windows 7 比較嚴格,即使是使用者 (在這裡我用使用者名稱為 ben) 也被設定為管理員。所以設定 Windows 7 需要額外的步驟。

從我的 ftp 伺服器除了 Junction.zip 之外 (Windows 7 有一樣的程式名叫 mklink) 下載 所有檔案。 所下載的檔案平常會放在使用者的「家」目錄 c:\users\ben 下的「下載」目錄 (c:\users\ben\download)。解壓檔案 cwRsync_5.3.0_Free.zip。

現在,我們要執行有管理員權限的「命令提示字元」:

開始 --> 所有程式 --> 附屬應用程式 --> 右點「命令提示字元」 --> 點選「以系統管理員身分執行」。

到 c:\ (c: 根目錄)。我仍然喜歡把所有備份客戶所需要的檔案放在 c:\rsyncd。所以建新目錄命名為 rsyncd 然後拷貝所有需要的檔案:

cd \
mkdir rsyncd
cd rsyncd
copy c:\users\ben\download\rsyncd.*
copy c:\users\ben\download\cwRsync_5.3.0_Free\*

這時,我要備份目錄 d:\新資料夾-1。所以我要建一個 symlink 我命名為 win7backup:

mklink /J win7backup d:\新資料夾-1

編輯 rsyncd.conf 和 rsyncd.secrets 跟 Windows XP 一樣:

notepad rsyncd.conf        <== 跟 Windows XP 一樣但現在的 path 是: path=/cygdrive/c/rsyncd/win7backup
notepad rsyncd.secrets    <== 跟 Windows XP 一樣

與 Windows XP 一樣,建立檔案 rsyncd.cmd。

檔案 rsync.exe 必須要設定有管理員權限,要不然備份過程會失敗。使用「檔案管理員」瀏覽到 c:\rsyncd 然後右點檔案 rsync.exe -->內容 -->相容性 --> 以系統管理員的身分執行程式。

現在可以執行 rsyncd.cmd 而且,與 Windows XP 一樣,會彈出一個訊息。點選「允許」rsync.exe 就會被執行為一個「服務程式」(service)。

連線到你的備份伺服器並且設定你新的備份客戶,然後做一個「完全備份」。如果一切都沒有問題,最後要做的是要確保每次啟動電腦時 c:\rsyncd\rsyncd.cmd 會自動被執行。將 rsyncd.cmd 指令加入到系統「啟動」檔案夾。

rsyncd.cmd 也需要以管理員的 身分來執行。但是在 Windows 7,批次檔 (.cmd 或 .bat) 是無法設定為以管理員的 身分來執行。但是捷徑檔可以。所以右點 rsyncd.cmd 的捷徑檔案 --> 內容 --> 捷徑 --> 進階 --> 以系統管理員身分執行。

以下是 Windows 7 繁體中文(BIG5 編碼)版本客戶端的完全備份後的圖片:

官方文件:http://backuppc.sourceforge.net/faq/BackupPC.html

蔡由世神父
2014/09/19