Linux 版 OneDrive 与 Rclone 食用指南

OneDrive(下称 OD )微软推出的网络存储服务,在 Linux 下没有官方客户端支持。本文旨在用 FOSS 尽量复刻官方 OD 客户端在 Windows 下的体验,包括直接的文件系统访问、大文件的传输以及视频播放,而且保证尽量顺滑,同时兼有云存储服务厂商的横向评测。

Rclone

简介

Rclone 是管理云端存储的命令行程序。我觉得,介于 Rclone 的核心地位,本文应该有专门的区域来存放我对 Rclone 的溢美之词。

有用户如此评价 Rclone:“Rclone 模糊了技术与魔法的界限”,此言非虚。Rclone 支持 40 多种云端存储,从普通的网盘(OneDrive、Google Drive、Dropbox 等)到云端对象储存(Amazon S3、阿里云OSS等)再到各种传输协议(FTP、SFTP、WebDav)之上的资源都能被 Rclone 解析、管理、上传、下载。

Rclone 为这些不同的后端提供了 VFS 抽象层,为挂载网盘到 FUSE 文件系统和转换网盘到 WebDav、FTP 等协议提供了共同基础。同时 Rclone 支持远程管理与WebGUI功能,堪称瑞士军刀。

远端配置

远端存储的配置非常简单,Rclone 提供交互式命令:

rclone config

然后按着提示走就行:

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> n
name> remote
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
[snip]
XX / Microsoft OneDrive
   \ "onedrive"
[snip]
Storage> onedrive
Microsoft App Client Id
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id>
Microsoft App Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret>
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n
Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> y
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code...
Got code
Choose a number from below, or type in an existing value
 1 / OneDrive Personal or Business
   \ "onedrive"
 2 / Sharepoint site
   \ "sharepoint"
 3 / Type in driveID
   \ "driveid"
 4 / Type in SiteID
   \ "siteid"
 5 / Search a Sharepoint site
   \ "search"
Your choice> 1
Found 1 drives, please select the one you want to use:
0: OneDrive (business) id=b!Eqwertyuiopasdfghjklzxcvbnm-7mnbvcxzlkjhgfdsapoiuytrewqk
Chose drive to use:> 0
Found drive 'root' of type 'business', URL: https://org-my.sharepoint.com/personal/you/Documents
Is that okay?
y) Yes
n) No
y/n> y
--------------------
[remote]
type = onedrive
token = {"access_token":"youraccesstoken","token_type":"Bearer","refresh_token":"yourrefreshtoken","expiry":"2018-08-26T22:39:52.486512262+08:00"}
drive_id = b!Eqwertyuiopasdfghjklzxcvbnm-7mnbvcxzlkjhgfdsapoiuytrewqk
drive_type = business
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y

强烈建议不要给远端配置一个过于长的名字,因为这个名字会在多处重复使用。同时最好阅读官方文档——学习如何使用软件的方法莫过于此。

我自己使用了自己的应用密钥,避免和其他 Rclone 用户共用一个密钥,读者也可以学官方文档自己搞一个。

测试一下是否成功。下面的 remote 换成你自己的远端名称。

rclone lsd remote:

直接挂载

Rclone 支持直接挂载远端为 FUSE。非常简单,一条命令完事:

rclone mount remote:path/to/files /path/to/local/mount

但是这么做有两个缺点:

首先,大多数应用程序会把这个当作本地文件处理。如果打开时间过长,程序就会卡死。而且 Rclone 默认挂载的 FUSE 不支持一些文件系统特性比如 seek ,而一些应用程序比如 VLC 会尝试使用这些特性。

在这种情况下,Rclone 会抱怨 One drive root '': --vfs-cache-mode writes or full is recommended for this remote as it can't stream 以及 Can't read and write to file without --vfs-cache-mode >= minimal

其次,默认的挂载没有缓存机制,这会让用户非常难受,打开文件要半天,保存文件也要等……重复打开文件意着下载两次,OD 官方的客户端可没那么蠢。

WebDav

