29
2022
09
08:27:53

在两台群晖NAS之间同步Moments的照片



推荐点击下面图片,通过本站淘宝优惠价购买:

image.png

实现了对Moments的异地备份

家庭相片属于一旦损坏无法重新下载的宝贵数字资产。在上文《新手必读的保姆级备份教程(四)多台群晖NAS之间实现远程异地备份》中,我们在两台NAS之间,通过Hyper Backup实现了Moments相册的异地备份。但Hyper Backup备份也存在着一定的不足:

  • 设定了每天定时的备份计划,在两次备份之间的数据变化,不会被保留。

  • 从整个过程看,这个备份的过程不是增量备份,一次完整的备份会占用较多的网络传输带宽与时间,造成NAS和网络的负载增大。

  • 不支持QuickConnect ID这种对新手友好的远程连接方式。

  • 目的地存放的备份拷贝,不是常规的文件夹、文件方式,对于想直接在文件夹中查看照片的用户,感觉不太方便。


Moments文件夹无法用Drive同步

增量同步、利用QuickConnect ID实现外网访问,完美支持这两条要求的有群晖Synology Drive ShareSync(参见上文)。在Drive ShareSync中增加一个同步任务,把Moments文件夹加进去,就能同步其中的所有照片了吧?新的问题又出现了:由于Moments文件夹位于用户的home文件夹中,不能被Drive ShareSync同步。

过去也用过BT Sync等第三方同步工具,但这样就不能使用QuickConnect ID了。于是用“Moments照片同步到另一台群晖”来搜索答案,即使在英文答案里面找,相关资料也非常稀少。终于在张大妈和某网站搜到了一个相似的答案,走的是曲线救国路线,大意是使用mount --bind命令,将一个新建的sync共享文件夹,挂载到Moments文件夹,实现两个文件夹内容的一致,然后用Drive ShareSync来同步sync文件夹。间接地实现对Moments文件夹的同步。

以前在DOS和Win系统下,也曾使用subst命令,将一个路径映射(或称挂载)为一个虚拟磁盘,用来骗过那些必须在磁盘根目录运行的setup安装软件。所以对上述原理感觉不陌生,在写完了《新手必读的保姆级备份教程(四)多台群晖NAS之间实现远程异地备份》,实现了对Moments的备份之后,关注话题又回到了怎样同步Moments上。

没想到一个晚上都踩坑里了

反复阅读了这两个答案,感觉两者区别不大,都是新建一个sync共享文件夹,然后使用mount --bind命令,挂载到Moments。核心就是一条Linux命令mount,看上去没什么难度,只是个别文字表述上有一点点差别。那就开工吧。一步步边做边学,最后写成《新手必读的保姆级备份教程(五)多台群晖NAS之间异地同步Moments照片》,应该是一件轻松的任务。

没想到,一脚踩进了个大坑。一下子从昨晚折腾到今天凌晨三点,才算有一点进展。为了让大家少走弯路,咱们还是先忠实记录一下昨晚的踩坑经历,正好也能让各路高手给指点一下。

一、新建共享文件夹Sync2020

先按照网上答案,在控制面板-共享文件夹里面,新建一个Sync2020的共享文件夹。

为避免节外生枝,只是新建,其他各方面比如权限等等,统统采用默认。跟网上答案的唯一区别就是名称按照个人习惯,改为Sync2020。注意有大小写。

创建后,可以看到存储空间2里面新增的Sync2020文件夹,最上面的homes里,保存着Moments文件夹。

二、在NAS端,启用SSH服务

在DSM桌面-控制面板-终端机和SNMP-终端机页面,勾选启动SSH功能,默认端口22不变。然后点击应用。这一步的目的,是为了后续用终端程序登录到DSM系统,这样采用使用mount命令来挂载。

三、使用PuTTY客户端登录到群晖NAS

  • 在电脑端,使用PuTTY终端程序登录到群晖NAS服务器。

  • 在主机名称中,填写你的群晖NAS的ip地址,本例中是内网的ip。

  • 端口号默认22,要跟你前面在DSM中启用SSH时,指定的端口号一致。新手都保持22不变即可。

  • 连接类型:SSH。

  • 可以保存这个连接方案,以便下次连接同一台群晖。

