使用 tar 備份整個系統 - Arch Linux 中文维基

跳至內容

# 使用 tar 備份整個系統

出自 Arch Linux 中文维基

相關文章

- 系統備份
- Full system backup with SquashFS

本篇介紹如何使用 tar 進行全系統備份。

使用 tar 進行備份具有壓縮的優點，有助於節省磁碟空間，且使用簡單。此過程只需要以下幾個步驟：

1. 從 LiveCD 啟動
2. Change root 到 Linux 系統安裝位置
3. 裝載其他（如有的話）分區/驅動器
4. 添加排除對象
5. 使用備份腳本進行備份

為最大限度減少停機時間，如果所有文件系統均駐留在 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 /

分類：​

- 備份

使用 tar 備份整個系統
新增話題