小山雀 发表于 2022-3-31 10:37:26

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

前几年的大礼包都是基于嵌入式linux逆向工程讲解关于破解不同品牌的NAS固件。今年的礼包我们暂时不谈破解,而是讨论linux系统内的一个相当重要的应用软件。在广大坛友都上手使用了各种品牌的NAS系统之后,就提出了“不同品牌NAS之间实现数据同步备份”这样一个应用方面的问题。这个问题的提出是必然现象,因为NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”。它是一种专用数据存储服务器。它以数据为中心,当然数据同步备份是一个必不可少的必备功能。
其实各种品牌的NAS都会提供自己的专有的同步备份功能,在用户GUI界面设计上,有些品牌做的比较好,有些比较差。但它们都不能保障对于不同品牌NAS之间实现数据同步备份。针对这个问题,笔者进行了一些研究和测试,现在就把自己的一些体会与广大坛友们分享一下。目的是为了进行教学, 研究和技术交流。
第一讲介绍rsync跨平台差分备份工具软件
rsync是以GNU通用公共许可证发行的自由软件。现有的各种品牌的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传输协定,或者透过远端shell如RSH或者SSH提供文档。 SSH模式下,rsync用户端执行程序必须同时在本地和远端机器上存在。
rsync实用程序使用由澳洲电脑程序师安德鲁·垂鸠(Andrew Tridgell)发明的算法,在当接受端的设备已经有相同结构(例如文档)但不同版本时,有效地通过通讯连线将结构传输。在他1999年的博士论文《Efficient Algorithms for Sorting and Synchronization》中,详细介绍了rsync的设计、实现与性能。
接受端将文档拷贝打散成固定大小为 的不重叠片段,并对每个片段计算两个校验和:MD4散列函数与一个较弱的旋转哈希。它将这些校验和送给发送者。通讯协议版本30(与rsync版本3.0.0一并发行)现在使用MD5散列函数以替代MD4。
发送者对位于其版本的文档中每个大小为S 的片段计算轮替校验和,即使是重叠的片段。这可被有效的计算透过特别的轮替校验和算法:如果bit 位n 到n+S-1的轮替校验和是 R,从bit位n+1 到 n+S的轮替校验和可从 R,bit 位n,以及bit 位n+S 计算出而不需要真正去检验中间的bit 位。因此,如果bit 位1到25的轮替校验和已被算出,那计算bit 位2到26的轮替校验和可完全依靠之前的校验和与bit 位1与bit 位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的连接。通常是使用ssh与NAS建立起一个shell 的连接。具体如何做,要根据你的NAS系统说明来操作。因为这里我们要讲的是rsync的使用,我们假设你已经与NAS建立一个shell 的连接。
rsync,代表remotesync,是一个即可以远程也可以本地文件同步工具。它使用一种算法,通过仅移动已更改的文件部分来最小化复制的数据量。
在本讲中,我们将回顾使用 rsync 时的最简单和基本的一些语法,解释如何使用 rsync 与远程系统同步,以及其他可用的选项。为了练习使用 rsync 在本地和远程系统之间同步文件,您需要两台NAS机器分别充当本地设备和远程设备。这两台NAS可以是虚拟专用服务器、虚拟机、容器或实体NAS,只要它们已正确配置即可。
了解 rsync 语法,rsync 的语法与其他软件类似,例如 ssh、scp 和 cp。
我在这里暂时以威联通系统为例来做介绍如何使用rsync。假设威联通NAS系统的ssh账号也是admin,IP地址是192.168.x.x,目录卷在/share/Public,则通过运行以下命令连接到威联通的NAS系统:
[~]# ssh admin@192.168.x.x
通过运行以下命令切换到您的主目录,我在这里先讲本地的数据同步备份,然后再过度到讲远程数据同步备份命令。
[~]# cd/share/Public假设这跟目录是你的威联通系统的供你学习rsync命令用的实验用的主目录,你的屏幕就是如下样子。
#
然后创建一个测试目录:#mkdir dir1
创建另一个测试目录:#mkdir dir2
再来添加一些测试文件:#touch dir1/file{0..9}
现在有一个名为 dir1 的目录,其中包含 10 个空文件。你可以使用ls命令自行查看。
您还有一个名为 dir2 的空目录。要将 dir1 的内容同步到同一系统上的 dir2,您将运行 rsync 并使用-a 标志,它是一个组合标志,代表“归档”。此标志以递归方式同步并保留符号链接、特殊和设备文件、修改时间、组、所有者和权限。是推荐使用的标志。
#rsync-adir1/dir2
请注意,在这个命令的语法中,第一个参数的末尾有一个斜杠 (/),这个尾部斜杠表示 dir1 的内容。如果没有尾部斜杠,将会包括dir1目录,将被放置在 dir2 中。结果将创建一个如下所示的层次结构:
~/dir2/dir1/[ file]
另一个提示是在执行 rsync 命令之前仔细检查你的参数。 rsync 提供了一种通过传递 -n 或 --dry-run 选项来执行此操作的方法。 -v 标志,意思是“详细”,也是获得适当输出所必需的。您将在以下命令中组合 a、n 和v 标志。例如:
#rsync -anv dir1/ dir2
输出:sendingincremental file list./File0file1file2file3file4file5file6file7file8file9
现在将该输出与删除尾部斜杠时收到的输出进行比较,如下所示:
#rsync-avndir1dir2
输出:sendingincremental file listdir1/dir1/file0dir1/file1dir1/file2dir1/file3dir1/file4dir1/file5dir1/file6dir1/file7dir1/file8dir1/file9
看出不同的地方了吗?此输出现在表明目录本身已被传输,而不仅仅是目录中的文件。
接下来就要讲讲使用 rsync 与远程NAS设备做数据备份同步的命令了。
要使用 rsync 与远程NAS备份同步,您需要在本地NAS和远程NAS之间配置 SSH 访问权限,以及在两个系统上都有 rsync工具软件。在两台NAS之间验证 SSH 访问后,您可以使用以下语法将上一节中的 dir1 文件夹同步到远程NAS。请注意,在这种情况下,如果您要传输实际目录,因此您将要去掉尾部斜杠,如果只需要传输目录中的内容,您就要加上尾部斜杠。为了叙述的方便,我们继续以现在的威联通NAS系统发送方,并假设有一台群晖NAS系统为接收方。它的ssh账号是admin,IP地址是192.168.x.y,目录卷在/volume1/Public为例:(谁是发起方,接收方都是可以的,本例仅仅是为了讲解要 rsync的命令)
#rsync –anv./dir1 admin@192.168.x.y: /volume1/Public
此时会要求你输入群晖NAS的ssh账号admin的密码,只要正确输入密码就可以了。(具体实践的细节请参考第三讲“威联通与群晖之间数据备份同步实践范例”,以免实践不成功。这里仅仅讲解rsync命令的语法规则。)
此命令执行后就会在群晖NAS系统的目录卷/volume1/Public中创建一个dir1目录,并备份dir1目录中的所有文件到群晖NAS系统。
此命令可以不断地重复执行,只是如果两个NAS系统的数据备份已经同步了的话,根据在第一讲中介绍过的算法,并不会给网络通讯连接带来巨大的压力。特别是对于大尺寸的数据文件。例如视频文件,等等。
此过程称为“推送”操作,因为它将目录从本地的威联通NAS系统“推送”到远程的群晖NAS系统。相反的操作是“拉取”,用于将远程目录同步到本地系统。例如,如果 dir1 目录位于远程的群晖NAS系统而不是本地的威联通NAS系统上,假设威联通NAS系统的ssh账号也是admin,IP地址是192.168.x.x,目录卷在/share/Public, 则语法如下:
admin @DSM613:~rsync –anvadmin@192.168.x.x:/share/Public/dir1/volume1/Public
此时会要求你输入威联通NAS的ssh账号admin的密码,只要正确输入密码就可以了。
其实rsync命令与 cp,scp和类似工具一样,源始终是第一个参数,而目标始终是第二个。语法规则非常好记。当然rsync 还提供了许多用于更改实用程序默认行为的选项,请自行根据需要到网上查找即可。rsync 可以简化通过网络连接的文件传输,并为本地目录同步增加稳健性。 rsync 的灵活性使其成为许多不同文件级操作的理想选择。掌握 rsync 可以让您设计复杂的备份操作,并获得对传输方式和内容的细粒度控制。
与 rsync 命令一起使用的一些常用选项:
[*]-v:详细
[*]-r:递归复制数据(但在传输数据时不保留时间戳和权限。)
[*]-a:归档模式,允许递归复制文件,还保留符号链接、文件权限、用户和组所有权以及时间戳。
[*]-z:压缩文件数据。
[*]-h:人类可读,以人类可读格式输出数字。


