在備份 Fedora Silverblue 系統時,一些傳統工具可能無法正常工作。 BorgBackup (Borg) 是一種可用的替代方案,它為基於 Silverblue 的系統提供備份功能。本指南提供了使用 BorgBackup 1.1.8 作為分層包備份 Fedora Silver Blue 29 系統的說明。
典型的 Fedora 工作站系統使用 dnf 來安裝軟件包。但是,Fedora Silverblue 使用 rpm-ostree install 來安裝新軟件。這在 Silverblue 系統中稱為分層。這是因為核心 ostree 是一個不可變的鏡像,安裝後,rpm 包被分層到核心系統上,生成一個包含分層包的新本地鏡像。
“BorgBackup(簡稱:Borg)是一個去重備份程序。相反,它支持壓縮和認證加密。”
來自 Borg 網站
此外,與 Borg 交互的主要方式是通過命令行。閱讀快速入門指南後,很明顯 Borg 非常適合編寫腳本。事實上,如果您想重複進行完整的系統備份,您需要某種形式的 shell 腳本。一個基本的腳本是 博格快速入門指南 作為起點。
安裝博格
通過在終端中鍵入以下命令,將 BorgBackup 安裝為分層包:
$rpm-ostree 安裝 borg 備份
這將在您的 Fedora Silver Blue 系統上安裝 BorgBackup。要使用它,請使用以下命令重新啟動新的 ostree:
$systemctl 重啟
Borg 現在已經安裝並可以使用了。
Silverblue 及其文件系統、分層包和扁平包的註釋
文件系統
Silverblue 是一個基於 ostree 的不可變操作系統,它使用 rpm-ostree 支持 rpm 分層。在用戶級別,這意味著 flatpak 中的 /home 實際上是系統上的 /var/home。 記住這一點很重要,因為像 Borg 和其他備份工具這樣的程序通常需要實際路徑。在本例中,它應該是 /var/home,而不僅僅是 /home。
在開始備份之前,最好了解可以存儲潛在數據的位置以及是否應該備份它。 Silverblue 的文件系統佈局對於可寫和不可寫非常具體。 在 Silverblue 中,只有 /etc 和 /var 是不可變的,因此是可寫的。在單用戶系統上,用戶主目錄通常被視為數據備份選項。它通常不包括下載,但確實包括文檔等。對於一些我再也不想做的配置選項, /etc 也是一個合乎邏輯的選擇。記下您從主目錄和 /etc 中排除的內容。 需要 root 或 sudo 訪問 /etc 中的某些文件和子目錄。
扁平包裝
無論是作為用戶還是系統安裝,Flatpak 應用程序都將數據存儲在 $HOME/.var/app/flatpakapp 下的主目錄中。如果安裝在用戶級別,數據也位於 $HOME/.local/share/flatpak/app/ 中,如果安裝在系統級別,則數據位於 /var/lib/flatpak/app 中。 安裝 flatpak 並將輸出重定向到文件進行備份。推理 如果您需要重新安裝它們(扁平包),您可以使用列表文件來完成。對於更健壯的方法,您可以檢查 flatpak 文件系統佈局 這裡。
分層和 rpm-ostree
用戶沒有簡單的方法來檢索分層包信息。
$rpm-ostree 狀態命令。它顯示了當前和以前的 ostree 提交的層次結構包,如果提交被固定,它還會列出它們。以下是我係統上的輸出。請注意每個提交列表末尾的 LayeredPackages 標籤。
命令
您可以使用 $ostree 日誌來獲取系統的提交歷史記錄。輸入終端並查看輸出:
準備備份存儲庫
要使用 Borg 備份系統,您必須首先初始化 Borg 存儲庫。在初始化之前,需要決定是否使用加密,如果是,使用哪種模式。
Borg 可以使用 256 位 AES 加密保護您的數據。客戶端加密數據的完整性和真實性使用 HMAC-SHA256 進行驗證。加密方式有:
加密
哈希/MAC | 無加密,無授權 | 未加密,但經過身份驗證 | 加密(AEAD w/AES)和身份驗證 |
SHA-256 | 沒有什麼 | 已驗證 | 密鑰文件 |
黑色 2b | 不適用 | 認證休息 2 | repokey-blake2 密鑰文件-blake2 |
確定的加密模式是 keyfile-blake2,需要密碼和所需的密鑰文件。
Borg 可以使用您在創建備份時指定的以下壓縮類型:
- lz4(非常快,低壓縮)
- zstd(從高速低速壓縮到高壓縮低速的寬範圍)
- zlib(中等速度和壓縮)
- lzma(低速,高壓縮)
對於壓縮,lzma 選擇設置為 6,這是合理的最高壓縮級別。第一次備份在 4 分 59.98 秒內完成,後續備份通常不到 20 秒。
博格初始化
為了能夠使用 Borg 執行備份,首先為 Borg 存儲庫創建一個目錄。
$mkdir borg_testdir
然後改變:
$cd borg_testdir
接下來,使用 borg init 命令初始化 Borg 存儲庫。
$borg 初始化 -e=keyfile-blake2 。
Borg 將提示您輸入密碼。密碼區分大小寫,創建時必須輸入兩次。您必須創建一個長度合適的字母數字和符號密碼短語。如有必要,可以稍後更改,而不會影響密鑰文件或加密數據。密鑰文件可以導出,並應與密碼一起用於備份,並保存在安全位置。
創建備份
接下來,對 Documents 目錄進行測試備份。 回想一下 Silverblue 上用戶的 Documents 目錄的實際路徑是 /var/home/username/Documents。 在 Silverblue 的實際使用中,使用 ~/ 或 $HOME 來指示您的主目錄是合適的。實際路徑作為實際路徑與環境變量之間的差異是不會改變的,但是環境變量是可以改變的。 在 Borg 存儲庫中,輸入以下命令。
$borg create.::borgtest /var/home/username/Documents
這將創建您的 Documents 目錄的備份。 伯格斯特. 讓我們稍微分解一下命令。 創造 需要一個 兌換處, 在這種情況下 . 我們 頂樓 的 報告. 這創建了路徑 . :: 博格斯特 備份名稱。最後 /var/home/用戶名/文件 要備份的數據的位置。
以下命令
$borg 列表
當我回到我的備份列表時,幾天后它看起來像這樣:

