新手必读的保姆级备份教程(五)在两台群晖NAS之间同步Moments的照片(上)
创作立场声明:年底了,为广大群晖家庭用户写一个群晖NAS保姆级教程的系列,请多多指正,有问题欢迎在评论区讨论。
实现了对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
在主机名称中,填写你的群晖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非官方入门手册》。
若觉得本文对您有参考价值,请以关注、点赞、收藏、打赏、评论来支持作者,谢谢!




























随便给个名字我
校验提示文案
胡侃侃
校验提示文案
手撕鲈鱼
校验提示文案
Eiranya
校验提示文案
玲玲静静买
校验提示文案
五独散人
校验提示文案
是妹子的梦
校验提示文案
小众好物
校验提示文案
古城吃瓜
校验提示文案
ImissLC
校验提示文案
老食芭蕉该6子
校验提示文案
麦乐酷的理想生活
校验提示文案
Lifeisgood
校验提示文案
Lifeisgood
校验提示文案
小众好物
校验提示文案
身外过客
现在我要指正你的错误,linux内核不会被下线
校验提示文案
日光雨
校验提示文案
blues_bbq
提问,两台群晖对拷,如果操作最简单而且速度快。我两台都映射到Windows,拷贝非常慢。是不是最干脆还是硬盘插到一台上
校验提示文案
blues_bbq
提问,两台群晖对拷,如果操作最简单而且速度快。我两台都映射到Windows,拷贝非常慢。是不是最干脆还是硬盘插到一台上
校验提示文案
日光雨
校验提示文案
身外过客
现在我要指正你的错误,linux内核不会被下线
校验提示文案
小众好物
校验提示文案
麦乐酷的理想生活
校验提示文案
老食芭蕉该6子
校验提示文案
随便给个名字我
校验提示文案
ImissLC
校验提示文案
古城吃瓜
校验提示文案
Lifeisgood
校验提示文案
小众好物
校验提示文案
Lifeisgood
校验提示文案
是妹子的梦
校验提示文案
五独散人
校验提示文案
玲玲静静买
校验提示文案
Eiranya
校验提示文案
手撕鲈鱼
校验提示文案
胡侃侃
校验提示文案