为了使两个NAS设备的目录真正保持同步,如果从源目录中删除了文件,则必须从目标目录中删除它们。默认情况下,rsync 不会从目标目录中删除任何内容。您可以使用--delete 选项更改此行为。在使用此选项之前,您可以使用 --dry-run 选项-n 来执行测试以防止不必要的数据丢失。例如:
威联通NAS 系统发起“推送”操作:
#rsync -an --delete ./dir1admin@192.168.x.y: /volume1/Public
或者群晖NAS系统发起“拉取” 操作:
admin @DSM613:~rsync-an –deleteadmin@192.168.x.x:/share/Public/dir1 /volume1/Public
如果您正在传输尚未压缩的文件,例如文本文件,您可以通过使用 -z 选项添加压缩来减少网络传输:(仅仅给出语法规则,就不举例了。)rsync -azsourcedestination
上述如何使用rsync命令实现本地NAS和远程NAS之间数据备份同步,所谓的本地和远程我们还可以把本地理解为“发起方”,把远程理解为“接收方”。虽然两方都需要rsync这个应用工具,但仅仅在本地一方使用命令操作就可以解决所有的备份同步问题了。远程一方无需做任何操作。这正是我讲解命令时特意强调了“推送”与“拉取” 操作功能的目的。由此你也应该能体会出来为什么现有的各种品牌的NAS都使用rsync作为备份同步核心工具的原因了吧。