要刪除測試備份,請在終端中鍵入:
$borg 刪除.::borgtest
此時,Borg 會要求提供加密密碼以刪除備份。
把它放在一個shell腳本中
如前所述,Borg 是一個很棒的腳本工具。 Borg 文檔鏈接是了解 BorgBackup 等更多信息的好地方。 Borg 提供的示例腳本已針對本文進行了修改。下面是一個帶有基本部分的版本,如果需要,可以用作其他人的起點。嘗試獲取上述三條有關係統和應用程序的信息。作為人類可讀文件的 flatpak 列表、rpm-ostree 狀態和 ostree 日誌輸出每次都具有相同的名稱,因此它們每次都會被覆蓋。最初的示例是使用 ssh 進行遠程服務器登錄以供本地使用,因此我必須更改存儲庫設置。其他更改主要包括更正目錄路徑、自定義排除項以匹配此系統主目錄以及選擇壓縮。
#!/bin/sh
# This gets the ostree commit data, this file is overwritten each time
sudo ostree log fedora-workstation:fedora/29/x86_64/silverblue > ostree.log
rpm-ostree status > rpm-ostree-status.lst
# Flatpaks get listed too
flatpak list > flatpak.lst
# Setting this, so the repo does not need to be given on the commandline:
BORG_REPO=/var/home/usernamehere/borg_testdir
# Setting this, so you won't be asked for your repository passphrase:(Caution advised!)
BORG_PASSPHRASE='usercomplexpassphrasehere'
# some helpers and error handling:
info() { printf "n%s %snn" "$( date )" "$*" >&2; }
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
info "Starting backup"
# Backup the most important directories into an archive named after
# the machine this script is currently running on:
borg create
--verbose
--filter AME
--list
--stats
--show-rc
--compression auto,lzma,6
--exclude-caches
--exclude '/var/home/*/borg_testdir'
--exclude '/var/home/*/Downloads/'
--exclude '/var/home/*/.var/'
--exclude '/var/home/*/Desktop/'
--exclude '/var/home/*/bin/'
::'{hostname}-{now}'
/etc
/var/home/ssnow
backup_exit=$?
info "Pruning repository"
# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
# archives of THIS machine. The '{hostname}-' prefix is very important to
# limit prune's operation to this machine's archives and not apply to
# other machines' archives also:
borg prune
--list
--prefix '{hostname}-'
--show-rc
--keep-daily 7
--keep-weekly 4
--keep-monthly 6
prune_exit=$?
# use highest exit code as global exit code
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
if [ ${global_exit} -eq 0 ]; then
info "Backup and Prune finished successfully"
elif [ ${global_exit} -eq 1 ]; then
info "Backup and/or Prune finished with warnings"
else
info "Backup and/or Prune finished with errors"
fi
exit ${global_exit}
此列表非常基本,有定制和改進的空間,缺少一些特定於測試系統設置和備份目的的排除項。在 shell 腳本文件中使用密碼適用於這個書面測試。為了正常使用,建議您每次執行備份時都輸入密碼。