Bup (Backup) 基於 Git 封包格式,支援增量備份、全域去重、壓縮、加密、遠端 SSH 推送、掛載瀏覽、Web 介面。比 rsync 更省空間,比 tar 更靈活。本文從安裝、初始化、備份、還原、遠端同步、掛載瀏覽、定時自動化完整示範。
# 啟用 EPEL
yum install -y epel-release
# 安裝依賴
yum install -y git python3 python3-devel fuse3-libs libacl-devel \
python3-pyxattr python3-llfuse perl-Time-HiRes \
gcc make automake autoconf libtool
# 編譯安裝 (或 yum install bup 若倉庫有新版)
git clone https://github.com/bup/bup.git
cd bup
./configure && make && make test && make install
# 驗證
bup version
# 1. 初始化 (預設 ~/.bup,可用 BUP_DIR 變更)
export BUP_DIR=/mnt/backup/bup-repo
bup init
# 2. 建立索引 (掃描檔案屬性、計算 SHA1)
bup index /var/www/html
# 3. 儲存快照 (命名為 web-YYYYMMDD)
bup save -n web-$(date +%Y%m%d) /var/www/html
# 4. 查看備份列表
bup ls
bup ls web-20240115
bup index 比對檔案 mtime/size/inode,僅針對變更檔案計算新 blob。bup save 將 blob 打包成 Git packfile,自動去重 (同內容不同路徑/時間只存一份)。# 遠端需同樣安裝 bup,且 SSH 免密碼登入
bup index /var/www/html
bup save -r user@backup-server:/mnt/bup-repo -n web-$(date +%Y%m%d) /var/www/html
| 需求 | 指令 |
|---|---|
| 還原最新快照到當前目錄 | bup restore -C ./restore web/latest |
| 還原指定日期快照 | bup restore -C /tmp/old web-20240115 |
| 還原單一檔案 | bup restore -C /tmp/web-20240115/var/www/html/index.php |
| 掛載倉庫瀏覽 (FUSE) | mkdir /mnt/bup-fuse && bup fuse /mnt/bup-fuse |
| Web 介面 (預設 8080) | bup web 或 bup web :8181 |
/root/bup_backup.sh#!/bin/bash
set -euo pipefail
export BUP_DIR=/mnt/backup/bup-repo
export BUP_REMOTE=user@offsite:/mnt/bup-repo
bup index /var/www/html
bup save -n web-$(date +%Y%m%d) /var/www/html
# 同步到遠端
bup save -r "$BUP_REMOTE" -n web-$(date +%Y%m%d) /var/www/html
# 可選:清理超過 30 天的快照 (需手動實作,bup 無內建保留策略)
# bup ls | grep '^web-' | sort | head -n -30 | xargs -r bup rm -r
chmod +x /root/bup_backup.sh
# /etc/cron.d/bup_backup
30 2 * * * root /root/bup_backup.sh >> /var/log/bup_backup.log 2>&1
| 優點 | 缺點 |
|---|---|
| 全域去重、增量極省空間 | 單檔還原需掛載或 restore 稍慢 |
| Git 格式開放、可驗證完整性 | 無內建保留策略/刪除快照指令 (需手動) |
| 支援遠端 SSH、FUSE 掛載、Web UI | 大倉庫 (TB 級) 索引耗時較久 |
| 可跨平台 (Linux/macOS/WSL) | Windows 原生支援較弱 |
Bup 將 Git 的版控能力延伸至備份領域,是追求空間效率與版本追溯的優秀選擇。