實訓背景
你是一家數據公司的系統管理員,需設計一套自動化備份系統,滿足以下需求:
- 定期備份:每周日凌晨1點將
/data
目錄壓縮備份到/backups
。 - 外部存儲掛載:插入USB設備時自動掛載到
/mnt/usb
,并觸發增量備份。 - 服務監控:備份完成后發送通知,并限制備份進程的資源使用。
- 日志管理:集中記錄備份日志,保留30天歷史記錄。
環境準備
- 操作系統:Ubuntu 22.04 LTS。
- 目錄結構:
- 數據目錄:
/data
(需備份的原始數據)。 - 備份目錄:
/backups
(本地備份存儲)。 - USB掛載點:
/mnt/usb
(外部存儲設備掛載位置)。
- 數據目錄:
- 工具安裝:
sudo apt install rsync curl # 用于增量備份和通知發送
實訓步驟
任務1:配置本地定期備份服務
目標:使用systemd定時器實現每周日凌晨1點的全量備份。
操作步驟:
-
創建備份腳本:
sudo nano /opt/scripts/full_backup.sh
內容:
#!/bin/bash TIMESTAMP=$(date +%Y%m%d) tar -czf /backups/full-backup-$TIMESTAMP.tar.gz /data echo "Full backup completed at $(date)" | systemd-cat -t backup # 記錄日志到systemd
賦予執行權限:
sudo chmod +x /opt/scripts/full_backup.sh
-
創建服務文件:
sudo nano /etc/systemd/system/full_backup.service
內容:
[Unit] Description=Full Data Backup[Service] Type=oneshot ExecStart=/bin/bash /opt/scripts/full_backup.sh
-
創建定時器文件:
sudo nano /etc/systemd/system/full_backup.timer
內容:
[Unit] Description=Weekly Full Backup[Timer] OnCalendar=Sun *-*-* 01:00:00 # 每周日凌晨1點 Persistent=true[Install] WantedBy=timers.target
-
啟用定時器:
sudo systemctl enable full_backup.timer sudo systemctl start full_backup.timer
任務2:實現USB設備自動掛載與增量備份
目標:插入USB設備時自動掛載并觸發增量備份。
操作步驟:
-
創建USB掛載單元:
sudo nano /etc/systemd/system/mnt-usb.mount
內容:
[Unit] Description=Mount USB Drive[Mount] What=/dev/sdb1 # 根據實際設備名修改 Where=/mnt/usb Type=ext4 # 根據文件系統類型修改 Options=defaults[Install] WantedBy=multi-user.target
-
創建自動掛載單元(automount):
sudo nano /etc/systemd/system/mnt-usb.automount
內容:
[Unit] Description=Automount USB Drive[Automount] Where=/mnt/usb TimeoutIdleSec=10m # 空閑10分鐘后卸載[Install] WantedBy=multi-user.target
-
創建增量備份服務:
sudo nano /etc/systemd/system/incremental_backup.service
內容:
[Unit] Description=Incremental Backup to USB Requires=mnt-usb.mount # 依賴掛載點[Service] Type=oneshot ExecStart=/bin/bash -c "rsync -av --delete /data/ /mnt/usb/backups/" ExecStartPost=/usr/bin/curl -X POST http://notification-server/log -d "Backup completed"
-
觸發備份的UDEV規則:
sudo nano /etc/udev/rules.d/99-usb-backup.rules
內容:
ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="ext4", RUN+="/bin/systemctl start incremental_backup.service"
重新加載UDEV規則:
sudo udevadm control --reload
任務3:限制備份資源與日志管理
目標:防止備份進程占用過多資源,并設置日志保留策略。
操作步驟:
-
限制備份服務資源:
修改full_backup.service
和incremental_backup.service
,添加:[Service] ... MemoryMax=2G # 最大內存限制2GB CPUQuota=70% # CPU時間配額70%
-
配置日志保留策略:
sudo nano /etc/systemd/journald.conf
修改以下參數:
SystemMaxUse=1G # 日志最大占用1GB MaxRetentionSec=30day # 保留30天日志
重啟日志服務:
sudo systemctl restart systemd-journald
任務4:驗證與監控
目標:確保所有服務按預期工作。
操作步驟:
-
手動觸發全量備份:
sudo systemctl start full_backup.service journalctl -u full_backup.service -f # 跟蹤日志
-
插入USB設備測試增量備份:
sudo systemctl status mnt-usb.mount # 查看掛載狀態 ls /mnt/usb/backups # 檢查備份文件
-
查看資源限制效果:
systemd-cgtop # 監控CPU和內存使用
實訓總結
通過本次實訓,你實現了以下功能:
- 自動化備份:結合定時器和UDEV規則,實現全量與增量備份。
- 外部存儲管理:通過systemd掛載單元實現USB設備自動掛載。
- 資源與日志控制:限制備份資源消耗,統一管理日志生命周期。
- 服務聯動:依賴關系(
Requires
)確保備份僅在掛載完成后執行。
知識要點
-
單元類型擴展:
.mount
:管理文件系統掛載。.automount
:按需自動掛載設備。
-
UDEV與systemd集成:
- 通過UDEV規則在硬件事件(如插入USB)時觸發服務。
-
高級資源控制:
MemoryMax
:限制內存。CPUQuota
:限制CPU配額。
-
日志管理:
- 修改
journald.conf
控制日志保留時間和大小。
- 修改
擴展挑戰:
- 嘗試添加郵件通知功能(替代示例中的HTTP請求)。
- 設計一個服務依賴鏈:掛載USB → 增量備份 → 卸載USB。