不再担心数据丢失:用rsync打造你的自动化备份解决方案

news2024/12/28 19:17:40

在现代IT环境中,数据备份是一项至关重要的任务。无论是个人文件还是企业数据,都需要有可靠的备份机制来防止数据丢失。今天,我们将介绍一种高效的备份方案:使用rsync实现自动化备份目录。

什么是rsync?

rsync 是一个开源的、快速、通用的文件同步工具。它的主要功能是将文件和目录从一个位置同步到另一个位置,并且只传输更改的部分,从而大大提高了传输效率。它支持本地复制以及通过SSH、rsync协议等进行远程复制。

更多关于rsync可以查阅官方文档

为什么选择rsync?

  1. 高效性:rsync 只传输更改的部分,极大地减少了数据传输量。

  2. 灵活性:可以在本地和远程之间进行备份,支持多种协议。

  3. 可靠性:rsync 保持文件的属性、权限和时间戳,确保备份的完整性。

  4. 增量备份:通过符号链接实现增量备份,节省存储空间。

自动化备份脚本

下面是一个使用rsync实现自动化备份的Shell脚本。备份指定目录,并将旧的备份压缩归档。

脚本详解

  1. **检查并安装rsync:**检查系统中是否安装了rsync,如果没有,根据系统类型进行安装。
if ! command -v rsync &> /dev/null; then
    echo "rsync 未安装。正在安装..."
    
    if [[ "$OSTYPE" == "linux-gnu"* ]]; then
        if [ -x "$(command -v apt-get)" ]; then
            sudo apt-get update && sudo apt-get install -y rsync
        elif [ -x "$(command -v yum)" ]; then
            sudo yum install -y rsync
        elif [ -x "$(command -v dnf)" ]; then
            sudo dnf install -y rsync
        else
            echo "无法检测到合适的包管理器,请手动安装rsync。"
            exit 1
        fi
    elif [[ "$OSTYPE" == "darwin"* ]]; then
        if ! command -v brew &> /dev/null; then
            echo "Homebrew 未安装。请先安装Homebrew。"
            exit 1
        fi
        brew install rsync
    else
        echo "不支持的操作系统,请手动安装rsync。"
        exit 1
    fi
    
    echo "rsync 安装完成。"
else
    echo "rsync 已安装。"
fi
  1. 获取当前时间和昨天的日期:用于命名备份目录和归档文件。
NOW=$(date +%Y%m%d%H%M)
YESTERDAY=$(date -d "yesterday" +%Y%m%d)
  1. 配置备份系统存放的目录:定义备份文件、快照和归档的存放位置。
BACKUP_HOME="/srv/backups"
CURRENT_LINK="$BACKUP_HOME/current"
SNAPSHOT_DIR="$BACKUP_HOME/snapshots"
ARCHIVES_DIR="$BACKUP_HOME/archives"
  1. 要备份的文件目录:指定需要备份的源文件目录。
BACKUP_SOURCE_DIR="/etc"
  1. 创建备份文件存放目录:确保备份文件的存放目录存在,如果不存在则创建它们。
mkdir -p "$SNAPSHOT_DIR" "$ARCHIVES_DIR" &> /dev/null
  1. 使用rsync进行备份:使用rsync命令进行增量备份,并更新当前备份的符号链接。
rsync -azH --link-dest="$CURRENT_LINK" "$BACKUP_SOURCE_DIR" "$SNAPSHOT_DIR/$NOW" \
&& ln -snf "$(ls -1d "$SNAPSHOT_DIR"/* | tail -n 1)" "$CURRENT_LINK"

rsync命令使用-a选项(归档模式),-z选项(压缩文件),-H选项(保持硬链接),以及--link-dest选项(使用符号链接进行增量备份)。完成备份后,更新CURRENT_LINK符号链接,指向最新的备份目录。

  1. 归档:检查是否存在昨天的备份,如果有,将其压缩归档,并删除原始备份文件。
