Obsidian-笔记跨设备增量同步-Rsync

相信不少小伙伴在使用Obsidian时都会有内容同步的需求,比如:公司和家里的电脑,电脑与手机或者平板之间的内容备份及同步。那此文便讲解一下这一块我的一些方案,供大家参考。

方案一: 官网Sync服务

Obsidian官方本身提供了Sync同步功能,相对而言是最简单易用且功能相对最齐全的了;如果大家有同步的需求又不差钱,直接购买就可以。现在官方售价是8美金一个月,按年购买应该有一定的优惠。

方案二:Remotely方案

Remotely 是一款 Obsidian 第三方插件,你可以在插件中配置使用DropBox/OneDrive / WebDAV/S3/OSS/COS 等网盘及云存储服务来使用,常见是使用OneDrive或者阿里、腾讯的云存储做中转;WebDAV 的支持上,国内坚果云暂时是不支持的。

使用Remotely需要配置第三方的中转,现在功能还在完善中,还不能同步 Ob的插件和主题,因此同步文件后,插件和主题要自己在第二台设备上安装(更新: 20220314 现在同步插件和主题的功能已经支持了)。因为网上已经有不少介绍它的文章了,所以这里我直接引用了。大家如果需要按这种方案进行配置,可以参考如下:

最舒服的Obsidian第三方多端同步 - 哔哩哔哩 (bilibili.com)

【ios福音】obsidian第三方同步方案(remotely插件+腾讯云cos)-保姆级教程 - 知乎 (zhihu.com)

Obsidian 同步 Remotely Save S3 配置指南_恐咖兵糖的博客-CSDN博客_obsidian同步


方案三:使用Gitee及GitHub方案,通过Git来同步及备份文件(有空间及速度体验上的差异);或者自己搭建NAS通过NAS上的同步来备份(有一定的成本);除此之外使用 微力同步官网 - 私有云盘 企业文件同步 团队文件共享协助工具 (verysync.com) 和 Syncthing | Downloads ,电脑上备份至网盘然后在手机端解压等方案也是可以的。

大家可以按自己的情况及需求来选择对应的方案,本文重点讲解的是下面的方案四,方案四有免费,快速,自由及可灵活定制,兼容多终端运行的一些特点。

方案四:Rsync的方案

基于开源的Rsync方案,可以实现Win/Mac/Linux与移动端的文件增量同步功能,需依赖同一局域网,及SSH协议进行文件传输。对于我们而言,只保证要同步的设备连在一个路由器WIFI上即可。此文着重讲解一下 Mac 系统与Windows 系统下的配置方案。

一、安装SSH组件:

移动设备作为 SSH 服务端监听连接,PC 电脑作为客户端连接;SSH 服务安装成功后,我们要安装 Rsync 工具。

SSH 服务端:安卓上可以使用 Termux | Terminal emulator and Linux environment for Android,不过我使用的是 SSHelper (arachnoid.com) ,它已集成开机启动,密码登录,SSHD服务常用功能。IOS上大家可以使用开启iOS设备的SSH服务 - 云+社区 - 腾讯云 (tencent.com)的方法来安装OpenSSH并开启SSHD服务。

SSH 客户端:在 Mac 系统安装 OpenSSH 客户端,一般是不用安装的,因为都自带了;Windows 系统上可用系统应用中可选功能安装 OpenSSH,如上图的可选功能安装;当然你也可以直接安装第三方的 SSH 客户端软件。


二、安装Rsync :

Rsync 是同步软件,它要基于上面的 SSH 协议进行通迅。Mac系统下推荐大家按方案2;Windows系统下按方案3快速安装。

  1. Mac系统的配置

方案1:安装rsync,直接brew安装或者port安装即可。 brew和port是Mac系统下的一个包安装工具。

方案2:官网 rsync (samba.org) 下载源码自己编译运行。这里我们推荐用brew一行命令搞定就好了:

# 安装:brew命令% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"# 安装rsync命令% brew install rsync# 查看安装的版本% rsync --version

#运行如下的命令同步:

# 运行如下的命令同步(同步了Obsidian-Win下的所有文件至 SDCard/ObsidianDoc 手机目录)% rsync -avz -zz -e "ssh -p 2222" Obsidian-Win/*  [email protected]:/data/data/com.arachnoid.sshelper/files/home/SDCard/ObsidianDoc/# 如上所示,指定端口、IP、用户名、目录信息;来源目录和目标目录调换,但可以实现反方向同步% rsync -avz -zz -e "ssh -p 2222" 指定:来源目录(手机SD卡目录) 目标目录(电脑磁盘目录)

Rsync增量同步至手机端成功

2. Win系统的配置

方案1: 安装rsync,可以使用类Mac上的brew的包安装器:如: chocolatey或者scoop,这里不在详细介绍,可参考:Windows Scoop包管理 Poppler - 知乎 (zhihu.com) 。

方案2:官网 rsync (samba.org) 下载源码,自己搭建cygwin 环境编译: Cygwin Cygwin是一个在windows平台上运行的类UNIX模拟环境。

方案3:介绍使用rsync的第三方包 cwRsync - Rsync for Windows | itefix.net ,即别人编译好的Window运行包。

在上面 Rsync Client 标签 下载最新版本软件包,解压至Windows目录后,先运行 cwrsync.cmd 设置环境变量

