基于 rsync 像 macOS 的 Time Machine 一样备份您的 Linux 服务器

一、前言

Time Machine 这东西用过 macOS 的都知道,可以说是数据备份神器。

前几天我误删了几个文件,还好我有设置 Time Machine 自动备份,于是我打开 Time Machine,点几下鼠标,文件就回来了!

我想要是 Time Machine 能用来备份 Linux 服务器那该有多好啊,特别是像我这种喜欢乱改配置文件然后又从来不备份的人!

于是我 Google 了一下,发现 GitHub 上有一个基于 rsync 二次开发的备份脚本!于是乎马上开始折腾……

GitHub 项目:laurent22/rsync-time-backup

我的备份方式是外接硬盘。这个脚本我用了几天,感觉 Time Machine 的特性都具备了,而且磁盘满的时候可以自动清理最早的备份,权限、硬链接全部正常,觉得应该完美了。最重要的是 (wo) 不(bu)用 (hui) 配置复杂的 rsync,可以说是 Linux 版的 Time Machine!

二、系统环境

  • 操作系统:CentOS 7.3.1611(已关闭 SELinux)
  • 备份盘挂载点:/backup
  • 备份盘文件系统:ext4

三、配置步骤

3.1 下载脚本文件

克隆 GitHub 上的项目

git clone https://github.com/laurent22/rsync-time-backup.git

安装脚本文件

cp rsync-time-backup/rsync_tmbackup.sh /usr/local/bin/rsync_tmbackup.sh

赋予脚本执行权限

chmod +x /usr/local/bin/rsync_tmbackup.sh

附:脚本文件基本用法
rsync_tmbackup.sh <备份源> <备份目标> [排除文件列表]

3.2 创建备份排除列表

如果要备份根目录的话,必须指定一个排除列表来防止根目录所在分区以外分区的文件被备份。

文件格式:- <目录>(一行一个目录。)

下面是我的排除列表(位置:/etc/rsync_tmbackup_ext.txt):

cat /etc/rsync_tmbackup_ext.txt- /mnt
- /backup
- /dev
- /proc
- /sys
- /tmp

3.3 在备份目标上创建一个标记点

在非 rsync 服务器上进行备份时,必须先创建一个标记点,否则备份将无法进行。使用 rsync 或者 scp 方式备份的可能不用(自己没试过)。

touch /backup/backup.marker

3.4 开始备份

/usr/local/bin/rsync_tmbackup.sh / /etc/rsync_tmbackup_ext.txt

不出意外的话,下面就开始刷屏了。

3.5 设置整点自动备份

crontab -e

请在命令行窗口中按下 O(大写) ,将以下内容直接粘贴到命令行窗口中,再按下 ESC ,最后输入 :wq按回车。

0 */1 * * * /usr/bin/flock -n /tmp/backup.lock -c "/usr/local/bin/rsync_tmbackup.sh / /backup /etc/rsync_tmbackup_ext.txt" > /dev/null 2>&1

这一步完成之后,每隔一个小时系统就会自动执行该脚本来实现自动备份。

说明

  • 请确保 crond 服务已开启,否则无法定时备份。

3.6 结果

下面是脚本运行几天之后我的备份目录。我这里设置的是每天 8 点到 22 点整点备份。

[root: ~]# ll /backup
总用量 80K
drwxr-xr-x  16 root root 4.0K 4月  29 15:00 .
dr-xr-xr-x. 20 root root 4.0K 4月  29 08:21 ..
dr-xr-xr-x   3 root root 4.0K 4月  29 14:04 2023-04-28-170001
dr-xr-xr-x  15 root root 4.0K 4月  26 22:11 2023-04-28-180002
dr-xr-xr-x  15 root root 4.0K 4月  26 22:11 2023-04-28-190001
dr-xr-xr-x  15 root root 4.0K 4月  26 22:11 2023-04-28-200001
dr-xr-xr-x  15 root root 4.0K 4月  26 22:11 2023-04-28-210001
dr-xr-xr-x  15 root root 4.0K 4月  26 22:11 2023-04-28-220001
dr-xr-xr-x  16 root root 4.0K 4月  29 08:21 2023-04-29-080002
dr-xr-xr-x  16 root root 4.0K 4月  29 08:21 2023-04-29-100002
dr-xr-xr-x  16 root root 4.0K 4月  29 08:21 2023-04-29-110003
dr-xr-xr-x  16 root root 4.0K 4月  29 08:21 2023-04-29-120002
dr-xr-xr-x  16 root root 4.0K 4月  29 08:21 2023-04-29-130001
dr-xr-xr-x  16 root root 4.0K 4月  29 08:21 2023-04-29-140002
dr-xr-xr-x  15 root root 4.0K 4月  29 08:21 2023-04-29-150002
-rw-r--r--   1 root root    6 4月  29 15:20 backup.inprogress
-rw-r--r--   1 root root    0 4月  27 07:59 backup.marker
lrwxrwxrwx   1 root root   17 4月  29 14:13 latest -> 2023-04-29-140002
drwx------   2 root root  16K 4月  26 22:10 lost+found