if [ $(ls -d "$SNAPSHOT_DIR"/"$YESTERDAY"* 2> /dev/null | wc -l) -ne 0 ]; then
  tar -czf "$ARCHIVES_DIR/$YESTERDAY.tar.gz" "$SNAPSHOT_DIR/$YESTERDAY"* \
  && rm -rf "$SNAPSHOT_DIR/$YESTERDAY"*
fi

如何使用

  1. 创建脚本文件:将上述脚本保存为rsync.sh

  2. 赋予执行权限:在终端中运行chmod +x rsync.sh

  3. 执行脚本文件./rsyn.sh,根据提示,输入要备份的目录,如下图所示:

修改系统时间,再次执行脚本,如下图所示:

从上述的结果看到,昨天的备份已经被压缩归档好了。

总结

通过使用rsync和简单的Shell脚本,我们可以轻松实现自动化备份系统。这个方案不仅高效、灵活,还能确保数据的完整性和安全性。希望这篇文章能帮助你更好地理解rsync的使用,并在实际工作中有效地应用。

脚本获取方式


上述脚本已经上传上传到gitee,有需要的小伙伴可以自行获取。gitee上的仓库主要是分享一些工作中常用的脚本。小伙伴可以frok或者watch仓库,这样有更新可以及时关注到。

脚本仓库

仓库地址:

https://gitee.com/didiplus/script

推荐阅读


  • IP地址乱成一团?用Shell一键搞定!
  • 实用技巧,用lsof命令监控tar文件解压进度,简单有效
  • 运维必备:批量实现Linux机器SSH免密登录的自动化脚本
  • 运维小妙招:如何让系统信息随登录自动展现?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1960390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode+cmake+msvc+vcpkg的入门使用

一.环境安装 1.下载vscode并安装: Download Visual Studio Code - Mac, Linux, Windows 2.安装完成后,安装C和cmake 相关工具,如图。 3.vcpkg的下载和安装 克隆vcpkg的仓库到本地:https://github.com/microsoft/vcpkg.git,运行bo…

《学会 SpringMVC 系列 · 基础篇》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

deeplapv3 动机

语义分割是计算机视觉领域中重要的任务之一,语义分割的目的是为图像中的每个像素分配标签。相比于传统方法,以深度学习为基础的全卷积网络极大地提高了语义分割算法的性能。 在语义分割网络中,常用到如下2种结构: 空间金字塔池化…

C++STL简介(三)

目录 1.vector的模拟实现 1.1begin() 1.2end() 1.3打印信息 1.4 reserve() 1.5 size() 1.6 capacity() 1.7 push_back() 1.8[ ] 1.9 pop_back() 1.10 insert&…

【涵子来信】——AI革新:1.新时代是便捷的,要会用

各位读者朋友们: 我们现在AI时代的十字路口,AI是为生活带来便利的,我们要会使用AI。今天这篇文章来讲述一下AI的正确使用。 一、 AI的使用 1.1.便捷之中要会辨别 AI是带来强大的,利用好可以给生活带来便捷。 像之前WWDC24宣传…

SAP 字符串关键字找程序

关键字查询程序 : RPR_ABAP_SOURCE_SCAN或RS_ABAP_SOURCE_SCAN

Python网络爬虫:基础与实战!附淘宝抢购源码

Python网络爬虫是一个强大的工具,用于从互联网上自动抓取和提取数据。下面我将为你概述Python网络爬虫的基础知识和一些实战技巧。 Python网络爬虫基础 1. HTTP请求与响应 网络爬虫的核心是发送HTTP请求到目标网站并接收响应。Python中的requests库是处理HTTP请求…

C语言——运算符及表达式

C语言——运算符及表达式 运算符运算符的分类(自增运算符)、--(自减运算符)赋值运算符逗号运算符(顺序求值运算符) 表达式 运算符 运算符的分类 C语言的运算符范围很宽,除了控制语句和输入输出…

从数据血缘谈一谈如何实现数据管理的“自治理”

数据治理是企业数据管理的核心,它通过系统性的管理行为,确保数据的完整性、准确性、安全性、合规性和价值最大化。数据治理有助于提高数据质量和可用性,减少数据管理的风险,增强企业对数据的信任,从而提升业务效率和竞…

