• 那是云首页
  • 快捷导航
  • 更多
    设为首页收藏本站
  • |

#楼主# 2022-3-20 09:06

跳转到指定楼层
【老骥伏枥-虎年大礼包】不同品牌NAS之间实现数据同步备份的问题


提出问题的背景

前几年的大礼包都是基于嵌入式linux逆向工程讲解关于破解不同品牌的NAS固件。今年的礼包我们暂时不谈破解,而是讨论linux系统内的一个相当重要的应用软件。在广大坛友都上手使用了各种品牌的NAS系统之后,就提出了“不同品牌NAS之间实现数据同步备份”这样一个应用方面的问题。这个问题的提出是必然现象,因为NASNetwork Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”。它是一种专用数据存储服务器。它以数据为中心,当然数据同步备份是一个必不可少的必备功能。

其实各种品牌的NAS都会提供自己的专有的同步备份功能,在用户GUI界面设计上,有些品牌做的比较好,有些比较差。但它们都不能保障对于不同品牌NAS之间实现数据同步备份。针对这个问题,笔者进行了一些研究和测试,现在就把自己的一些体会与广大坛友们分享一下。目的是为了进行教学, 研究和技术交流。

第一讲
介绍rsync跨平台差分备份工具软件

rsync是以GNU通用公共许可证发行的自由软件[1]。现有的各种品牌的NAS基本上都是基于Unix/Linux系统开发的。就算是各种品牌的NAS自己专有的同步备份功能,大多数也都是基于rsync这款强有力的工具软件开发的。但NAS厂商在开发用户GUI界面时,都没有把兼容其他品牌的NAS系统的功能解决好;或者说就根本没有考虑要做兼容其他品牌的NAS系统的问题。

rsync的初始版本发表于1996年6月19日,到目前已有超过25年的历史了。它的原作者是:安德鲁·垂鸠(Andrew Tridgell)与保罗·麦可拉斯(PaulMackerras)。开发者是:韦恩·大卫森(Wayne Davison)。目前的稳定版本是:3.2.3(2020年8月6日,18个月前)。该款工具软件能同步更新两处计算机的文档与目录,并适当利用差分编码以减少数据传输量。rsync中的一项同类工具软件不常见的重要特性是每个目标的镜像只需传送一次。 rsync可以拷贝/显示目录内容,以及拷贝文档,并可选压缩以及递归拷贝。在常驻模式(daemon mode)下,rsync预设监听TCP的873端口,以原生rsync传输协定,或者透过远端shellRSH或者SSH提供文档。 SSH模式下,rsync用户端执行程序必须同时在本地和远端机器上存在。

rsync实用程序使用由澳洲电脑程序师安德鲁·垂鸠(Andrew Tridgell)发明的算法,在当接受端的设备已经有相同结构(例如档)但不同版本时,有效地通过通讯连线将结构传输。在他1999年的博士论文《Efficient Algorithms for Sorting and Synchronization[2]中,详细介绍了rsync的设计、实现与性能。

接受端将档拷贝打散成固定大小为 的不重叠片段,并对每个片段计算两个校验和:MD4散列函数与一个较弱的旋转哈希。它将这些校验和送给发送者。通讯协议版本30(与rsync版本3.0.0一并发行)现在使用MD5散列函数以替代MD4[3]

发送者对位于其版本的档中每个大小为S 的片段计算轮替校验和,即使是重叠的片段。这可被有效的计算透过特别的轮替校验和算法:如果bit 位n n+S-1的轮替校验和是 R,从bitn+1 n+S的轮替校验和可从 Rbit n,以及bit n+S 计算出而不需要真正去检验中间的bit 位。因此,如果bit 125的轮替校验和已被算出,那计算bit 226的轮替校验和可完全依靠之前的校验和与bit 1bit 26算出。

rsync使用的旋转哈希来自于马克艾德勒(Mark Adler)的adler-32校验和算法。该算法也被用于zlib,而它本身也基于Fletcher校验算法。

发送者其后以接收者送来的一组轮替校验和比较它自己的轮替校验和以决定是否任何匹配存在。如果是的话,它便透过计算匹配区块的MD4校验和与接受端送来的MD4校验和比较来验证匹配。

