保护你无价的数据 | 推荐一个开源备份工具,可去重、增量、压缩、还原到特定日期...

news2024/12/24 11:28:21

Borg 数据备份

Borg 的优势是

  • 高效:

    BorgBackup 会将文件按数据块去重,只有改动的数据块才会被备份。

    一个 25 GiB 的虚拟机磁盘文件,只改动了 1 GiB,那就只会新增备份这 1 GiB 的数据;

  • 高速:

    核心算法使用 C 编译,使用缓存快速跳过未改动过的文件以加快备份速度;

  • 加密:

    数据默认是 AES-256 加密并且 HMAC-SHA256 校验的;

  • 压缩:

    支持多种压缩算法,可自动检测数据是否属于可被压缩的类型;

  • 异地备份:

    原生支持 SSH 备份到异地服务器,也可使用 NFS 等网络存储;

  • 可挂载:

    可以直接用 FUSE 挂载一个备份存档读取里面的数据;

  • 跨平台:

    支持 Linux, macOS, BSD, Windows (Cygwin / WSL) 等多种平台;

  • 开源:

    安全可审计,易于修改。

来自:https://blog.csdn.net/allway2/article/details/107449842

Borg 安装

wget https://github.com/borgbackup/borg/releases/download/1.2.4/borg-linux64
mv ./borg-linux64  /usr/bin/borg
ln -s /usr/bin/borg /usr/bin/borgfs

Borg 备份

现在有 2 个目录,要把source里面的数据备份到backup里面,原始数据如下:

ls -ltr source/ backup/
backup/:
总用量 0

source/:
总用量 573056
-rw-rwxr-- 1 admin admin 545468729 5月   8 16:13 Smi1.fa
-rw-rwxr-- 1 admin admin  41336490 5月   8 16:14 Smi1.gff

1. 初始化 backup 目录 (这里测试,采用不加密的方式)

borg init --encryption=none backup
# borg init --encryption=repokey /home/karthick/borg/backup

# 初始化后目录结果如下,这里应该是索引文件和效验文件
ls -ltra backup/
# 总用量 60
# drwxrwxr-x 4 admin admin    34 5月   8 16:14 ..
# -rw------- 1 admin admin    73 5月   8 16:26 README
# -rw------- 1 admin admin   209 5月   8 16:26 config
# drwx------ 3 admin admin    15 5月   8 16:26 data
# -rw------- 1 admin admin    70 5月   8 16:26 hints.1
# -rw------- 1 admin admin   190 5月   8 16:26 integrity.1
# -rw------- 1 admin admin 41258 5月   8 16:26 index.1

2. 创建备份存档

当前备份的存档命令为2023-05-08-1。每天备份时,可以以日期为存档命令,方便回溯。

# 默认情况下,borg 使用lz4压缩算法,lz4压缩算法速度非常快,压缩比低
# --compression zstd,N N 为 1-22,数值越大,压缩比越大
# 软链接会被作为软链接存储,不会存储其链接的源文件
# 这里遇到一个很有意思的事情:我的一个备份里面存在软连接,mount备份的存档后,发现
# 我在源文件里面怎么改,这里就怎么改,实时更新,还以为是 borg 出了 bug。后来才发现
# 备份的是软连接。
# 删除掉的文件在后面的存档里也会被删除
borg create --stats --progress backup::2023-05-08-1 source/
# borg create --stats --compression zstd,10 --progress backup::2023-05-08-2 source/

3. 获取存档信息

borg info backup::2023-05-08-1

输出如下

Archive name: 2023-05-08-1
Archive fingerprint: 9a368357c37399a5d3c784829471b7eb4bb0596b2011de74d444363581f6c868
Time (start): Mon, 2023-05-08 16:42:34
Time (end):   Mon, 2023-05-08 16:42:37
Duration: 2.49 seconds
Number of files: 2
Utilization of max. archive size: 0%
------------------------------------------------------------------------------
                       Original size      Compressed size    Deduplicated size
This archive:              586.81 MB            315.08 MB            315.08 MB
All archives:              586.81 MB            315.08 MB            315.09 MB

                       Unique chunks         Total chunks
Chunk index:                     225                  225
------------------------------------------------------------------------------