mongodb中ret resulted in status UnknownError: 24: Too many open files

mongodb使用中遇到的问题 Invariant failure: ret resulted in status UnknownError:24:Too many open files at *** 错误原因为打开文件过多的错误,即“句柄数超出系统显示”。 1.需要更改一下系统的句柄数: 查看一下系统目前设置的句柄数 open files 对…

算法刷题day2|贪心:122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II、1005. K 次取反后最大化的数组和

122. 买卖股票的最佳时机 II 贪心一 画出股票的折线图&#xff0c;将图中折线上升区间相加即是最大利润。 class Solution { public:int maxProfit(vector<int>& prices) {int result 0;for (int i 1; i < prices.size(); i){//下降区间直接跳过if (prices[i]…

创建完整的APP页面

完整的页面创建过程包括三个步骤 在layout目录下创建XML文件 创建与XML文件对应的Java代码 在AndroidMainfest.xml&#xff08;清单文件&#xff09;中注册页面配 一步到位的activity创建 跳转&#xff1a;意图 创建一个意图实例&#xff0c;使用setClass&#xff08;&#…

python机器学习12--Regression回归分析

1.数据准备 第一步&#xff1a;数据内容一定要有以下两种值域的因果数据。  特征&#xff08;Feature&#xff09;&#xff1a;因&#xff0c;在统计学称为自变量&#xff08;Independent Variable&#xff09;。  标签答案&#xff08;Label&#xff09;&#xff1a;果&a…

4条社交规则,让你受益

一个人只要在社会生活中&#xff0c;那他就免不了社会交往。 有时候&#xff0c;我们在社交中之所以不受欢迎&#xff0c;主要还是因为方法和策略的问题&#xff0c;也就是说缺乏对社交的深入思考&#xff0c;没有去做正确的事情。要知道&#xff0c;只要思路和方向对了&#…

【计算机毕设论文】基于SpringBoot的语音识别系统的设计与实现

&#x1f497;博主介绍&#xff1a;✌全平台粉丝5W,高级大厂开发程序员&#x1f603;&#xff0c;博客之星、掘金/知乎/华为云/阿里云等平台优质作者。 【源码获取】关注并且私信我 感兴趣的可以先收藏起来&#xff0c;同学门有不懂的毕设选题&#xff0c;项目以及论文编写等相…

传统制造业物流管理有什么缺陷?智能供应链技术推动制造业转型!

在科技迅猛发展的今天&#xff0c;智能制造已成为推动工业转型和升级的关键力量。作为智能制造的重要组成部分&#xff0c;物流管理的智能化不仅关系到企业运营的效率&#xff0c;更直接影响到整个制造业的竞争力。随着中国社会物流总额的持续攀升&#xff0c;物流行业展现出了…

C语言内存函数超详解

文章目录 前言1. memcpy1. 1 memcpy 的使用1. 2 memcpy 的模拟实现 2. memmove2. 1 memmove 使用 3. memset3. 1 memset 函数的使用3. 2 memset 的模拟实现 4. memcmp4. 1 memcmp 函数的使用4. 2 memcmp 的模拟实现 前言 C语言为我们提供了字符串的一些函数&#xff0c;比如复…

arduino程序-面包板(电路搭建及上传程序控制led))(基础知识)

arduino程序-面包板&#xff08;电路搭建及上传程序控制led&#xff09;&#xff08;基础知识&#xff09; 1-12 面包板&#xff08;电路搭建及上传程序控制led&#xff09;如何使用面包板使用实际元器件搭建电路上传程序到开发板作业 1-12 面包板&#xff08;电路搭建及上传程…

esp-idf-v5.1.1 例程 ble_hid_device_demo 解析

目录 1. 获取ESP-IDF和示例代码 导航到示例代码 3. 示例代码结构 4. 关键文件解析 main.c 初始化和配置: 事件处理: esp_hidd_prf_api.c 和 esp_hidd_prf_api.h esp_hid_gap.c 和 esp_hid_gap.h 5. 编译和烧录 ESP-IDF(Espressif IoT Development Framework)是Es…