关于如何下载PuTTY、SSH登录等,参见上文。

  • login as:第一行输入你的群晖NAS系统管理员账户。

  • password:输入登录密码,注意这里不会显示任何内容,尽管输入即可,错了会有提示。

  • 如果出现了~$的提示符,说明登录成功。

  • 输入命令: sudo -i,按回车键。

  • 注意sudo和-i之间有空格。命令和参数之间,都是有空格的。

  • 这个命令是获取root权限,等于得到系统的最大权限。

  • 这里会再次要求输入管理员密码。

  • 如果输入的密码正确,就会进入到root模式。

  • 系统提示符也变为:root@服务器名。

  • 我们就可以用最高权限来对系统做一些管理员级别的管理操作了。

四、用vi命令,修改rc启动文件

  • 继续输入命令: vi /etc/rc,按回车键。

  • 表示用vi编辑软件,来修改rc启动文件。

  • 上图的背景,是我找到的网上答案。前景的黑色窗口,是我用PuTTY终端程序,正在输入上述命令。

  • 进入vi编辑器的界面,用PgDn翻页键一直往后翻,找到左边黄箭头指示的最后一行exit 0。

  • 用上下左右的方向键,将光标移动到这一行前面,按i键(insert插入键也可以),进入编辑模式。注意屏幕左下角,会出现--INSERT-- ,提示我们当前模态。作为新手,不要再按照平时的操作系统,须知现在是Linux界面。

  • 可以按回车键,插入一个空行,然后插入我们的一行mount命令。

  • 右边的黄箭头,指向的是当前光标(图中绿色方块)的位置,即613行,76列。

  • 输入无误的话,按Esc键,退出编辑模式,INSERT消失。

  • 按:(冒号),注意观察的话,会看到右下角有提示,在等待我们继续输入命令。

  • 继续输入wq,按回车,表示写入并退出(write quit两个单词的首字母)。

  • 这样就完成了对rc文件的修改和保存。

另一种退出的办法是:

  • 按Esc键,退出插入模式,INSERT消失。

  • 按两次大写的Z,保存并退出vi编辑器。

  • 在提示符后面,输入exit,退出root用户

  • 再次输入exit,退出PuTTY终端程序。

五、关键的一行mount命令

我们需要输入的命令是:

sudo mount --bind /volume1/sync/ /volume1/homes/username/Drive/Moment

我实际输入的命令是:

sudo mount --bind /Volume2/Sync2020 /Volume2/home/username/Drive/Moments

  • 解释一下:前面已经说了Sync2020、homes文件夹,都保存在存储空间2上,所以这里要把volume1改为volume2。两个参数里面都要改。

  • sudo表示以管理员权限执行mount命令,照抄即可。

  • usename不要照抄,在上图中我也用标注了,要改成你的登录名。严格地说,这个Moments文件夹属于哪个用户,就应该改成哪个用户名,比如用户名是lifeisgood。

  • 在命令和每一个参数之间,都要加空格。还要注意大小写。

  • 其实,如果我们刚才在命令行模式,直接输入这条命令,也可以完成挂载。之所以修改rc启动文件,是为了在每次群晖启动后,让这个命令生效,不必再每次手动输入。

各种踩坑和排错全记录

如果你注意看截图右下角的话,不知不觉,已经是晚上十一点了,进展不算很快哈。因为重启群晖NAS之后,在Sync2020文件夹中,并没有如愿看到Moments文件夹里面的子文件夹和照片,你立刻明白,要开始调试和排错了。

1、命令的书写错误

  • 显然,整个过程中,重点要检查的就是这条命令:sudo mount --bind /Volume2/Sync2020 /Volume2/home/username/Drive/Moments

  • 很快就发现,Volume2应为小写开头的volume2。

  • 正确的命令是:sudo mount --bind /volume2/Sync2020 /volume2/home/username/Drive/Moments

对新手来说,可以在控制面板-共享文件夹中,查看某个文件夹的属性。箭头所指就是它的位置。