发送者稍后传送给接收者不与接收者方任何区块匹配的档的那些部分,以及如何合并这些区块到接收者版本的组装指令。在实际上,这产生了与发送者端档一模一样的拷贝。

如果发送者与接收者档版本有许多区段相同,该公用程序只需传送相对小部分的资料以将档同步。

rsync演算法构成rsync应用程序核心并最佳化两台设备间TCP/IP的传输同时,rsync应用程序也支援其他种显著增进档传输或备份的重要功能。他们包括在发送端与接收端个别利用zlib进行区块区块间压缩解压缩,以及支援通讯协定如ssh。该协定让加密传输兼具压缩与效率,透过rsync演算法产生的差分资料变得可能。除ssh以外,stunnel亦可被利用于创造加密通道以保全被传输的资料。

第二
简介rsync的使用

现有的各种品牌的NAS产品中都已经安装了rsync这个强大的工具。只是因为rsync软件并不提供GUI界面的应用,所以小白和菜鸟们可能并不知道它的存在。如果你没有遇到不同品牌的NAS产品之间的数据同步备份的问题,当然也就不需要了解和学习如何使用命令行rsync的使用了。

要通过命令行使用rsync你必须与NAS建立一个shell的连接。通常是使用sshNAS建立起一个shell 的连接。具体如何做,要根据你的NAS系统说明来操作。因为这里我们要讲的是rsync的使用,我们假设你已经与NAS建立一个shell 的连接。

rsync,代表remote  sync,是一个即可以远程也可以本地文件同步工具。它使用一种算法,通过仅移动已更改的文件部分来最小化复制的数据量。

在本中,我们将回顾使用 rsync 时的最简单和基本的一些语法,解释如何使用 rsync 与远程系统同步,以及其他可用的选项。为了练习使用 rsync 在本地和远程系统之间同步文件,您需要两台NAS机器分别充当本地设备和远程设备。这两台NAS可以是虚拟专用服务器、虚拟机、容器或实体NAS,只要它们已正确配置即可。

了解 rsync 语法,rsync 的语法与其他软件类似,例如 sshscp cp

我在这里暂时以威联通系统为例来做介绍如何使用rsync。假设威联通NAS系统的ssh账号也是adminIP地址是192.168.x.x,目录卷在/share/Public,则通过运行以下命令连接到威联通的NAS系统:


通过运行以下命令切换到您的主目录,我在这里先讲本地的数据同步备份,然后再过度到讲远程数据同步备份命令。

[~]# cd/share/Public  假设这跟目录是你的威联通系统的供你学习rsync命令用的实验用的主目录,你的屏幕就是如下样子。

[/share/Public ]#

然后创建一个测试目录:
[/share/Public]#  mkdir dir1

创建另一个测试目录:
[/share/Public]#  mkdir dir2

再来添加一些测试文件:
[/share/Public]#  touch dir1/file{0..9}

现在有一个名为 dir1 的目录,其中包含 10 个空文件。你可以使用ls命令自行查看。

您还有一个名为 dir2 的空目录。要将 dir1 的内容同步到同一系统上的 dir2,您将运行 rsync 并使用-a 标志,它是一个组合标志,代表“归档”。此标志以递归方式同步并保留符号链接、特殊和设备文件、修改时间、组、所有者和权限。是推荐使用的标志。

[/share/Public]#  rsync  -a  dir1/  dir2

请注意,在这个命令的语法中,第一个参数的末尾有一个斜杠 (/),这个尾部斜杠表示 dir1 的内容。如果没有尾部斜杠,将会包括dir1目录,将被放置在 dir2 中。结果将创建一个如下所示的层次结构:

~/dir2/dir1/[ file]

另一个提示是在执行 rsync 命令之前仔细检查你的参数。 rsync 提供了一种通过传递 -n --dry-run 选项来执行此操作的方法。 -v 标志,意思是“详细”,也是获得适当输出所必需的。您将在以下命令中组合 an v 标志。例如:

[/share/Public]#  rsync -anv dir1/ dir2

输出:
sendingincremental file list
./
File0
file1
file2
file3
file4
file5
file6
file7
file8
file9