小山雀 发表于 2022-3-31 10:38:50

威联通与群晖之间数据备份同步实践范例

本讲将以实例解说如何利用rsync命令实现威联通与群晖之间的数据备份同步。首先需要讲两种NAS正确地配置。要确认开启SSHD服务。为了让坛友们便于理解,我下面分开来讲解。首先说说威联通的配置,因为威联通NAS系统集成做的比较规范还,所有对于提供rsync的工作环境基本无需任何的附加配置,仅仅需要确认开启SSHD服务即可。

如下是威联通TS-453B系统开启SSHD服务的截图。


接下来说说群晖的配置,这里我是以群晖DSM6.1.3系统为例。当然也需要确认开启SSHD服务。


我在测试时发现,系统的admin账号和任何自己创建的账号,都有设定了home目录在/var/services/homes/的对应目录下, 但是在该处并没有生成实际存在的目录。请看如下截图:


为了构建完备的我在rsync的工作环境。我在/volume1目录下创建了一个homes目录。然后在/var/services目录先创建一个软连接指向/volume1/homes目录。具体命令如下:

admin @DSM613:~cd/volume1
admin @DSM613:/volume$ sudomkdirhomes
admin @DSM613:/volume$ sudochmod 777homes
admin @DSM613:/volume$ mkdir homes/admin
admin @DSM613:/volume$ cd /var/services
admin @DSM613:/var/services $ ln -s /volume1/ homeshomes

完成上述命令后,使用ls 命令的截图如下:


这样就完成了群晖DSM6.1.3系统提供rsync的工作环境的全部配置。

写到这里我要啰嗦评论几句了。威联通NAS系统在基础工具集成方面的规范化方面,笔者认为做的比较到位。群晖NAS系统不知道是“故意”还是“疏忽”了这方面的考量?因为rsync的工作环境在NAS系统中反正对于用户是“不透明”的存在。根据笔者自身的经验,威联通NAS系统可能侧重点面向“企业级”用户,使用者的技术水平相对比较高,为了产品的名誉,在基础工具集成方面的规范化方面就要考虑的比较细致一些。群晖NAS系统可能侧重点面向“个人及家庭”用户,使用者的技术水平相对比较低,产品的关注点在用户GUI界面上。而对于用户看不到的基础工具集成方面的规范化要考虑的粗糙一点。以上仅仅是笔者根据自身经验的评论,如有不妥之处敬请批评指正。

接下来回到正题,继续讲威联通与群晖之间数据备份同步实践范例。现在我们的威联通与群晖都确认配置好了,可以使用rsync基础工具了。我们就可以按照第二讲中介绍的一些rsync命令的语法进行这两个不同品牌NAS之间实现数据同步备份了。

在做数据备份同步的时候,所有的操作命令只需要在某一台NAS(所谓的本地)上操作即可。另一台NAS(所谓的远程)上是不需要任何操作的,就是在那里等待即可。我在讲解rsync命令的语法时是两边的操作命令都做了介绍,那是为了让大家细致了解rsync工具的强大功能。但实际应用中坛友们自己可以根据喜好,在某一台NAS执行操作命令即可。

由于篇幅的限制,我就不再赘述和做截图了。请坛友们按照第二讲的例子自己体验吧。


第四讲
铁威马TOS系统与万由U-NAS系统之间数据备份同步实践范例

