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。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76880.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76880.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76880.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PostgreSQL中根據另一表的值來更新一個字段

UPDATE table1 SET value t2.new_value FROM table2 t2 WHERE table1.id t2.reference_id; 解釋 UPDATE table1:指定要更新的表,不要用別名。 SET value t2.new_value:設置要更新的字段及其新值,這里新值來自 table2。也可更…

#SVA語法滴水穿石# (000)斷言基本概念和背景

一、前言 隨著數字電路規模越來越大、設計越來越復雜,使得對設計的功能驗證越來越重要。首先,我們要明白為什么要對設計進行驗證?驗證有什么作用?例如,在用FPGA進行設計時,我們并不能確保設計出來的東西沒有功能上的漏洞,因此在設計后我們都會對其進行驗證仿真。換句話說…

Git 從入門到精通(開源協作特別版)

🧠 Git 從入門到精通(開源協作特別版) ? 基礎命令 🧰 高級用法 🛠? 開源實戰技巧 🌍 GitHub 社區協作 適合:從0開始 → 熟練開發者 → 參與/維護開源項目 🔰 第1章:…

【SQL】取消sql某一列的唯一值key值的方法

在插入數據到sql時,遇到了這個問題: Duplicate entry ‘XXX’ for key 起因是: 我之前設計表的時候,手動給product_title 這個列加了一個key, key 是這個字段的唯一鍵約束,就不能重復在這一列存入重復的數…

【小沐學Web3D】three.js 加載三維模型(React Three Fiber)

