17.8. 備份基礎概念

為了要能夠從磁碟故障、意外刪除文件、隨機文件損壞或完全機器毀壞,包含本地備份毀壞進行恢復,執行備份計劃是必要的。

備份的類型與排程會依情況有所不同,取決於資料的重要性、檔案還原所需的程度以及可接受的停機時間。一些可用來備份的技術有:

通常會混合使用各種備份技術,例如,建立一個排程每週自動做儲存於異地的完整系統備份,並使用每小時的 ZFS 快照來輔助備份。此外,在對檔案做編輯或刪除前手動備份各別目錄或檔案。

本章節會介紹一些可以用來在 FreeBSD 上建立與管理系統備份的工具。

17.8.1. 檔案系統備份

要備份一個檔案系統,會用到 dump(8) 這個傳統 UNIX® 程式來建立備份,並可使用 restore(8) 來還原備份。這兩個工具可在磁碟區塊的層級運作,這個層級比由檔案系統建立檔案、連結與目錄的抽象層級還要低,因此不像其他的備份軟體,dump 必須一次備份整個檔案系統,且無法只備份部份檔案系統或跨多個檔案系統的目錄樹,dump 會備份構成檔案與目錄的原始資料區塊,而非直接備份檔案與目錄。

注意:

在根目錄使用 dump,會無法備份 /home, /usr 或其他許多的目錄,由於這些目錄通常是其他檔案系統的掛載點或連結到其他檔案系統的符號連結。

還原資料時,restore 預設會儲存暫存檔案於 /tmp/,當使用一個 /tmp 較小的復原磁碟時,請設定 TMPDIR 到一個擁有較多可用空間的目錄以讓還原可以順利執行。

當使用 dump 時,請小心最早自 AT&T UNIX®,circa 1975 的版本 6 仍有一些問題存在,預設的參數會假設備份到一個 9 軌的磁帶,這並非其他類型的媒體或現今可用的高密度磁帶,必須另外在指令列修改這個預設值。

雖然可以使用 rdump(8)rrestore(8) 工具可以跨網路備份一個檔案系統到另一個系統或備份到連結另一台電腦的磁帶機,但這使用兩個工具備份的安全性並不足夠。

可改以在較安全的 SSH 連線上使用 dumprestore。以下例子會建立一個完整、壓縮的 /usr 備份並透過 SSH 連線傳送備份檔案到指定的主機。

範例 17.1. 在 ssh 使用 dump
# /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \
          targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz

這個例子會設定 RSH,以便透過 SSH 連線寫入備份到遠端系統的磁帶機:

範例 17.2. 在 ssh 使用 dump 透過 RSH 設定
# env RSH=/usr/bin/ssh /sbin/dump -0uan -f targetuser@targetmachine.example.com:/dev/sa0 /usr

17.8.2. 目錄備份

系統已有內建數個工具可在需要時用來備份與還原指定的檔案與目錄。

要備份一個目錄中的所有檔案最好的選擇是 tar(1),這個工具最早可以追朔自 AT&T UNIX® 版本 6 時,因此預設會做一個遞迴備份到一個磁帶機,可以使用參數來改指定備份檔案的名稱。

這個例子會建立目前目錄的壓縮備份並儲存至 /tmp/mybackup.tgz,在建立備份檔案時,要確認備份檔案不要儲存到與目前備份目錄相同的目錄。

範例 17.3. 使用 tar 備份目前目錄
# tar czvf /tmp/mybackup.tgz . 

要還原整個備份,先 cd 進入要放置還原檔的目錄並指定備份的名稱。注意,這個動作會覆寫任何在該還原目錄中任何較新版的檔案,當不確定時,可先還原到一個暫時的目錄或指定備份檔中的檔案做還原。

範例 17.4. 使用 tar 還原目前目錄
# tar xzvf /tmp/mybackup.tgz

除此之外還有許多可用的參數在 tar(1) 中會有說明。本工具也支援使用排除模式 (Exclude pattern) 來指定那些檔案應該在備份指定目錄或自備份還原檔案時排除。

要使用指定的檔案與目錄清單做備份使用 cpio(1) 是不錯的選擇。它並不像 tarcpio 並不知道如何走訪目錄樹,所以必須提供檔案的清單才能做備份。

