使用 tar 備份整個系統
本篇介紹如何使用 tar 進行全系統備份。
使用 tar 進行備份具有壓縮的優點,有助於節省磁盤空間,且使用簡單。此過程只需要以下幾個步驟:
- 從 LiveCD 啟動
- Change root 到 Linux 系統安裝位置
- 裝載其他(如有的話)分區/驅動器
- 添加排除對象
- 使用備份腳本進行備份
為最大限度減少停機時間,如果所有文件系統均駐留在 LVM 卷中,則可以使用LVM 快照在正在運行的系統上進行備份。
從 LiveCD 啟動[編輯 | 編輯原始碼]
許多 Linux 可啟動 CD、U盤等能夠 change root 到系統安裝位置。雖然不是必須 change root 才能執行備份,但這提供了運行腳本的功能,而無需將其傳輸到臨時驅動器或必須在文件系統中找到它。Live 媒體必須與已安裝的 Linux 系統的架構相同(即 i686 或 x86_64)。
Change root[編輯 | 編輯原始碼]
首先,應該在當前的 Linux 安裝系統中設置一個腳本環境。如果您不知道這是什麼,這表示您可以執行擁有的任意腳本,它們是常規程序一樣。如果您的系統未設置好,請參閱這文檔 了解如何操作。接下來要做的是 change root,要了解有關 change root 的更多信息,請參閱 此文檔。Change root 時,不需要裝載任何臨時文件系統(/proc
、/sys
和 /dev
)。臨時文件系統在系統啟動時填充,實際上不需要備份它們,因為它們會干擾正常(和必要的)填充過程,該過程會在任何升級時更改。要 change root,需要裝載當前的 Linux 安裝的 root 分區。示例:
# mkdir /mnt/arch # mount /dev/your-partition-or-drive
使用 fdisk -l
查詢分區和驅動器。然後 chroot:
# cd /mnt/arch # chroot . /bin/bash
arch-chroot
來 chroot 到目標系統 - 備份過程將會失敗,因為這將嘗試備份臨時文件系統、所有系統內存和其他所有東西。請使用普通的 chroot
。此示例明顯使用 bash,但也可以使用其他可用的 shell。現在,您應處於腳本環境中(前提是您在輸入時有獲取 ~/.bashrc
):
~/.bash_profile
# 如果使用 bash,獲取本地 .bashrc source ~/.bashrc
裝載其他分區[編輯 | 編輯原始碼]
要使用的其他分區(如果有的話)需要裝載到適當的位置(例如,如果有單獨的 /home
分區)。
排除文件[編輯 | 編輯原始碼]
tar 能夠忽略指定的文件和目錄。語法是每行一個定義。tar 還可以理解正則表達式(regexp)。示例:
# 排除舊的備份 /opt/backup/arch-full* # 排除臨時文件 /tmp/* # 排除 pacman 的緩存 /var/cache/pacman/pkg/ ...
備份腳本[編輯 | 編輯原始碼]
使用 tar 備份是一個直接過程。以下是一個進行備份的基本腳本,並提供了幾項檢查。需要修改此腳本以定義備份位置,並排除文件(如果有的話),然後在 chroot
和裝載所有分區之後運行此腳本。
#!/bin/bash # 全系統備份 # 備份目標位置 backdest=/opt/backup # 備份名稱標籤 #PC=${HOSTNAME} pc=pavilion distro=arch type=full date=$(date "+%F") backupfile="$backdest/$distro-$type-$date.tar.gz" # 排除文件位置 prog=${0##*/} # 文件名中的程序名稱 excdir="/home/<user>/.bin/root/backup" exclude_file="$excdir/$prog-exc.txt" # 檢查 chroot 提示 echo -n "來自 LiveCD 的第一個 chroot。確定開始備份? (y/n):" read executeback # 檢查排除文件是否存在 if [ ! -f $exclude_file ]; then echo -n "沒有排除文件,是否繼續? (y/n):" read continue if [ $continue == "n" ]; then exit; fi fi if [ $executeback = "y" ]; then # -p、--acls 和 --xattrs 存儲所有權限、ACL 和擴展屬性。如果沒有這些屬性,許多程序會停止工作! # 可以安全地移除詳細信息標誌(-v)。如果使用的終端速度較慢,這可以加快備份過程。 tar --exclude-from=$exclude_file --acls --xattrs -cpvf $backupfile / fi
恢復[編輯 | 編輯原始碼]
要恢復以前的備份,需要裝載所有相關分區更改當前工作目錄為 root,然後執行
$ tar --acls --xattrs -xpf backupfile
backupfile 替換為備份存檔文件。必須手動刪除備份以來添加的所有文件。最簡單的方法是重新創建文件系統。
並行壓縮備份[編輯 | 編輯原始碼]
要使用並行壓縮(SMP),可以使用 pbzip2包(Parallel bzip2):
# tar -cvf /path/to/chosen/directory/etc-backup.tar.bz2 -I pbzip2 /etc
將 etc-backup.tar.bz2
文件存儲到一個或多個脫機媒體上,如U盤、外置硬盤或光盤。有時,需要通過比較原始文件和目錄與其備份文件來驗證備份的完整性。可以維護備份文件的 hash 列表,以使比較過程更快速。
可以通過在臨時工作目錄中提取 etc-backup.tar.bz2
文件,並根據需要複製單個文件和目錄來恢復損壞的 /etc
文件。要恢復整個 /etc
目錄及其所有內容,可以以 root 身份執行以下命令:
# tar -xvf etc-backup.tar.bz2 -C /