文章目錄 1、簡介1.1 Three.js1.2 React Three Fiber 2、測試2.1 初始化環境2.2 app.js修改(顯示內置立方體)2.3 app.js修改(顯示內置球體)2.4 app.js修改(顯示自定義立方體)2.5 app.js修改(顯示…

本地部署 Firecrawl 爬蟲讓 AI 知識庫更豐滿

https://www.firecrawl.dev/ firecrawl-logo-with-fire.png 什么是Firecrawl Firecrawl 是一款 可以將網站轉換為 便于AI處理的Markdown 格式的爬蟲工具 ,主要 提供 API 服務 ,無需站點地圖,只需要接收一個 URL 地址就可以爬取網站及網站下可…

純個人整理,藍橋杯使用的算法模板day2(0-1背包問題),手打個人理解注釋,超全面,且均已驗證成功(附帶詳細手寫“模擬流程圖”,全網首個

算法索引 01背包優化前空間優化版(使用一維數組)優化后的模擬流程圖為何優化后,j不能使用正序遍歷模擬流程圖 代碼對應實現案例 01背包 優化前 /*** 0-1背包問題解法(與下方代碼表格示例對應,已模擬驗證)*…

APang網聯科技項目報告【服務器篇】

APang網聯科技:連接未來,智能領航 公司簡介 APang網聯科技成立于 [2005年],總部位于 [廣東深圳],是一家集網絡技術研發、系統集成、項目實施與運維服務為一體的高新技術企業。我們致力于為客戶提供全方位、定制化的網絡部署解決…

Scade One - 將MBD技術從少數高安全領域向更廣泛的安全嵌入式軟件普及

Scade One是繼Scade Suite version 6自2008年起發展近20年后的首次主要改進版本。在Scade One發布的同時,Scade團隊發布了一系列介紹Scade One的博客。本篇Scade One - Democratizing model-based development是其中的一部分。在后面的內容中,將復述博客…

Word在生成PDF后,PDF左側導航書簽目錄錯誤顯示的解決方法

1、打開要轉換的word文件,點擊“開始”,“另存為” 2、保存在本地時,在“保存類型”的下拉列表中選擇“PDF(*.pdf)” 3、選擇完保存類型后,點擊“選項”按鈕 4、在彈出的“選項”框中,選擇“創建…

Windows系統服務器安裝Office Online Server

服務器配置 配置參數OSThe 64-bit edition of Windows Server 2016CPU4RAM8GNetwork開啟Hard disk80GPort80, 443, 809 執行命令 PowerShell中添加Windows服務: Add-WindowsFeature Web-Server,Web-Mgmt-Tools,Web-Mgmt-Console,Web-WebServer,Web-Common-Http,…

【小沐學Web3D】three.js 加載三維模型(Angular)

文章目錄 1、簡介1.1 three.js1.2 angular.js 2、three.js Angular.js結語 1、簡介 1.1 three.js Three.js 是一款 webGL(3D繪圖標準)引擎,可以運行于所有支持 webGL 的瀏覽器。Three.js 封裝了 webGL 底層的 API ,為我們提供了…

簡單程序語言理論與編譯技術·22 實現一個從AST到RISCV的編譯器

本文是記錄專業課“程序語言理論與編譯技術”的部分筆記。 LECTURE 22(實現一個從AST到RISCV的編譯器) 一、問題分析 1、完整的編譯器(如LLVM)需先完成AST到IR的轉換,并進行代碼優化,再到匯編&#xff0…

JavaWeb 課堂筆記 —— 02 JavaScript

本系列為筆者學習JavaWeb的課堂筆記,視頻資源為B站黑馬程序員出品的《黑馬程序員JavaWeb開發教程,實現javaweb企業開發全流程(涵蓋SpringMyBatisSpringMVCSpringBoot等)》,章節分布參考視頻教程,為同樣學習…

Python 如何高效實現 PDF 內容差異對比

Python 如何高效實現 PDF 內容差異對比 1. 安裝 PyMuPDF 庫2. 獲取 PDF 內容通過文件路徑獲取通過 URL 獲取 3. 提取 PDF 每頁信息4. 內容對比metadata 差異文本對比可視化對比 5. 提升對比效率通過哈希值快速判斷頁面是否相同早停機制多進程機制 6. 其他 最近有接觸到 PDF 內容…

OpenGL學習筆記(簡介、三角形、著色器、紋理、坐標系統、攝像機)

目錄 簡介核心模式與立即渲染模式狀態機對象GLFW和GLAD Hello OpenGLTriangle 三角形頂點緩沖對象 VBO頂點數組對象 VAO元素緩沖對象 EBO/ 索引緩沖對象 IEO 著色器GLSL數據類型輸入輸出Uniform 紋理紋理過濾Mipmap 多級漸遠紋理實際使用方式紋理單元 坐標系統裁剪空間 攝像機自…

MIPI與DVP接口攝像頭:深度解析與應用指南

1、MIPI 1.1 MIPI簡介 MIPI是什么?MIPI:mobile industry processor interface移動行業處理器接口。它是一個由Intel、Motorola、Nokia、NXP、Samsung、ST(意法半導體)和TI(德州儀器)等公司發起的開放標準…

35信號和槽_信號槽小結

Qt 信號槽 1.信號槽是啥~~ 尤其是和 Linux 中的信號進行了對比(三要素) 1) 信號源 2) 信號的類型 3)信號的處理方式 2.信號槽 使用 connect 3.如何查閱文檔. 一個控件,內置了哪些信號,信號都是何時觸發 一…

6547網:藍橋STEMA考試 Scratch 試卷(2025年3月)

『STEMA考試是藍橋青少教育理念的一部分,旨在培養學生的知識廣度和獨立思考能力。考試內容主要考察學生的未來STEM素養、計算思維能力和創意編程實踐能力。』 一、選擇題 第一題 運行下列哪個程序后,飛機會向左移動? ( ) A. …

使用 Python 爬取并打印雙色球近期 5 場開獎數據

使用 Python 爬取并打印雙色球近期 5 場開獎數據 前期準備安裝所需庫 完整代碼代碼解析 1. 導入必要的庫2. 定義函數 get_recent_five_ssq 3. 設置請求的 URL 和 Headers 4. 發送請求并處理響應5. 解析 HTML 內容6. 提取并打印數據7. 錯誤處理 首先看下運行的效果圖&#xff1a…