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

news2024/11/25 4:49:21

一、前言

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.coloradmin.cn/o/765170.html

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

相关文章

【Docker】Docker镜像和Docker容器

文章目录 Docker镜像镜像基本概念为什么需要镜像&#xff1f;Union FS&#xff08;联合文件挂载&#xff09;docker镜像原理 Docker镜像命令docker rmidocker savedocker loaddocker historydocker image prune docker镜像实战离线迁移镜像镜像存储的压缩与共享 Docker容器容器…

npm link 实现全局运行package.json中的指令

packages.json "name":"testcli","bin": {"itRun": "index.js"},执行命令 npm link如果要解绑定 npm unlink testcli 现在你可以输入 itRun试一下

vue3使用下载附件功能

效果&#xff1a; 点击即可以下载打开。 代码&#xff1a; <div v-show"item.attachment.length > 0"><h3>下载附件</h3><divv-for"(doc, docIndex) in item.attachment":key"docIndex"><astyle"color: #41…

WebSocket集群解决方案,不用MQ

首先不了解WebSocket的可以先看看这篇文章&#xff0c;以及传统的WebSocket方案是怎么做的&#xff0c;https://www.cnblogs.com/jeremylai7/p/16875115.html 这是用MQ解决的版本&#xff0c;那么这种方案存在什么问题呢。 第一&#xff1a;增加MQ&#xff0c;可能造成消息挤压…

动态内存分配(3)——柔性数组

前言&#xff1a; 以前我们所学数组&#xff08;包括变长数组&#xff09;&#xff0c;在数组声明的时候&#xff0c;就必须指定数组的大小&#xff0c;它所需要的内存在编译时分配。但是有时候需要的数组大小在程序运行的时候才能知道&#xff0c;该怎么办呢&#xff1f;这就是…

Zookeeper+kafka的应用及部署

Zookeeperkafka的应用及部署 一、Zookeeper的概念1、Zookeeper 定义2、Zookeeper 工作机制3、Zookeeper 特点4、Zookeeper 数据结构5、Zookeeper 应用场景6、Zookeeper 选举机制&#xff08;1&#xff09;第一次启动选举机制&#xff08;2&#xff09;非第一次启动选举机制(1)、…

【Ajax】笔记-NodeMon 简介、安装、使用

NodeMon 简介、安装、使用 简介安装启动应用测试 简介 nodemon用来监视node.js应用程序中的任何更改并自动重启服务,非常适合用在开发环境中。以前&#xff0c;我们开发一个node后端服务时&#xff0c;每次更改文件&#xff0c;均需重启一下&#xff0c;服务才能生效。这使我们…

阿里云RocketMQ——高可用、高可靠的分布式消息处理系统

阿里云产品测评-RocketMQ 今天我对阿里的又一产品进行了深度测评&#xff08;RocketMQ&#xff09;&#xff0c;首先如果是新用户的话&#xff0c;可以先关注下面这个免费体验的活动。 一、上手实操 阿里云免费试用 1.付费或者免费开通RocketMQ 云消息队列 RocketMQ 版是阿…

容器云平台监控告警体系(四)—— Golang应用接入Prometheus

1、概述 目前容器云平台中的容器仅支持获取CPU使用率、内存使用率、网络流入速率和网络流出速率这4个指标&#xff0c;如果想监控应用程序的性能指标或者想更加细粒度的监控应用程序的运行状态指标的话&#xff0c;则需要在应用程序中内置对Prometheus的支持或者部署独立于应用…

悦数图数据库v3.5.0发布:查询性能大幅提升,为智能决策和 AI 大模型应用提速

近日&#xff0c;悦数图数据库最新版本&#xff08;v3.5.0&#xff09;正式发布&#xff0c;作为国内首个能够容纳千亿点、万亿边并保持毫秒级查询延时的企业级原生分布式图数据库&#xff0c;悦数图数据库 3.5.0 版本进一步强化了数据库内核的查询性能和稳定性&#xff0c;同时…

socks协议详解

0x01 socks协议简介 Socks&#xff08;Socket Secure&#xff09;协议是一种网络协议&#xff0c;处于会话层&#xff0c;用于管理网络连接并提供安全性和隐私保护。通过使用Socks代理服务器&#xff0c;客户端可以隐藏其真实IP地址和其他身份信息&#xff0c;从而匿名地访问互…

机器学习 day28(模型评估)

为什么需要模型评估 我们可以借助图像来判断模型是否良好。但当我们用单一特征来绘制f(x)图像时&#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语…

Houdini Vex 补缺

一. transorm —— move—— scale—— rot1.这里 补2 个函数 quaternion( ) &#xff08;角度&#xff08;弧度制&#xff09;, 轴&#xff09; 获取4元数 qroate( ) &#xff08;quaternion &#xff0c;点坐标&#xff09; 进行旋转 案例&#xff1a; 参考 视频连接 般 b站…

【山河送书第三期】:《Python机器学习:基于PyTorch和Scikit-Learn 》赠书四本!!

【山河送书第三期】&#xff1a;《Python机器学习&#xff1a;基于PyTorch和Scikit-Learn 》 前言内容简介作者简介参与方式 前言 近年来&#xff0c;机器学习方法凭借其理解海量数据和自主决策的能力&#xff0c;已在医疗保健、 机器人、生物学、物理学、大众消费和互联网服务…

如何向资深开发人员寻求帮助(并获得帮助)

在程序开发过程中&#xff0c;我们时常会遇到让人挠头的问题。如何寻求帮助&#xff0c;尤其是如何向资深开发人员寻求帮助&#xff0c;是一门值得学习的技艺。这并不只是简单地把问题抛出来&#xff0c;而是需要学会在何时求助&#xff0c;如何提问&#xff0c;如何理解答案&a…

股票量化系统QTYX选股框架实战案例集|越强的龙头出分歧,越大可能出反包-230717...

前言 “实战案例个股画像”系列和大家分享我基于QTYX选股框架&#xff0c;在实战中选股的案例&#xff0c;和大家一起见证QTYX选股框架逐步完善的过程&#xff0c;帮助大家理解QTYX的精髓。 关于QTYX的使用攻略可以查看链接&#xff1a;QTYX使用攻略 关于QTYX初衷和精髓可以查看…

怎么用Midjourney制作表情包

要使用Midjourney制作表情包&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 打开Midjourney的官方网站或下载Midjourney应用程序&#xff0c;并登录你的账户。 2. 在Midjourney中&#xff0c;选择创建新项目或表情包。 3. 在项目中&#xff0c;你可以选择使用预设的模…

【学习笔记】浅谈最小生成树及重构树

板子传送门 定义 生成树 一个连通图的生成树是一个极小的连通子图&#xff0c;它包含图中全部的 n n n 个顶点&#xff0c;但只有构成一棵树的 n − 1 n-1 n−1 条边。 最小生成树 其实就是一个图中最小的一个生成树 所谓一个 带权图 的最小生成树&#xff0c;就是原图中…

Label基本用法

作用&#xff1a;是一个标签&#xff0c;可以用来显示文本&#xff1b; 常用属性&#xff1a; 常用事件&#xff1a; 后台代码示范&#xff1a; //d单击标签时触发private void label1_Click(object sender, EventArgs e){MessageBox.Show("标签被单击");//获取标签…