下面我们对比一下 macOS 原生的 Time Machine。

[zenandidi: ~]$ ls -l /Volumes/Time\ Machine/Backups.backupdb/MacBook\ Pro 
total 8
drwxr-xr-x@ 21 root  wheel   714B  4 29 15:03 .
drwxr-xr-x@  6 root  wheel   204B  2  8 18:01 ..
drwxr-xr-x@  6 root  wheel   204B  4 27 07:04 2023-04-27-070433
drwxr-xr-x@  6 root  wheel   204B  4 28 09:21 2023-04-28-092124
drwxr-xr-x@  6 root  wheel   204B  4 28 15:01 2023-04-28-150135
drwxr-xr-x@  6 root  wheel   204B  4 28 16:00 2023-04-28-160028
drwxr-xr-x@  6 root  wheel   204B  4 28 16:56 2023-04-28-165654
drwxr-xr-x@  6 root  wheel   204B  4 28 17:55 2023-04-28-175554
drwxr-xr-x@  6 root  wheel   204B  4 28 18:56 2023-04-28-185654
drwxr-xr-x@  6 root  wheel   204B  4 28 20:08 2023-04-28-200806
drwxr-xr-x@  6 root  wheel   204B  4 28 21:17 2023-04-28-211735
drwxr-xr-x@  6 root  wheel   204B  4 28 22:45 2023-04-28-224546
drwxr-xr-x@  6 root  wheel   204B  4 29 07:05 2023-04-29-070534
drwxr-xr-x@  6 root  wheel   204B  4 29 08:05 2023-04-29-080531
drwxr-xr-x@  6 root  wheel   204B  4 29 08:50 2023-04-29-085018
drwxr-xr-x@  6 root  wheel   204B  4 29 09:54 2023-04-29-095453
drwxr-xr-x@  6 root  wheel   204B  4 29 11:03 2023-04-29-110311
drwxr-xr-x@  6 root  wheel   204B  4 29 13:04 2023-04-29-130419
drwxr-xr-x@  6 root  wheel   204B  4 29 14:12 2023-04-29-141247
drwxr-xr-x@  4 root  wheel   136B  4 29 15:03 2023-04-29-150331.inProgress
lrwxr-xr-x   1 root  wheel    17B  4 29 14:12 Latest -> 2023-04-29-141247

可以看出,仿真度已经非常高了!

3.7 恢复

这里恢复的话当然没有像 macOS 那样可以用漂亮的 GUI 啦!我们直接用 rsync 命令将备份时间点里面的文件恢复过去就好了。

例如恢复整个 /etc 目录:

rsync -aP /backup/2023-04-29-080002/etc/ /etc

-a 参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,

考虑使用 --dry-run 选项来检查要复制的内容。如果您还希望删除存在于目标但不存在于备份中的文件,请使用 --delete(显然,在使用此选项时必须格外小心)。

我这里并没有尝试全盘恢复,全盘恢复的话用启动盘启动之后把全部文件拷贝过去应该也是可以的(如果开了 SELinux 那么还需要恢复一下安全上下文数据)。

四、注意事项

  1. 如果需要使用 samba 网络备份的话,必须在上面建立一个虚拟的磁盘映像,然后创建一个 ext4 文件系统再挂载,否则所有的硬链接将不可用,权限也无法保存。
  2. 如果要使用网络磁盘的话,推荐使用 NFS,或者直接备份到其他的 rsync 服务器上。
  3. 脚本可能会更新,更新之后的用法可能会改变,请以 GitHub 项目上的最新说明为准。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《遗留系统现代化》读书笔记(基础篇)

你现在所写的每一行代码&#xff0c;都是未来的遗留系统 为什么要对遗留系统进行现代化&#xff1f; 什么是遗留系统&#xff1f; 判断遗留系统的几个维度&#xff1a;代码、架构、测试、DevOps 以及技术和工具。时间长短并不是衡量遗留系统的标准。代码质量差、架构混乱、没…

