lighthouse

使用rclone在vps上挂载网盘为本地存储

rclone是一款实用的网盘文件传输工具(按照我的理解大概是这样),前段时间无意中发现了这个东西,但是感觉这个工具最吸引人的地方不是简单的文件传输,而是可以把网盘挂载成为本地存储,这样一来玩法就多了,比如说挂个aria2下载文件,或者说挂载两个网盘之间仅需一行命令就能做到网盘间互拷之类的。。

劝退部分

但是天下哪有这么完美的东西。。不想花钱买大盘鸡还想用着舒服?

你为什么不买大盘鸡?一个月不超过10刀选择挺多啊。。配置烂点就烂点呗当个seedbox或者单纯的BT代抓之类的不挺好的。。

不是太难的安装过程

以下方法仅在Ubuntu上测试过

因为对1drv的授权过程无法在headless的vps上进行(我分析应该是因为回调地址是固定的,没法甩到机子公网ip上),所以说需要在本地授权、获得token才可以。官方文档中有一篇文章专门介绍了具体的操作方法。

首先在你的本地机器上安装rclone。下载地址在这里,下载好之后运行

rclone authorize "onedrive"

然后会显示如下信息

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...

这时程序会自动调用系统自带的浏览器打开1drv的授权界面,然后按照提示登陆就可以了。一切顺利的话授权成功后会自动跳转回127.0.0.1,会有一个界面提示你已经成功了。这时返回控制台窗口就会得到一个json,那其中就包含了授权token

...
Got code
Paste the following into your remote machine --->
SECRET_TOKEN
<---End paste

SECRET_TOKEN便是我们需要的东西了。

此时登陆vps,安装rclone

curl https://rclone.org/install.sh | sudo bash

然后rcloud config启动配置

然后

No remotes found - make a new one
n) New remote
s) Set configuration password
n/s> n
name> remote // 名字记好,下一步mount时要用到
Type of storage to configure.
Choose a number from below, or type in your own value
 1 / Amazon Drive
   \ "amazon cloud drive"
 2 / Amazon S3 (also Dreamhost, Ceph, Minio)
   \ "s3"
 3 / Backblaze B2
   \ "b2"
 4 / Dropbox
   \ "dropbox"
 5 / Encrypt/Decrypt a remote
   \ "crypt"
 6 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
 7 / Google Drive
   \ "drive"
 8 / Hubic
   \ "hubic"
 9 / Local Disk
   \ "local"
10 / Microsoft OneDrive
   \ "onedrive"
11 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
12 / SSH/SFTP Connection
   \ "sftp"
13 / Yandex Disk
   \ "yandex"
Storage> 10     // 这里选1drv
Microsoft App Client Id - leave blank normally.
client_id>
Microsoft App Client Secret - leave blank normally.
client_secret>
Remote config
Choose OneDrive account type?
 * Say b for a OneDrive business account
 * Say p for a personal OneDrive account
b) Business
p) Personal
b/p> p
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> n      // 因为没法在vps上直接拿token所以说这步选n
For this to work, you will need rclone available on a machine that has a web browser available.
Execute the following on your machine:
    rclone authorize "amazon cloud drive"
Then paste the result below:
result>
// 把那一大段东西粘贴过来,回车
--------------------
[remote]
client_id =
client_secret =
token = {"access_token":"XXXXXX"}
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y

接下来就是mount。

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

remote换成你在上一部添加网盘时设定的名字,然后后面的mount路径设一下。这个mount不是以daemon方式运行的,测试中的话你需要开个tmux,真正使用时你需要写一个systemd unit或者supervisor。

如果想在里面用aria2的话还需要配置缓存,rclone缓存有4种模式(off、minimal、writes、full),这四种模式的区别大概如下

  1. off 关闭不用解释了
  2. minimal 写入和读取过程数据流全都会先缓存到磁盘上,占用少量磁盘,读写异步
  3. write 与第一个的区别是,只有写入过程会在磁盘上缓存。读取过程完全是直接从网盘服务器中转过去的,中间没有任何缓存操作。占用少量磁盘。
  4. full 读写过程全部缓存,大致的流程是,当写入文件时,文件写入完成的同时再向远端网盘写入文件(劝退2),同时在最大缓存时间内保留文件(默认一小时,相关参数--vfs-cache-max-age),读取文件的时候先把文件下载到本地,下载完之后才能供给其他程序使用。

这个自己权衡比较好,想用aria2的话至少需要调成minimal,因为需要预分配磁盘空间,这个功能需要rclone vfs缓存支持。如果是看视频的话,缓存模式调成full对快进体验有帮助。

最后再说一下测速,搬瓦工QN,

缓存模式minimal下,dd if=/dev/zero of=test.file bs=100M count=1 测速结果3.9M/s

零缓存下dd if=test.file of=/dev/null bs=100M count=1 测速结果120M/s

凑合一下还行。。