2、修改rc?还是修改rc.local?

发现了第二个问题,就是改rc不知为何,总是没有让命令执行似的。经过一番搜索,发现有openwrt教程里面是修改rc.local这个启动文件。于是登录到系统,输入vi /etc/rc.local。重复上面的修改内容。

严格地说,每次在Sync2020中看不到照片,不一定都是rc文件中的该命令没有执行。因为已是深夜,疲劳状态下,思路也不是很清晰了。所以就按照教程,每次都修改rc.local了。当然,要记得把前述rc文件里新增的那行命令注释掉。

3、枯燥且单调的调试

调试的过程是很枯燥的:

  • 要登录ssh、vi修改启动文件、保存退出,重启群晖NAS;

  • 或者在命令行方式下,直接输入命令来测试效果;

  • 然后进入File Station,观察Sync2020里面是否出现了Moments的文件夹和照片。

  • 每次满怀希望点进去,总是空空如也,Sync2020只有一个回收站。

  • 你仔细对照网上答案和你的操作步骤,找不到任何问题。

然后开始在网上去搜索各种教程,时间飞速流逝,就到了深夜。可以看到我搜索mount --bind命令详解时,已经是凌晨1点20分了。

4、终于发现了原因

翻遍了各种中英文教程,配合各种创建删除子文件夹、上传拷贝照片、从备份中恢复相册等调试操作,终于在教程中发现了一个关键点。还要从mount命令的功能说起。

  • sudo mount --bind dir1 dir2

  • 对于mount命令,dir1表示源地址,dir2表示目的地址。

  • 划重点:将源地址dir1挂载到目的地址dir2时,会暂时隐藏目的地址dir2原有的内容。

  • 换句话说,dir1挂载到dir2时,我们在dir2中看到的,其实是dir1中的内容(文件夹、文件等目录信息)。对dir2、dir1的操作,其实都是对dir1的操作。一定要理解这一点。

  • 这是翻了大量的教程,真正对我们有用的一句话。大部分文章都是说挂载后,两者等于同一个对象,对任一目录的操作,都会同步到另一个目录,这并不完全正确。

下面我们结合Moments相册的实例,来详细解释一下:

  • 当我们执行命令sudo mount --bind /volume2/Sync2020 /volume2/home/username/Drive/Moments时,前者是源地址,后者是目的地址。

  • 这是第一个坑(因为我们心中想要的结果,其实是把Sync2020当作目的地址,才能实现的)。

  • 所以此时的真正效果是,Moments中原有的内容被隐藏(包含了关键的mobile、web两个相册文件夹);同时,Sync2020的内容出现在目的地Moments中(由于Sync2020是新建的,所以两个文件夹都是空白,造成新手的困扰),这就是打开Moments看不到照片的原因,网上教程让重新索引就能看到照片,是不正确的。

  • 对Moments的任何操作,都会映射到Sync2020文件夹;对Sync2020的任何操作,也会反映到Moments文件夹(其实这是挂载后的目的地文件夹,不是你心目中原来的Moments)。

  • 比如你在Moments里面上传几张照片/创建一个test文件夹,立刻就能在Sync2020中看到。

  • 根本的区别在卸载后,刚才的变化,都会保留在源地址中,即应该保留在Sync2020中,而不会在Moments中看到。卸载后的Moments,被隐藏的内容将会恢复,才是原来的Moments。

  • 然后对新手来说,就造成了极大的困惑:一方面,上述两个文件夹的内容联动,说明mount的挂载操作似乎成功了;另一方面,由于Moments文件夹原有内容被隐藏,原来的文件夹和照片并未像预期那样出现在Sync2020中。那我们就无法利用Sync2020来作为远程同步的对象。

5、尝试正确的命令

由于网上只找到两个简短而相似的答案,两个答案对我的试验都提供了帮助。第一个提供了思路,上图中的第二个提示了要修改rc.local。但两个答案都没有让我顺利地达到自己的目标。

