欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > Systemd构建自动化备份服务与外部存储管理

Systemd构建自动化备份服务与外部存储管理

2025/4/18 14:19:30 来源:https://blog.csdn.net/renchao7060/article/details/146999892  浏览:    关键词:Systemd构建自动化备份服务与外部存储管理

在这里插入图片描述

实训背景

你是一家数据公司的系统管理员,需设计一套自动化备份系统,满足以下需求:

  1. 定期备份:每周日凌晨1点将 /data 目录压缩备份到 /backups
  2. 外部存储挂载:插入USB设备时自动挂载到 /mnt/usb,并触发增量备份。
  3. 服务监控:备份完成后发送通知,并限制备份进程的资源使用。
  4. 日志管理:集中记录备份日志,保留30天历史记录。

环境准备

  1. 操作系统:Ubuntu 22.04 LTS。
  2. 目录结构
    • 数据目录:/data(需备份的原始数据)。
    • 备份目录:/backups(本地备份存储)。
    • USB挂载点:/mnt/usb(外部存储设备挂载位置)。
  3. 工具安装
    sudo apt install rsync curl  # 用于增量备份和通知发送
    

实训步骤


任务1:配置本地定期备份服务

目标:使用systemd定时器实现每周日凌晨1点的全量备份。

操作步骤
  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
    
  2. 创建服务文件

    sudo nano /etc/systemd/system/full_backup.service
    

    内容:

    [Unit]
    Description=Full Data Backup[Service]
    Type=oneshot
    ExecStart=/bin/bash /opt/scripts/full_backup.sh
    
  3. 创建定时器文件

    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
    
  4. 启用定时器

    sudo systemctl enable full_backup.timer
    sudo systemctl start full_backup.timer
    

任务2:实现USB设备自动挂载与增量备份

目标:插入USB设备时自动挂载并触发增量备份。

操作步骤
  1. 创建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
    
  2. 创建自动挂载单元(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
    
  3. 创建增量备份服务

    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"
    
  4. 触发备份的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:限制备份资源与日志管理

目标:防止备份进程占用过多资源,并设置日志保留策略。

操作步骤
  1. 限制备份服务资源
    修改 full_backup.serviceincremental_backup.service,添加:

    [Service]
    ...
    MemoryMax=2G      # 最大内存限制2GB
    CPUQuota=70%      # CPU时间配额70%
    
  2. 配置日志保留策略

    sudo nano /etc/systemd/journald.conf
    

    修改以下参数:

    SystemMaxUse=1G            # 日志最大占用1GB
    MaxRetentionSec=30day      # 保留30天日志
    

    重启日志服务:

    sudo systemctl restart systemd-journald
    

任务4:验证与监控

目标:确保所有服务按预期工作。

操作步骤
  1. 手动触发全量备份

    sudo systemctl start full_backup.service
    journalctl -u full_backup.service -f  # 跟踪日志
    
  2. 插入USB设备测试增量备份

    sudo systemctl status mnt-usb.mount  # 查看挂载状态
    ls /mnt/usb/backups                  # 检查备份文件
    
  3. 查看资源限制效果

    systemd-cgtop  # 监控CPU和内存使用
    

实训总结

通过本次实训,你实现了以下功能:

  1. 自动化备份:结合定时器和UDEV规则,实现全量与增量备份。
  2. 外部存储管理:通过systemd挂载单元实现USB设备自动挂载。
  3. 资源与日志控制:限制备份资源消耗,统一管理日志生命周期。
  4. 服务联动:依赖关系(Requires)确保备份仅在挂载完成后执行。

知识要点

  1. 单元类型扩展

    • .mount:管理文件系统挂载。
    • .automount:按需自动挂载设备。
  2. UDEV与systemd集成

    • 通过UDEV规则在硬件事件(如插入USB)时触发服务。
  3. 高级资源控制

    • MemoryMax:限制内存。
    • CPUQuota:限制CPU配额。
  4. 日志管理

    • 修改 journald.conf 控制日志保留时间和大小。

扩展挑战

  • 尝试添加邮件通知功能(替代示例中的HTTP请求)。
  • 设计一个服务依赖链:挂载USB → 增量备份 → 卸载USB。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词