4. 列出当前所有存档和存档内容

borg list backup
# 2023-05-08-1                         Mon, 2023-05-08 16:42:34 [9a368357c37399a5d3c784829471b7

# 列出存档内容
borg list backup::2023-05-08-1
# drwxrwxr-x admin  admin         0 Mon, 2023-05-08 16:14:30 source
# -rw-rwxr-- admin  admin  545468729 Mon, 2023-05-08 16:13:41 source/Smi1.fa
# -rw-rwxr-- admin  admin  41336490 Mon, 2023-05-08 16:14:05 source/Smi1.gff

# 列出存档内容,同时排除特定文件或目录
borg list backup::2023-05-08-1 --exclude Smi1

5. 新增一个文件测试备份

head -n 10000 source/Smi1.fa >source/NewSmi1.fa
borg create --stats --progress backup::2023-05-08-2 source/

输出如下,总大小没有变。相同内容的文件,没有增加额外存储。

------------------------------------------------------------------------------               
Repository: /home/admin/tes/backup
Archive name: 2023-05-08-2
Archive fingerprint: 25d7942b01376dad1f84f3efef276d30c680be5d83e76626427f3794143345a5
Time (start): Mon, 2023-05-08 19:24:59
Time (end):   Mon, 2023-05-08 19:25:01
Duration: 1.13 seconds
Number of files: 3
Utilization of max. archive size: 0%
------------------------------------------------------------------------------
                       Original size      Compressed size    Deduplicated size
This archive:              587.32 MB            315.36 MB            284.22 kB
All archives:                1.17 GB            630.44 MB            315.39 MB

                       Unique chunks         Total chunks
Chunk index:                     228                  451
------------------------------------------------------------------------------

给之前文件增加一些内容

cat source/NewSmi1.fa >>source/Smi1.fa
borg create --stats --progress backup::2023-05-08-3 source/

输出如下,新的备份存档只包含文件新增的部分内容,总的存档大小略微增加。

------------------------------------------------------------------------------               
Repository: /home/admin/tes/backup
Archive name: 2023-05-08-3
Archive fingerprint: 887d645b3e80779431b564feab24e1ee5a9e1184780c291a5b11134da8d368f1
Time (start): Mon, 2023-05-08 19:27:41
Time (end):   Mon, 2023-05-08 19:27:42
Duration: 1.12 seconds
Number of files: 3
Utilization of max. archive size: 0%
------------------------------------------------------------------------------
                       Original size      Compressed size    Deduplicated size
This archive:              587.83 MB            315.65 MB              1.75 MB
All archives:                1.76 GB            946.09 MB            317.15 MB

                       Unique chunks         Total chunks
Chunk index:                     231                  677
------------------------------------------------------------------------------

再次查看每个档案下备份的文件

# 每个档案下的存储都是当时备份时的全文件,可以看到档案3里面Smi1.fa的大小比档案1里面要大一些
borg list backup::2023-05-08-3
# drwxrwxr-x admin  admin         0 Mon, 2023-05-08 19:23:01 source
# -rw-rwxr-- admin  admin  545978689 Mon, 2023-05-08 19:27:39 source/Smi1.fa
# -rw-rwxr-- admin  admin  41336490 Mon, 2023-05-08 16:14:05 source/Smi1.gff
# -rw-rw-r-- admin  admin    509960 Mon, 2023-05-08 19:23:01 source/NewSmi1.fa

borg list backup::2023-05-08-1
# drwxrwxr-x admin  admin         0 Mon, 2023-05-08 16:14:30 source
# -rw-rwxr-- admin  admin  545468729 Mon, 2023-05-08 16:13:41 source/Smi1.fa
# -rw-rwxr-- admin  admin  41336490 Mon, 2023-05-08 16:14:05 source/Smi1.gff

# 直接使用diff比较2个档案,差异看的更清楚
borg diff backup::2023-05-08-1 2023-05-08-3
# [ctime: Mon, 2023-05-08 16:14:30 -> Mon, 2023-05-08 19:23:01] [mtime: Mon, 2023-05-08 16:14:30 -> Mon, 2023-05-08 19:23:01] source
#   +3.2 MB   -2.7 MB [ctime: Mon, 2023-05-08 16:14:30 -> Mon, 2023-05-08 19:27:39] [mtime: Mon, 2023-05-08 16:13:41 -> Mon, 2023-05-08 19:27:39] source/Smi1.fa
# added     509.96 kB source/NewSmi1.fa