现在将该输出与删除尾部斜杠时收到的输出进行比较,如下所示:

[/share/Public]#  rsync  -avn  dir1  dir2

输出:
sendingincremental file list
dir1/
dir1/file0
dir1/file1
dir1/file2
dir1/file3
dir1/file4
dir1/file5
dir1/file6
dir1/file7
dir1/file8
dir1/file9

看出不同的地方了吗?此输出现在表明目录本身已被传输,而不仅仅是目录中的文件。

接下来就要讲讲使用 rsync 与远程NAS设备做数据备份同步的命令了。

游客,如果您要查看本帖隐藏内容请回复

如果您正在传输尚未压缩的文件,例如文本文件,您可以通过使用 -z 选项添加压缩来减少网络传输:(仅仅给出语法规则,就不举例了。)
rsync -az  source  destination

上述如何使用rsync命令实现本地NAS和远程NAS之间数据备份同步,所谓的本地和远程我们还可以把本地理解为“发起方”,把远程理解为“接收方”。虽然两方都需要rsync这个应用工具,但仅仅在本地一方使用命令操作就可以解决所有的备份同步问题了。远程一方无需做任何操作。这正是我讲解命令时特意强调了“推送”与“拉取” 操作功能的目的。由此你也应该能体会出来为什么现有的各种品牌的NAS都使用rsync作为备份同步核心工具的原因了吧。

由于NASYUN的篇幅限制,请看楼下,第 【威联通与群晖之间数据备份同步实践范例】,精彩继续!

评分

参与人数 1贡献 +1 收起 理由
心愿 + 1 很给力!

查看全部评分

最自然的一种表达方式,即是不写赞赏语,红色赞赏按钮就在那,大家懂的。
那是云论坛 - 国内知名的NAS交流平台
http://www.nasyun.com
分享淘帖
回复 印象

使用道具

James 发表于 2026-2-11 15:58 来自 中国江苏苏州
膜拜大佬的无私奉献!!
回复 支持 反对 印象

使用道具 举报

EthanLeen 发表于 2026-1-28 18:52 来自 中国北京
啥也不说了,感谢楼主分享哇!
回复 支持 反对 印象

使用道具 举报

飘舞凌乱 发表于 2026-1-19 10:44 来自 中国
认真学习一下,正好研究下群晖与飞牛之间的同步问题
回复 支持 反对 印象

使用道具 举报

bresan 发表于 2025-6-20 08:15 来自 中国四川广元
如果帖主的内容帮助到你,请回帖表示谢意(回贴时请遵守当地法律哦!)
回复 支持 反对 印象

使用道具 举报

aben 发表于 2025-5-28 18:01 来自 中国浙江宁波
致敬大佬  早在5年前第一次折腾黑群的时候 就看了作者很多文章 受益匪浅
回复 支持 反对 印象

使用道具 举报

netboy2008 发表于 2025-3-11 17:08 来自 中国河北石家庄
学习 写一下 群晖 飞牛同步
回复 支持 反对 印象

使用道具 举报

EthanLeen 发表于 2025-2-6 10:28 来自 中国江苏连云港
啥也不说了,感谢楼主分享哇!
回复 支持 反对 印象

使用道具 举报

HB丶Piero 发表于 2025-1-4 10:19 来自 中国湖北武汉
太精彩了,感谢分享。威联通与群晖之间数据备份同步实践范例
回复 支持 反对 印象

使用道具 举报

joker666 发表于 2024-11-21 17:39 来自 中国浙江台州
谢谢大佬的分享,紫薯布丁,紫薯布丁,紫薯布丁
回复 支持 反对 印象

使用道具 举报

zhaoyuanjia789 发表于 2024-11-12 20:41 来自 中国河南郑州
我有个成品NAS,是奥睿科的,内置WELINE系统,不是很好用,想搞个飞牛的试试,怎么把内置的系统提取备份?小白一枚,能不能出个手把手的教程?
回复 支持 反对 印象

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 搜索 官方QQ群
懒人地图| 手机版|小黑屋| 智能生活 , 上那是云 |闽ICP备2020018196号-1 |网站地图