我们首先解决第一个问题:程序不知道这是一个远程文件系统。那我们就让他知道。将 OneDrive 转化为 WebDav 即是解决方案,原因下面讲。

我们只需要。

rclone serve webdav --addr=127.0.0.1:18080 --user=tux --pass=v9L4ED --vfs-cache-mode=full remote:

即可创建 Rclone WebDav 服务。上面的用户名和密码都是访问 WebDav 时候用的,不是远端的帐号密码,可以随意设置。理论上可以留空,但不是所有客户端都觉得没有密码的 WebDav 是个合理的玩意。

在桌面环境中

严格意义上,除了看文件系统类型是不是 fuse.rclone 外,程序没法知道一个文件系统是否为远程,没有哪个程序会检查这个来适配 Rclone。但是,一些桌面环境提供了对远程文件系统的支持,打开文件时会尝试告知实现相关接口的App,另其更加符合远程文件系统的操作逻辑,我们可以利用这种支持。

比如,KDE 的 KIO 组件支持 WebDav,在打开远程文件时会让 KDE 应用显示加载动画或者在托盘弹出一个正在下载的提示。这样无疑会增加用户体验。

避免直接 FUSE 访问大文件

有些时候,我们需要访问一些大文件,但是不想下载他们,比如视频。通过 FUSE 访问会让问题复杂化,部分程序依然会把文件当成可以随时随地读写的本地文件,KIO 的 FUSE 也不能解决问题。

但是我们可以尝试通过 WebDav 直接使用 HTTP 协议访问。只需要打开浏览器,访问 WebDav 服务的地址,输入帐号与密码。

然后,直接点击链接,或者复制链接到播放器,如 VLC,里面,通过 HTTP 方式观看影片。 可能需要调整 VLC 配置以达到最佳效果。

上传大文件

要是想要下载、上传大文件,我推荐使用 rclone copy ,比起直接拖进FUSE或者WbDav,rclone copy 能够准确显示上传进度(WebDav 上传到缓存里,后台再上传到远端)。

当然,目前的体验距离常规网盘客户端还是差距不小。没有关于上传、下载的队列,勉强算是实现了选择性同步。还需要额外的手段来启动 rclone。我目前正在制作 rlone 的包装,希望能够弥补这些点。

横向评测

大陆有许多优秀的云存储厂商,我将用横向对比说明我不选择他们的原因(所以使用 OD 其实是排除法剩下的)

百度网盘

超级会员 298 元/一年,5 TB 空间。

使用人数来讲,百度网盘是国内网盘当之无愧的一哥。但只要没脑抽,我就不会选择百度网盘。百度在道德与隐私上的缺点显而易见。同样,百度网盘也没有提供足够的 API 来开发第三方客户端,目前的第三方客户端都有点“地下工作”的意思。

坚果云

个人专业版 199 元/一年,42 GB 空间。

国内唯一提供 WebDav 的个人网盘。这空间说大不到,但说小也不小,要是同步文档、文件、照片还是足够。坚果云的定位应该是协作与同步网盘,用来备份大文件的话空间捉襟见肘。

优势在于,坚果云直接支持 WebDav ,与 KIO 结合毫无压力。但据 Joplin 开发者所说,坚果的 WebDav 实现并不标准,有丢失数据的风险。

况且如果不用坚果云的客户端,不如用 Rclone 挂载阿里云OSS,存储一年只要7块钱……199与7的区别我想还是容易区分的。

碎碎念

我在 Windows 下 从没用过 OD, 反而在 Linux 下折腾,人类迷惑行为。

“Linux 版 OneDrive 与 Rclone 食用指南”的2个回复

  1. onedirve在windows上用的挺爽,在linux上…不过哪家公司会专门给linux开发官方客户端?如果保持客户端开源不免有安全问题,保持闭源的话又违背了linux开源精神,会被喷,两边不讨好,webdav算是折中的方案了。倒是百度网盘为了迎合国产linux系统有官方客户端,或者你也可以试试这个https://github.com/iikira/BaiduPCS-Go/。反正百度送了2T免费空间,不用白不用

RainLuoyu进行回复 取消回复

您的电子邮箱地址不会被公开。