6. 提取档案,恢复数据

提取时只会提取到当前目录,这一点需要注意。

# 新建一个要恢复数据到的目录
mkdir -p recover_dir1

# 切换目录
cd recover_dir1/

# 恢复存档backup::2023-05-08-1,注意路径的变化
borg extract -v --list ../backup::2023-05-08-1
source
source/Smi1.fa
source/Smi1.gff

# 恢复时是恢复的整个文件夹
ls
source

# 查看下时间和大小
ls -l source/
# 总用量 573056
# -rw-rwxr-- 1 admin admin 545468729 5月   8 16:13 Smi1.fa
# -rw-rwxr-- 1 admin admin  41336490 5月   8 16:14 Smi1.gff

7. 删除最早的一个档案,测试恢复第三个档案是否可以全部内容恢复

删除早期档案不影响当前数据的完整恢复。

cd ../
borg delete backup::2023-05-08-1

# 新建一个要恢复数据到的目录
mkdir -p recover_dir2

# 切换目录
cd recover_dir2

# 恢复存档backup::2023-05-08-3,注意路径的变化
borg extract -v --list ../backup::2023-05-08-3

# 查看文件大小
ls -ltsr source/
总用量 574052
 40368 -rw-rwxr-- 1 admin admin  41336490 5月   8 16:14 Smi1.gff
   500 -rw-rw-r-- 1 admin admin    509960 5月   8 19:23 NewSmi1.fa
533184 -rw-rwxr-- 1 admin admin 545978689 5月   8 19:27 Smi1.fa

# 测试查看文件是否一致,输出为空,表示完全一样
diff source/Smi1.fa ../source/Smi1.fa

8. 通过挂载恢复部分文件

cd ../
mkdir /tmp/backup3
borg mount backup::2023-05-08-3 /tmp/backup3
ls -ltrs /tmp/backup3/source/
# 总用量 574049
#  40368 -rw-rwxr-- 1 admin admin  41336490 5月   8 16:14 Smi1.gff
#    499 -rw-rw-r-- 1 admin admin    509960 5月   8 19:23 NewSmi1.fa
# 533183 -rw-rwxr-- 1 admin admin 545978689 5月   8 19:27 Smi1.fa

可以直接拷贝需要的文件出来

# 卸载备份的文件
borg umount /tmp/backup3

# 如果挂载时出现下面的错误,请执行 export 的三句话设置本地语言

#  File "borg/archiver.py", line 183, in wrapper
#  File "borg/archiver.py", line 1371, in _do_mount
#  File "borg/fuse.py", line 545, in mount
#  File "borg/fuse.py", line 278, in _create_filesystem
#  File "borg/fuse.py", line 355, in _process_archive
#  File "os.py", line 812, in fsencode
# UnicodeEncodeError: 'ascii' codec can't encode characters in position 25-29: ordinal not in range(128)

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

9. 修剪存档

定期清空一部分副本以减少空间使用

# --keep-daily 7 means to keep the latest backup on each day, up to 7 most recent days with backups (days without backups do not count). The rules are applied from secondly to yearly, and backups selected by previous rules do not count towards those of later rules. 
# 每周的存档保留最新的,最多保存最近 2 个周
borg prune -v --list --keep-weekly=2 backup/

# 每周的存档保留最新的,最多保存最近 6 个 月
borg prune -v --list --keep-monthly=6 backup/

# 指定对某些特定名字的存档应用此规则
# borg prune -v --list --keep-weekly=2 --prefix='{archive name}' /home/karthick/borg/backup/

10. —dry-run 是你的测试好帮手

不知道命令的操作会有什么后面时,加上--dry-run查看会运行哪些操作。

往期精品(点击图片直达文字对应教程)

782144eeb6eb5de780099190ca6ca8af.jpeg

2a92447880b4f7684281864e6901b74e.jpeg

ad216e42b53cf92e61d0b28332d919cc.jpeg