例如,檔案的清單可以使用 lsfind 來產生。以下例子會建立一個目前目錄的遞迴清單然後轉送 (Piped) 給 cpio 來建立名稱為 /tmp/mybackup.cpio 的備份檔。

範例 17.5. 使用 lscpio 來製作目前目錄的遞迴備份
# ls -R | cpio -ovF /tmp/mybackup.cpio

有一個備份工具嘗試整合 tarcpio 所提供的功能,便是 pax(1)。經歷數年,各種版本的 tarcpio 變的有一些無法相容。POSIX® 開發出 pax,嘗試讀取與寫入各種版本的 cpio and tar 格式並加入自己的新格式。

以先前的例子改使用 pax 會是:

範例 17.6. 使用 pax 備份目前目錄
# pax -wf /tmp/mybackup.pax .

17.8.3. 使用資料磁帶備份

隨著磁帶的技術持續發展,當今的備份系統將異地備份與本地可移除媒體做了結合。FreeBSD 支援任何使用 SCSI 的磁帶機,如 LTODAT,並有限制的支援 SATAUSB 磁帶機。

SCSI 磁帶機在 FreeBSD 會使用 sa(4) 驅動程式以及 /dev/sa0, /dev/nsa0/dev/esa0 裝置,實體裝置名稱為 /dev/sa0,當使用 /dev/nsa0 時,備份程式在寫入檔案之後不會倒帶,這可允許寫入超過一個檔案到磁帶,而使用 /dev/esa0 時,當關閉裝置後便會退出磁帶。

在 FreeBSD 中會使用 mt 來做磁帶機的控制操作,例如在磁帶中搜尋檔案或寫入磁帶控制記號到磁帶。例如,要保留磁帶上的前三個檔案,可以在寫入新檔案前跳過這些檔案:

# mt -f /dev/nsa0 fsf 3

這個工具尚支援許多操作,請參考 mt(1) 了解詳情。

要使用 tar 寫入單一檔案到磁帶,可指定磁帶裝置的名稱以及要備份的檔案:

# tar cvf /dev/sa0 file

要從磁帶上的 tar 封存檔還原檔案到目前的目錄可:

# tar xvf /dev/sa0

要備份一個 UFS 檔案系統可使用 dump。以下例子會備份 /usr 並在完成時不做倒帶:

# dump -0aL -b64 -f /dev/nsa0 /usr

要以互動的方式從磁帶上的 dump 檔案還原到目前目錄:

# restore -i -f /dev/nsa0

17.8.4. 第三方備份工具

FreeBSD Port 套件集提供了許多第三方工具可用於排程建立備份,簡化磁帶備份並讓備份更簡單方便。許多這類的應用程式是以客戶端/伺服器為基礎,可用來自動化單一系統或網路上所有電腦的備份。

較熱門的工具包含 Amanda, Bacula, rsync 以及 duplicity

17.8.5. 緊急還原

除了正常的備份外,建議將下以步驟做為緊急準備計劃的一部份。

替以下指令的輸出建立一份可列印的複本:

  • gpart show

  • more /etc/fstab

  • dmesg

在安全的地方保存這份列印結果與安裝媒體的複本,在緊急還原時可能會需要,接著開機進入安裝媒體並選擇 Live CD 以存取救援 Shell (Rescue shell),這個救援模式可以用來檢視目前系統的狀態,若有需要,可重新格式化磁碟然後自備份還原資料。

注意:

FreeBSD/i386 10.4-RELEASE 的安裝媒體未含救援 Shell,針對該版本,可改自 ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/ISO-IMAGES/10.4/FreeBSD-10.4-RELEASE-i386-livefs.iso 下載 Livefs CD 映像檔並燒錄。

然後,測試救援 Shell 下的備份。記錄下整個程序,將這份記錄隨媒體、列印結果、備份檔一併保存,這份記錄可以避免在緊張壓力下做緊急還原時因不慎造成備份的毀壞。

要再安全性一點,則可將最新的備份儲存在與實體電腦與磁碟機有一段明顯距離的遠端位置。

本文及其他文件,可由此下載: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

若有 FreeBSD 方面疑問,請先閱讀 FreeBSD 相關文件,如不能解決的話,再洽詢 <questions@FreeBSD.org>。

關於本文件的問題,請洽詢 <doc@FreeBSD.org>。