这里发现它运行后并没有生效写入PATH相关信息,所以我们最好自己用记事本打开这个文件,按它的内容来配置环境变量,配置成如下图所示,总共:定义系统变量CWRSYNCHOME名称,添加路径信息至系统PATH两步骤。

如下:前一行代码是 startSync.bat 文件内容,可以自己修改后直接在命令行窗口,或保存为bat文件双击运行 。

# cmd窗口 运行如下命令 (同步了d盘www目录下所有文件至 SDCard/ObsidianDoc 手机目录)% rsync.exe -avz -zz -e "ssh -p 2222" /cygdrive/d/www [email protected]:/data/data/com.arachnoid.sshelper/files/home/SDCard/ObsidianDoc/ 

# --chmod=ugo=rwX 如果遇到写手机文件的权限问题,可以在参数区添加这行# 如上所示,指定端口、IP、用户名、目录信息;来源目录和目标目录调换,但可以实现反方向同步% rsync -avz -zz -e "ssh -p 2222" 指定:来源目录(手机SD卡目录) 目标目录(电脑磁盘目录)

Rsync增量同步至手机端成功


为了方便使用,你还可以配置如下的选项:

改进1:SSHelper手机应用配置项设置:不开启 stricts modes 、 开启 prevent standby 、run service at boot。

改进2:这里每次同步都要进行登录输入密码有点烦人,所以大家可以参考官方文档配置一下SSH登录,这样便不用每次输入密码就能直接同步了。具体可参考官方文档:SSHelper (arachnoid.com) ,这里截图如下:

操作:bash 中运行如下两行就可以,最后一步我们在SSHelper 软件上关闭用密码登录选项,因为不需要密码了。

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa -N '' 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub  -p 2222  192.168.100.4 (android device IP address)

如下所示:现在同步语句内容可以改成不加用户名了,命令行执行后可直接同步文件,不用中途再让你输入密码!

# macos 文件同步命令% rsync -avz -zz -e "ssh -p 2222" Obsidian-Win/*  192.168.100.4:/data/data/com.arachnoid.sshelper/files/home/SDCard/ObsidianDoc/# windows 文件同步命令% rsync.exe -avz -zz -e "ssh -p 2222" /cygdrive/d/www 192.168.100.4:/data/data/com.arachnoid.sshelper/files/home/SDCard/ObsidianDoc/

你可以把上面mac和win的各自命令放入.sh文件或.bat文件,赋予权限后直接双击执行即可同步;或者加入操作系统的任务计划来定时同步;又或者使用QuickAdd插件来添加一个Macro在Obsidian中直接使用快捷键同步,总之相当的灵活。

执行同步命令连接不上或超时:

  1. 安卓手机最好在设置中:打开开发者模式,并且开启调试选项,SSHelper安装时确认允许磁盘权限。

  2. 如果之前能够连接,突然后面就一直连不上超时,重启SSHelper,或电脑及手机都断开WIFI再重连。

  3. 连接超时 client_loop: send disconnect: Broken pipe 报错问题,需要配置文件内容如下:

# ~/.ssh/config mac 系统配置这个文件

Host *
 # 断开时重试连接的次数
 ServerAliveCountMax 5
 # 每隔5秒自动发送一个空的请求以保持连接
 ServerAliveInterval 5
 IPQoS=throughput

4. 按官网文档介绍,可以省略输入端口号,另外启用Zoreconf Broadcast 选项组可对手机设备绑定固定IP,这样执行的脚本则可以更简洁。

# 手机名称为 Galaxy_S8+ 你可以在手机设置中或SSHelper配置界面查看# 1.开启 Zoreconf Broadcast 后,可以用手机名称来连接ssh Galaxy_S8+.local  -p 2222# 2.编辑config文件,添加端口、设备名称后如下,已便完成更多信息的设置$ vi ~/.ssh/config

Host Galaxy_S8+ (可以设置别名)Hostname 192.168.100.4
User u0_a50
Port 2222Host *  # 断开时重试连接的次数
  ServerAliveCountMax 5

  # 每隔5秒自动发送一个空的请求以保持连接
  ServerAliveInterval 5

  IPQoS=throughput# 3.上面的Host可以指定设备的别名,比如我设置为SJHost SJ

现在你可以用最精简的一行命令来同步笔记内容至手机,不用输入用户名称、用户密码,不用指定连接IP及端口:

# 执行ssh连接手机
% ssh SJ

# 用于同步代码语句
rsync -avz -zz  ~/Documents/Obsidian-Win/*  SJ:/data/data/com.arachnoid.sshelper/files/home/SDCard/ObsidianDoc/

最精简的笔记同步语句

# 实现同步插件至手机端(来源目录后面不加*号),以及加上delete/no-perms/no-times/size-only等参数删除目标目录多余文件,通过文件大小判断是否同步,不同步目标目录时间戳及权限属性。rsync -avz --delete --no-perms --no-times --size-only -zz ~/Documents/ObsidianDoc/  SJ:/data/data/com.arachnoid.sshelper/files/home/SDCard/ObsidianDoc/


本文引用及参考链接来源:

同步文件的利器-rsync 基本使用 - juedaiyuer - 博客园 (cnblogs.com)

SSHelper An Android-based multi-protocol server

macos ssh 连接服务器出现client_loop: send disconnect: Broken pipe错误 - SegmentFault 思否

解决ssh连接长时间不操作断开 client_loop/ send disconnect/ Broken pipe)


你可能感兴趣的:(Obsidian-笔记跨设备增量同步-Rsync)