0fe8b2be5bdcb6e463db67180f6c6c71.jpeg

0b78fd0d9f8448b921f536ce83d551a2.jpeg

869ae7c39aa4a6edeb5d20c42360e965.jpeg

762792acfe73b5f95dfbbe181c9ba203.jpeg

1177e1d0bf04947c7dccb224451bf6b8.jpeg

4dfdb78e99ac01aac99ee2c06e6e8dfd.jpeg

1bee525b641ed26c9bb32f0354cf47f9.jpeg

af7b530b311f4b731c519da62f5db081.jpeg

10dcbf9ecf5c6329d0973a869e82a136.jpeg

5758534da9c56ebca330330fd1ea25c4.png

4b097123c879f04e1c72616719f55f49.png

3d1bcf53fdc9eb8aa4dd1982a99dd8e4.png

cf897aed56115b749daa4ca158195529.png

9a2faf4087e5fb7dfb8935256201a146.jpeg

1b33b00467f482fe9f90b94ea63d282d.jpeg

68714ec657bdc26d8c0f0383333df554.jpeg

8f1988fe20b3ac96db640aa193fb86ac.jpeg

119df9d74eab6d2242211f6b31f2341b.png

d71ae0fb48a52d02540039d3ded6c62f.png

3b7ba617e7172a64f520cce645281f15.jpeg

8beadbbc03617fc531fe4c873c8ec321.png

3357245d424afa85eede51d5bb67d883.png

7595ba42f83113acf3c54bb430b12f34.jpeg

4610c8e85e22e1b91266fafb72294a30.png

0b248fcb8d963b10a684210d8231b982.png

机器学习

a523eb34a82805307ee72fc34daa0b76.png

d7ec9d0cfb2e43e717ff32ba76ef0372.jpeg

bee308fe6b04be2560cc6fd2695c9ac6.jpeg

70403460f50b092eff4fdfe3b51b57bc.png

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

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

相关文章

5-《Kotlin》

5-《Kotlin》 1.kotlin基础: From Java To Kotlin2.Kotlin 的延迟初始化: lateinit var 和 by lazy1.lateinit var2.by lazy 3 Kotlin Tips:怎么用 Kotlin 去提高生产力(kotlin优势)Tip1- 更简洁的字符串Tip2- Kotlin中大多数控制结构都是表达…

[RapidOCRWeb] 桌面版使用教程

引言 说明:桌面版指的是可以直接解压,双击即可运行的版本。通俗来说,对rapidocr_web做了打包,将相关依赖全部放到一个zip包中,不需要本地有额外的环境,降低使用门槛。下面会以Windows版为例,作…

LeetCode 1373. 二叉搜索子树的最大键值和

【LetMeFly】1373.二叉搜索子树的最大键值和 力扣题目链接:https://leetcode.cn/problems/maximum-sum-bst-in-binary-tree/ 给你一棵以 root 为根的 二叉树 ,请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下: 任意节点的…

pandas---数据处理(excel文件)

近期在弄一个项目的前期数据,所以总结了一下,内容如下(以下以csv文件为例) 1. DataFrame常用操作1.1 DataFrame去除空行(1)对于一般空行(2)对于列表式(list)空…

Redis(二)对事务进行操作及Jedis