经过反复试验和对照,终于认定,两个答案都是有问题的(比如上图中Homes应为homes,而且Moments前面应该还有Drive),客气一点说,是跟我们的场景和需求不相符合:

  • 由于已经在Moments中积累了多年的照片,我们需要的是将Moments映射到Sync2020,通俗地说,前者的内容在挂载后,应该出现在后者,这才是期望的结果。

于是大胆地将原先命令中的源地址和目的地址对调一下,改为:

sudo mount --bind /volume2/home/username/Drive/Moments /volume2/Sync2020

解释一下:

  • 将源地址Moments挂载到Sync2020后,目的地Sync2020原有的内容将被隐藏(反正是新建的共享文件夹,里面本来也是空空如也的)。

  • 此时,在Sync2020中,立刻出现了跟Moments一模一样的目录内容,比如有Mobile和Web两个文件夹,分别表示手机端和电脑端上传的照片。

  • 为了验证前面的猜想,在挂载后,我们在Sync2020(目的地址)创建名为“ls-sync被bind2后”的文件夹;如果卸载后,该文件夹仍然存在于Moments(源地址)中,就说明我们的猜想是正确的。

  • 果然,卸载后,在Moments(源地址)中,除了原有的Mobile和Web两个文件夹之外,还有“ls-sync被bind2后”文件夹。

  • 卸载后,作为目的地的Sync2020文件夹呢?前面的3个文件夹都消失了。只剩下我们用错误顺序绑定时的测试文件夹。

  • 完美证明了我们的猜想:即挂载后,目的地址原有内容被隐藏,对源地址和目的地址的任何修改,最终是反映和保留在源地址中,而不会反映在目的地址。这些效果,在卸载后,都能看到。

小结

网上搜到的答案都有所帮助,又都存在着不少的错误。一直到今天凌晨终于解决。折腾过程就不再细说了,实际上大大小小的坑踩了不少。

经过一晚上的尝试,根据我们对Moments照片同步的需求,找到了正确的方法:

  • 用vi修改/etc/rc.local文件。

  • 正确的命令行是:

sudo mount --bind /volume2/home/username/Drive/Moments /volume2/Sync2020

这样就达到了我们的目标:

  • 将Moments文件夹作为源地址,挂载到Sync2020文件夹,前者的所有内容和任何变化,都立刻显示在后者。

  • 之后,就能借助Sync2020,来间接实现两台群晖NAS之间同步Moments照片的目标了。

  • 提醒:一定要事先做好备份,我的Moments相册,事先备份到了另一台群晖NAS中。

关于《群晖NAS非官方入门手册》达人专栏


《群晖NAS非官方入门手册》是作者Lifeisgood在张大妈首发的写作计划,以知识卡片的形式,在每篇教程分享群晖的关键技能。2018年至今,已坚持三年。Life君是本站黑群晖配置最高、白群晖闲置最多的NAS小白。从今年八月起,作者Life君应邀在张大妈创建专属达人专栏----群晖NAS非官方入门手册。

需要了解群晖全方位教程的,欢迎点击历年《群晖NAS非官方入门手册》。




先回顾一下我们这些新手的需求:1、在DSM7.0正式版推出前,继续使用Moments智能相册;2、想用Synology Drive ShareSync来进行异地同步,这样才能借助QuickConnect ID实现方便的外网访问。

折腾的过程全都是泪,详见上面卡片。本来想着上篇记录踩坑过程,下篇分享正确的方法,结果昨晚设置Drive ShareSync同步时,发现还是有一些值得讨论的小坑,正好,这也让下篇内容更丰富生动啦。于是连夜做了思维导图,准备把这个问题彻底搞明白。

这是上篇的基本思路:Moments+Drive ShareSync,中间用文件夹Sync2020做桥梁;核心命令是Mount。

在上篇中,我们其实只是通过各种踩坑和实验,熟悉和掌握了Mount命令的挂载方法;至于如何用Synology Drive ShareSync实现双机同步,则是下篇的任务。

以下先记录昨晚的踩坑过程,大家别担心,这次我反应比较快,所以失误较少。喜欢直接看结论的客官,请跳至本文第五章“尝试2 打破思维定式”。

一、同步前的准备工作

