
实训背景
你是一家数据公司的系统管理员,需设计一套自动化备份系统,满足以下需求:
- 定期备份 :每周日凌晨1点将
/data
目录压缩备份到/backups
。 - 外部存储挂载 :插入USB设备时自动挂载到
/mnt/usb
,并触发增量备份。 - 服务监控:备份完成后发送通知,并限制备份进程的资源使用。
- 日志管理:集中记录备份日志,保留30天历史记录。
环境准备
-
操作系统:Ubuntu 22.04 LTS。
-
目录结构 :
- 数据目录:
/data
(需备份的原始数据)。 - 备份目录:
/backups
(本地备份存储)。 - USB挂载点:
/mnt/usb
(外部存储设备挂载位置)。
- 数据目录:
-
工具安装 :
bashsudo apt install rsync curl # 用于增量备份和通知发送
实训步骤
任务1:配置本地定期备份服务
目标:使用systemd定时器实现每周日凌晨1点的全量备份。
操作步骤:
-
创建备份脚本:
bashsudo nano /opt/scripts/full_backup.sh
内容:
bash#!/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
赋予执行权限:
bashsudo chmod +x /opt/scripts/full_backup.sh
-
创建服务文件:
bashsudo nano /etc/systemd/system/full_backup.service
内容:
ini[Unit] Description=Full Data Backup [Service] Type=oneshot ExecStart=/bin/bash /opt/scripts/full_backup.sh
-
创建定时器文件:
bashsudo nano /etc/systemd/system/full_backup.timer
内容:
ini[Unit] Description=Weekly Full Backup [Timer] OnCalendar=Sun *-*-* 01:00:00 # 每周日凌晨1点 Persistent=true [Install] WantedBy=timers.target
-
启用定时器:
bashsudo systemctl enable full_backup.timer sudo systemctl start full_backup.timer
任务2:实现USB设备自动挂载与增量备份
目标:插入USB设备时自动挂载并触发增量备份。
操作步骤:
-
创建USB挂载单元:
bashsudo nano /etc/systemd/system/mnt-usb.mount
内容:
ini[Unit] Description=Mount USB Drive [Mount] What=/dev/sdb1 # 根据实际设备名修改 Where=/mnt/usb Type=ext4 # 根据文件系统类型修改 Options=defaults [Install] WantedBy=multi-user.target
-
创建自动挂载单元(automount):
bashsudo nano /etc/systemd/system/mnt-usb.automount
内容:
ini[Unit] Description=Automount USB Drive [Automount] Where=/mnt/usb TimeoutIdleSec=10m # 空闲10分钟后卸载 [Install] WantedBy=multi-user.target
-
创建增量备份服务:
bashsudo nano /etc/systemd/system/incremental_backup.service
内容:
ini[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规则:
bashsudo nano /etc/udev/rules.d/99-usb-backup.rules
内容:
bashACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="ext4", RUN+="/bin/systemctl start incremental_backup.service"
重新加载UDEV规则:
bashsudo udevadm control --reload
任务3:限制备份资源与日志管理
目标:防止备份进程占用过多资源,并设置日志保留策略。
操作步骤:
-
限制备份服务资源 :
修改
full_backup.service
和incremental_backup.service
,添加:ini[Service] ... MemoryMax=2G # 最大内存限制2GB CPUQuota=70% # CPU时间配额70%
-
配置日志保留策略:
bashsudo nano /etc/systemd/journald.conf
修改以下参数:
iniSystemMaxUse=1G # 日志最大占用1GB MaxRetentionSec=30day # 保留30天日志
重启日志服务:
bashsudo systemctl restart systemd-journald
任务4:验证与监控
目标:确保所有服务按预期工作。
操作步骤:
-
手动触发全量备份:
bashsudo systemctl start full_backup.service journalctl -u full_backup.service -f # 跟踪日志
-
插入USB设备测试增量备份:
bashsudo systemctl status mnt-usb.mount # 查看挂载状态 ls /mnt/usb/backups # 检查备份文件
-
查看资源限制效果:
bashsystemd-cgtop # 监控CPU和内存使用
实训总结
通过本次实训,你实现了以下功能:
- 自动化备份:结合定时器和UDEV规则,实现全量与增量备份。
- 外部存储管理:通过systemd挂载单元实现USB设备自动挂载。
- 资源与日志控制:限制备份资源消耗,统一管理日志生命周期。
- 服务联动 :依赖关系(
Requires
)确保备份仅在挂载完成后执行。
知识要点
-
单元类型扩展:
.mount
:管理文件系统挂载。.automount
:按需自动挂载设备。
-
UDEV与systemd集成:
- 通过UDEV规则在硬件事件(如插入USB)时触发服务。
-
高级资源控制:
MemoryMax
:限制内存。CPUQuota
:限制CPU配额。
-
日志管理:
- 修改
journald.conf
控制日志保留时间和大小。
- 修改
扩展挑战:
- 尝试添加邮件通知功能(替代示例中的HTTP请求)。
- 设计一个服务依赖链:挂载USB → 增量备份 → 卸载USB。