系列文章目录 Redis入门笔记(一):Redis在Linux下安装和八大数据类型 文章目录 系列文章目录前言Redis对事务进行操作开启事务:multi执行事务:exec放弃事务:discard编译型异常(命令错误&#xf…

信息安全-数据安全-字节大数据平台安全与权限治理实践

导读:本次分享题目为字节跳动大数据平台安全与权限治理实践,文章会围绕下面四点展开: 字节大数据安全体系现状和难点 细粒度权限管控和治理 资产保护能力 数据删除能力 分享嘉宾|许从余 火山引擎 数据平台产品经理 编辑整理&#…

Spring 5 笔记 - 新功能

1. Spring 5 框架新功能 整个Spring 5 框架的代码基于Java8,运行时兼容JDK9,许多不建议使用的类和方法在代码库中删除。Spring 5.0 框架自带了通用的日志封装 (1)Spring 5 已经移除 Log4jConfigListener,官方建议使用…

立创EDA标准版指南1-原理图与封装库

立创 EDA 标准版 由于立创 EDA 新版本改了对应术语,这是对于的表格: 原理图库->符号 PCB 库->封装 PCB 3D 库->3D 模型 下面的全部讲述将依据旧版称呼,因为更直观,新版称呼模棱两可并且与 AD 的工程架构差别较大 这是…

数据分析11——Pandas中数据偏移/数据切分/数据结构转换

数据偏移: 1、shift函数: 在 Pandas 中,shift 函数用于将数组的数据向前或向后平移指定的步数。它可以应用于 Series 或 DataFrame 类型的数据中,并返回一个平移后的新数据结构,其中每个元素都被取代为原始序列中对应…

kubernetes根据podName获取对应的主机pid

获取指定的podName kubectl get pods -n demo -owide登录对应的主机执行docker命令,获取到容器的id docker ps | grep PODNAME拿到的容器id,执行如下命令 获取容器的长的容器id docker inspect container_id找到容器id后 执行 apt-get install jq cat /var/lib…

关于Word文档的处理【笔记】

关于Word文档的处理【笔记】 前言推荐关于Word文档的处理一、解压word如何恢复1 准备2 解压3 恢复 二、对word文档进行图片替换1 首先解压word文档2 进入word文档存放图片的路径3 批量给图片添加水印4 替换原来的media文件5 压缩为docx文件6 打开 最后 前言 2023-5-20 11:00:1…

uniapp 快手授权登录,发布、编辑、裁剪图片和视频,分享 Ba-Kwai

简介(下载地址) 快手授权登录,发布、编辑、裁剪图片和视频,一键智能裁剪,分享私信,打开用户主页,挂载小程序等。自带选择图片和选择视频方法。 抖音授权登录、发布、分享 Ba-Aweme&#xff08…

基于GitLab搭建DevSecOps流水线

本博客地址:https://security.blog.csdn.net/article/details/130734964 一、GitLab安装 GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建Web服务,可通过Web界面访问公开的或者私人的项目。它…

【总结】数据建模调研与设计

一、数据建模背景和目的 1.1 数据建模任务背景 a. xxxx 中台新增数据建模模块,对标行业最佳实践,补齐数据中台短板。 b. 以往的数据建模,包括数仓模型的设计、数仓模型的落地,都是通过第三方的工具,例如DBwaver、Nav…

SOFA Weekly|SOFA 大事记、Layotto 社区会议回顾与预告、社区本周贡献

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展 欢迎留言互动~ SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&am…

【信息安全案例】——应用软件安全(学习笔记)

📖 前言:随着应用软件日益增多,与我们的生活深度绑定,应用软件的安全性问题愈发凸显。针对恶意代码、代码漏洞等安全风险,必须加强安全意识,采取有效措施进行防范。合理有效的安全措施能够确保用户的信息安…

(数字图像处理MATLAB+Python)第九章图像形态学运算-第一、二节:形态学基础和二值形态学运算

文章目录 一:形态学基础(1)结构元素(2)程序 二:二值形态学的基础运算(1)基本形态变换A:膨胀运算①:概述②:示例③:程序 B:…

CleanMyMac X4.13.4中文版下载及使用教程

随着Mac电脑的广泛普及,越来越多的用户开始关注如何保持自己电脑的快速运行。众所周知,Mac电脑的性能和稳定性得到了广泛认可。但是,随着使用时间的增加和数据的增加,任何电脑都可能变得缓慢和难以使用。为了解决这一问题&#xf…

2-《Java进阶》

2-《Java进阶》 一. java多线程(非常重要)1.1. 线程java多线程实现方式主要有:1.继承Thread 2.实现Runnable3.实现CallableRunnable 与 Callable的区别:1.2. 线程的状态有哪些?1.3. 线程的状态转换及控制1.4. Java如何…

SeaweedFs使用-通过http接口实现文件操作

通过http接口实现文件操作 SeaweedFs可通过filer的http接口/master中的http接口来进行文件上传 1.通过master的接口进行上传文件 通过各种方式进行请求接口:http://localhost:9333/submit, ip和端口号是master服务的信息。此接口通过post请求方式将文件的二进制流…