详细的步骤,请参见上篇。概括地说:使用mount --bind命令,将一个新建的sync共享文件夹,挂载到Moments文件夹,实现两个文件夹内容的一致,然后用Drive ShareSync来同步sync文件夹。间接地实现对Moments文件夹的同步。

所以本章,其实是对上篇的缩写。关键点就是一条命令:

sudo mount --bind /volume2/home/username/Drive/Moments /volume2/Sync2020

执行挂载命令后,查看Sync2020文件夹,如期出现了Moments中的Mobile和Web两个重要文件夹,其中也包含所有的照片。下面就该利用Sync2020文件夹实现双机同步了。

二、远程NAS:在团队文件夹中,启用Sync2020

先查看Moments相册的统计数据,2556个文件,359个目录,共6.9GB的相片。提醒:在本文中,凡是DSM6.2桌面的,都是远程NAS;凡是DSM7桌面的,都是本地NAS。

在远程NAS的Synology Drive管理控制台-团队文件夹中,选择Sync2020,点击启用。将其作为同步的数据源。

注:这一步其实就出现了问题,Sync2020右侧状态出现了未发现之类的提示,无法启用。当时猜测可能是因为Mount命令挂载造成的,于是改为先启用、后挂载。

三、本地NAS:用Synology Drive ShareSync同步Sync2020文件夹

打开Synology Drive ShareSync,之前在《新手必读的保姆级备份教程(二)多台群晖NAS之间实现远程异地同步》里面,已经创建了一个同步任务,那就在该任务中,再添加Sync2020文件夹吧。在设置后,本地也会自动创建一个名为Sync2020的文件夹。

点击保存后,Sync2020的状态很快变成了绿色的最新的。隐隐约约感觉不太对,因为几千张照片,不可能瞬间就完成同步。

注:以上只保留关键截图,跳过了很多中间过程。两台群晖之间同步的详细设置方法,参见上面教程。

四、尝试1:失败后的小结

按照前三章的步骤,我们先挂载、后同步,中间也没有任何报错。但是,本地NAS的Sync2020文件夹里面,空空如也。

在Synology Drive ShareSync的同步日志中,只看到一条同步文件夹的条目,没有任何照片同步的记录。

  • 为方便各位客官理解,对本次试验(命名为尝试1),专门制作思维导图小结一下:

  • 照片依旧保存在Moments文件夹,智能识别不受影响。

  • Sync2020挂载后,没有骗过Synology Drive ShareSync;照片没有被同步。

  • 在上图中,我用绿色标出了成功的地方,红色则表示未达到预期。

五、尝试2:打破思维定式,搬空Moments文件夹

  • 现在是晚上2140,头脑还不瞌睡。快速反思了一下:

  • 尝试1中,为了使用Moments的智能相册功能,我们的思维定式一直停留在保持Moments文件夹原样不变,然后挂载到Sync2020;可惜被Synology Drive ShareSync看穿后者是个空文件夹。

  • 既然尝试1的路线行不通,现在能想到的就是把Moments文件夹所有内容拷贝到Sync2020中,让它真正包含实际的照片。但这样会重复占用硬盘空间。

  • 还有一个办法,就是推翻上篇的设想,把照片保存在Sync2020中,而让Moments变成空文件夹。

  • 换句话说,就是试图骗过Moments,让它认为挂载过来的文件夹和照片,是实际存在Moments中的。

立刻开工,在远程NAS中,移动Moments中的内容到Sync2020。

既然文件夹都搬空了,那么Moments里面图片都看不到,并且打上了感叹号,就可以理解了。

六、远程NAS:从Sync2020挂载到Moments

既然尝试2中,照片实际保存在Sync2020文件夹,那么挂载命令就变成了:

sudo mount --bind /volume2/Sync2020 /volume2/home/username/Drive/Moments
  • 注意与上篇的命令正相反,Sync2020现在变成了源地址,Moments变成了目的地址。

在远程NAS上,执行新的挂载命令后,刚才被搬空的Moments文件夹中,又出现了与Sync2020一样的Mobile和Web文件夹。提醒:照片实际保存在Sync2020中。