上一讲以实例解说了如何利用rsync命令实现威联通与群晖之间的数据备份同步。这一讲我们要再给一个粗粗地讲解一下“名不见经传”的品牌铁威马TOS系统与万由U-NAS系统之间数据备份同步实践的范例。为什么要选择这个范例呢?其实核心的问题是要说,不论什么品牌的NAS系统,知名品牌也好,名不见经传品牌也好,在数据备份同步问题上,都离不开rsync这个基础工具。也正是因为这个原因,我们才可以方便地实现不同品牌NAS之间实现数据同步备份。

与上一讲一样,首先需要讲两种NAS正确地配置。要确认开启SSHD服务。

那就先说铁威马NAS系统的配置,我这次是以TOS4.2.08系统为例,请看如下截图:


我在测试时发现,这些“名不见经传”的品牌NAS系统也和群晖系统一样,在基础工具集成方面的规范化方面做的很差。应为这一讲仅仅是粗粗的范例,对于不影响操作的细节部分,就不一一例举和修正了。有这方面需求的坛友们,可以自行解决。

接下来说说万由U-NAS系统的配置,这个系统更是粗糙,SSHD服务是默认开启的,根本不用配置。但它也有存在与群晖系统一样不规范的问题,做实验时,最后也修正一下。以免实验不成功。

让我们试试以万由U-NAS系统为本地把/mnt/nas/data/download目录中的所有数据同步到铁威马TOS4.2.08系统中的/mnt/public目录中去。请看截图:


注意:因为铁威马NAS系统的SSHD服务使用非标准的端口,我们在rsync命令操作中会使用-e ‘ssh –p 9222’ 这个选项来解决这个问题。

查看铁威马NAS一侧的数据,可以看到数据全部据备份同步完成。请看截图:


接下来让我们再试试以铁威马TOS4.2.08为本地把/mnt/public目录中的所有数据同步到万由U-NAS系统的/mnt/nas/data/download目录中去。当然我们可以先删除清空/mnt/nas/data/download目录,但也可以不用清空数据。因为rsync的算法会以最优的方法实现数据同步备份。请看如下截图:


查看万由NAS一侧的数据,可以看到数据全部据备份同步完成。请看截图:


由于NASYUN的篇幅限制,请看楼下,【结束语】,精彩继续!


小山雀 发表于 2022-3-31 10:39:21

结束语

很高兴能与大家分享此次的经验。本教程中详细讲解了不同品牌NAS之间实现数据同步备份的问题的各种细节技术详情。本教程中的引用都在“参考文献”中注明了出处。

在实践范例环节的第三讲和第四讲,分别以比较流行的品牌“威联通与群晖”和名不见经传的品牌“铁威马与万由”给出了实际操作的具体方法。其实,目前就笔者的经验来看,任何品牌的NAS系统都可以利用rsync这个强有力的工具,实现数据同步备份。例如:威联通,群晖,西数的mybooklive, myCloud, unRAID, freeNAS,等等。

目前的问题是,rsync这个工具没有GUI操作界面。它是一个命令行操作的工具,另外利用shell 的ssh建立连接时,还需要输入远程端的密码。对于不习惯使用命令行操作的小白和菜鸟就会感觉不方便。

关于GUI操作界面和命令行操作,其实笔者更喜欢命令行操作。笔者大学毕业已经40年了。入学那就更早了。估计现在玩儿NAS的坛友们中有些人在笔者读大学,学习计算机的时候,可能还没有出生呢吧。那个年代的计算机,不但没有GUI界面,甚至连显示器都没有。命令的交互使用的电传打字机。我还记得第一次接触的是“北京计算机一厂”生产的“DJS-130” 计算机。机器要占用40平方米的房间,启动要预热半个小时,不像现在的电脑一按电源开关就启动了。那时要引导系统(不能称为真正的操作系统),就更为麻烦。要在机器的控制板面上,用手拨动开关输入机器代码13种。称作“手拨13条”,用它来操作穿孔纸带机实施启动引导加载系统。然后才能使用电传打字机操作命令与计算机交互。

笔者大学毕业40年来计算机有了天翻地覆的发展,不论是硬件还是软件,操作系统,互联网络。笔者目睹,见证和参与了这一过程。一路走来有太多的反思和感慨。笔者虽然已经退休了,但非常愿意把自己的经验分享给广大的坛友们。你们年轻人是国家的栋梁,笔者衷心地希望你们能学好扎实的计算机理论基础和掌握好先进的计算机技术。使国家更强大,人们更富有。


参考文献:

rsync -维基百科,自由的百科全书
Tridgell, Andrew; Efficient Algorithms for Sorting and Synchronization, February 1999, retrieved 29 September 2009
NEWS for rsync 3.2.3 (6 Aug 2020).
页: [1]
查看完整版本: 【老骥伏枥-虎年大礼包】不同品牌NAS之间实现数据同步备份的问题