JavaWeb(2)——HTML、CSS、JS 快速入门

一、JavaScript快速入门 JavaScript | MDN (mozilla.org) 一个完整的JavaScript实现由3个不同部分组成&#xff1a;核心&#xff08;ECMAScript&#xff09;、文档对象模型&#xff08;DOM&#xff09;和浏览器对象模型&#xff08;BOM&#xff09;&#xff0c;如图所示。 EC…

大数据与视频技术的融合趋势将带来怎样的场景应用?

视频技术和AI技术的融合是一种新兴的技术趋势&#xff0c;它将改变视频行业的运作方式。视频技术和AI技术的融合主要包括以下几个方面&#xff1a; 1&#xff09;人脸识别技术 人脸识别技术是AI技术的一个重要应用场景。它可以通过对视频中的人脸进行识别和分析&#xff0c;实…

常用语言的线程模型(Java、go、C++、python3) | 京东云技术团队

背景知识 软件是如何驱动硬件的&#xff1f; 硬件是需要相关的驱动程序才能执行&#xff0c;而驱动程序是安装在操作系统内核中。如果写了一个程序A&#xff0c;A程序想操作硬件工作&#xff0c;首先需要进行系统调用&#xff0c;由内核去找对应的驱动程序驱使硬件工作。而驱动…

Spring源码学习-MVC的WEB源码解析

目录 SpringMVC官方文档SpringMVC的父子容器父子关系的定义自定义快速启动器启动过程容器创建的过程容器刷新启动 父子容器示例图 网络请求链路分析DispatcherServlet请求链路 DispatcherServlet详解(MVC核心功能类)DispatcherServlet九大组件九大组件的初始化默认策略初始化时…

Linux网络基础 — 网络层

目录 IP协议 IP协议报头格式 网段划分 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 补充 网络层 在复杂的环境中确定一个合适的路径。 IP协议 ip具有将数据从 主机A 跨网络送到 主机B 的能力。 主机: 配有IP地址&#xff0c;但是不进行路由控制的设备…

二、DDL-3.数据类型

分为3种&#xff1a;数值类型、字符串类型、日期时间类型。 一、数值类型 【案例】 年龄&#xff1a; age TINYINT UNSIGNED——范围&#xff08;0&#xff0c;255&#xff09;够用 分数&#xff1a;score double(4,1)——分数0-100有小数&#xff0c;4—最高位数&#xff0…

LabVIEW实现基于DCT的野生动物监测无线图像传输

LabVIEW实现基于DCT的野生动物监测无线图像传输 针对野生动物物种数量不断下降的情况&#xff0c;需改进以增强当前野生动物监测系统的能力。目前的系统要求工人进入森林以收集存储在存储卡中的图像数据。这项任务风险很大&#xff0c;而且耗费大量时间。系统也无法提供实时报…

[C语言]if语句详解

C语言初阶系列 分支语句和循环语句&#xff08;1&#xff09; 目录 C语言初阶系列 前言 一&#xff0c;什么是语句&#xff1f; 1.1如何理解语句&#xff1f; 二&#xff0c;分支语句&#xff08;选择结构&#xff09; 2.1,if语句 2.2,if语句的错误的条件写法 2.2,if语…

python opencv 级联Haar多目标检测

一、基于OpenCV的haar分类器实现笑脸检测 1、Haar分类器介绍 &#x1f680;Haar分类器是一种基于机器学习的目标检测算法&#xff0c;它使用Haar特征描述图像中的目标。Haar特征是基于图像亮度的局部差异计算得出的&#xff0c;可以用来描述目标的边缘、角落和线条等特征。 使用…

Linux下Nginx升级

nginx版本升级不会覆盖配置文件&#xff0c;但以防万一升级前请先备份配置文件或者配置文件夹 默认配置文件地址&#xff1a;/usr/local/nginx/conf/nginx.conf 1.下载 wget -c http://nginx.org/download/nginx-1.24.0.tar.gz 2.解压 tar -xvf nginx-1.24.0.tar.gz 3.nginx…

【论文笔记】图像修复MPRNet:Multi-Stage Progressive Image Restoration 含代码解析

目录 一、介绍 二、使用方法 1.推理 2.训练 三、MPRNet结构 1.整体结构 2.CAB(Channel Attention Block) 3.Stage1 Encoder 4.Stage2 Encoder 5.Decoder 6.SAM(Supervised Attention Module) 7.ORSNet(Original Resolution Subnetwork) 四、损失函数 1.Charbonni…