打开Moments,刷新或稍等片刻,很高兴照片重新出现了。

  • 右上角出现了索引提示图标,打开资源监控,也能看到CPU占用率相当高。显然,Moments开始对照片进行索引,比如面孔识别、主题识别、地点识别,创建缩略图等等,所以运算负载很高。

  • 这个索引是自动触发,还是我在设置中点击重新索引,已经记不清了。由于DS620slim安装了两块酷狼SSD作为读写缓存,虽然CPU负载很高,但其他操作没有任何卡顿。

  • 以上种种都说明,本次挂载完美骗过了Moments。看来我们离成功越来越近了。

  • 继续在Synology Drive管理控制台-团队文件夹,启用Sync2020。

七、本地NAS:用Synology Drive ShareSync同步Sync2020文件夹

因为在尝试1中已经设置了同步Sync2020,在本次实验(尝试2)中,我们删除原来的设置,重新添加,并保存。

若设置无误,则保存后,右上角通知栏立刻出现已更新105个文件的提示,且下方窗口中Sync2020的状态也变成了同步中。对于熟练用户来说,立刻就能认定同步成功了。

八、尝试2:成功后的小结

本地NAS上,在Synology Drive ShareSync总览页面,也能看到正在同步2443个文件的进度提示。

日志中,能看到每一条文件同步的记录,终于不是仅同步空文件夹了。

本地NAS的Sync2020中,浏览一下,发现两个文件夹确实同步过来了,进入某个子文件夹,也能看到照片。

  • 欣喜之余,对尝试2小结一下:

  • 照片保存在Sync2020中,Moments文件夹其实已经搬空。

  • Sync2020挂载到Moments文件夹后,Moments套件能够正常对所有照片进行智能识别。等于成功骗过了Moments套件。

  • Sync2020被Synology Drive ShareSync成功地同步到了本地NAS中。

  • 至此,我们的所有需求完美实现。

两台NAS之间极速同步的同时,远程NAS上,Moments已经智能识别出了部分主题。

远程NAS上,CPU占用率在波动,表明了智能识别的进展。网络上传速度很高,说明在向本地NAS传输照片,因为远程NAS是图片来源。

本地NAS的总览页面,正在同步729个文件,接近完成了。

时间来到晚上2212,本地NAS上,状态变为最新的,表明本地同步任务完成。

本地NAS上,查看Sync2020文件夹的属性。包含2556个文件,359个目录,共6.9GB的相片。跟远程NAS中的一模一样。这也证明了同步的成功。

总结

sudo mount --bind /volume2/Sync2020 /volume2/home/username/Drive/Moments

关于《群晖NAS非官方入门手册》达人专栏

《群晖NAS非官方入门手册》是作者Lifeisgood在张大妈首发的写作计划,以知识卡片的形式,在每篇教程分享群晖的关键技能。2018年至今,已坚持三年。Life君是本站黑群晖配置最高、白群晖闲置最多的NAS小白。从今年八月起,作者Life君应邀在张大妈创建专属达人专栏----群晖NAS非官方入门手册。

新房装修漫记 篇二十六:群晖NAS非官方入门手册(2018值得珍藏版)_NAS存储_什么值得买post.smzdm.com/p/a4w0r7v8/
男人的生产力工具 篇一百七十六:群晖NAS非官方入门手册(2019张大妈秋季版)_NAS存储_什么值得买post.smzdm.com/p/a6l8dgr0/
Life君的数码生活馆 篇十三:群晖NAS非官方入门手册-2020寒假特别版_NAS存储_什么值得买post.smzdm.com/p/awx0n2rg/
群晖NAS非官方入门手册 篇四:群晖NAS非官方入门手册(2020暑假特别版)_NAS存储_什么值得买post.smzdm.com/p/ax0x99w9/

需要了解群晖全方位教程的,欢迎点击历年《群晖NAS非官方入门手册》。


本文链接:https://hqyman.cn/post/2745.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:





休息一下,本站随机推荐观看栏目:


作者:hqy | 分类:技术文章 | 浏览:4099 | 评论:0
« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

您的IP地址是: