Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Ubuntu 系統備份完整指南:rsync 異地備份、系統還原與自動化腳本

編輯:關於 Linux

系統備份是資安與可用性的基石。本文介紹以 rsync 為核心的增量備份策略,涵蓋排除清單設計、外接硬碟掛載、MBR/GPT 備份、還原流程與 systemd 定時器自動化。

一、備份前準備

1. 識別目標磁碟

lsblk -f
# 或
df -hT
# 找出外接備份盤掛載點,如 /mnt/backup_disk (假設為 /dev/sdb1)

2. 掛載備份盤 (若未自動掛載)

sudo mkdir -p /mnt/backup
sudo mount /dev/sdb1 /mnt/backup
# 寫入 /etc/fstab 實現開機自動掛載
echo '/dev/sdb1 /mnt/backup ext4 defaults,nofail 0 2' | sudo tee -a /etc/fstab

二、rsync 系統級備份指令 (生產級參數)

sudo rsync -aAXv --delete --dry-run \
  --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \
  / /mnt/backup/ubuntu_root_$(date +%F)

參數解析:

參數含義
-a歸檔模式 = -rlptgoD (遞歸、保留連結/權限/時間/擁有者/裝置檔)
-A保留 ACL (存取控制列表)
-X保留擴展屬性 (xattr)
-v詳細輸出
--delete目標端刪除源端不存在的檔案 (鏡像同步)
--dry-run試運行,**不實際寫入**,驗證排除清單與路徑
--exclude排除虛擬檔案系統、暫存目錄、掛載點、備份盤自身 (避免遞歸)

確認無誤後移除 --dry-run 正式執行。 首次全量備份視資料量耗時 10~60 分鐘,後續增量僅需數分鐘。

三、開機磁區備份 (MBR/GPT + 分區表)

rsync 無法備份開機區,需額外備份:

# 備份 MBR (前 512 bytes) + 分區表
sudo dd if=/dev/sda of=/mnt/backup/mbr_backup_$(date +%F).img bs=512 count=1

# 備份 GPT 分區表 (sgdisk)
sudo sgdisk --backup=/mnt/backup/gpt_backup_$(date +%F).bin /dev/sda

四、系統還原流程 (災難恢復)

  1. 啟動 Ubuntu Live USB (Try Ubuntu)。
  2. 掛載目標系統根分區 (如 /dev/sda2) 至 /mnt/target。
    掛載備份盤至 /mnt/backup。
  3. 還原檔案:
sudo rsync -aAXv --delete \
  /mnt/backup/ubuntu_root_2024-01-15/ /mnt/target/
  1. 還原開機區 (若磁碟未換):
    sudo dd if=/mnt/backup/mbr_backup_2024-01-15.img of=/dev/sda bs=512 count=1
    # 或 GPT
    sudo sgdisk --load-backup=/mnt/backup/gpt_backup_2024-01-15.bin /dev/sda
  2. 重新安裝 GRUB:
sudo mount --bind /dev /mnt/target/dev
sudo mount --bind /proc /mnt/target/proc
sudo mount --bind /sys /mnt/target/sys
sudo chroot /mnt/target
grub-install /dev/sda
update-grub
exit
  1. 重啟,移除 Live USB。

五、自動化備份 (systemd Timer)

1. 建立備份腳本 /usr/local/bin/backup-system.sh:

#!/bin/bash
set -euo pipefail
DEST="/mnt/backup"
DATE=$(date +%F)
LOG="/var/log/backup-system.log"

exec >>"$LOG" 2>&1
echo "=== Backup started at $(date) ==="

# 確保備份盤掛載
mountpoint -q "$DEST" || { echo "Backup dest not mounted"; exit 1; }

rsync -aAX --delete \
  --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \
  / "$DEST/ubuntu_root_$DATE"

echo "=== Backup finished at $(date) ==="

sudo chmod +x /usr/local/bin/backup-system.sh

2. 建立 systemd Service /etc/systemd/system/backup-system.service:

[Unit]
Description=System Backup to External Disk
Requires=mnt-backup.mount
After=mnt-backup.mount

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup-system.sh
User=root

3. 建立 Timer /etc/systemd/system/backup-system.timer:

[Unit]
Description=Daily System Backup

[Timer]
OnCalendar=daily
Persistent=true
RandomizedDelaySec=1h

[Install]
WantedBy=timers.target

4. 啟用:

sudo systemctl daemon-reload
sudo systemctl enable --now backup-system.timer
# 查看狀態
systemctl list-timers --all | grep backup

六、進階策略:快照與異地備份

  • Btrfs/ZFS 快照:若根檔案系統為 Btrfs/ZFS,可用 snapper / zfs snapshot 秒級建立唯讀快照,再 rsync 快照到異地,避免一致性問題。
  • 異地備份:rsync -avz --delete /mnt/backup/ user@offsite-server:/path/to/backup/ (SSH 金鑰認證)。
  • 加密備份:搭配 gpg --symmetric 或 age 加密備份檔,或使用 BorgBackup (去重、壓縮、加密、掛載)。

核心心法:「備份未測試還原 = 沒備份」。每季至少演練一次完整還原流程,記錄耗時與問題,才是真正的資安保障。

Copyright © Windows教程網 All Rights Reserved