给VPS挂载网盘

安装Rclone

Rclone官方
Rclone的git网址

对Linux/macOS/BSD系统挺简单的:
curl https://rclone.org/install.sh | sudo bash

等它几秒刷刷跑完,就安好了。

连接网盘的准备步骤

  • 很可能会需要一把梯子

先连接上网盘,然后再挂载。

连接一个微软OneDrive

大概是需要你的VPS位于国外,因为国内有一半是墙的。。。另外自动验证时也有可能需要科 学 上 网

另外,如果你的VPS是基于OpenVZ的,你还有可能遇到一个问题,就是FUSE没开,而你自己又开不了。遇到这个问题的时候,没啥办法,开一张工单(ticket)问(qiu)问(qiu)客服能不能给你开吧。(所以还是KVM更禁得住折腾啊~怎么折腾都不需要问别人的同意)

OneDrive的容量还是挺大的,1T。留学生们基本人手一个了(学校账户/alumni校友账户),淘宝也有一些在买的(可以很便宜的买到5T甚至25T的,也就几块到几十块),不过不清楚会不会被封、以及具体能用多久。

  • rclone config
  • 会有一系列选项,选n) New Remote,然后输入一个名称(来称呼这个连接的这个网盘),这里我以OneDrive举例。
  • 在系统问storage>的时候,输入onedrive
  • client_id和client_secret直接回车
  • advanced config直接回车,auto config选no(否则后续会给你一个127.0.0.1:53682的地址用于授权,除非你的vps有按vnc和桌面,或者开放53682了端口。但是没必要)
  • 它会让你选一下你是在连接哪里的one drive
  • 控制台会显示一个网址,复制并在你的浏览器打开
  • 网址会跳转到微软登录、授权页面,确认授权后会跳转,如果出现一个说"Success! All done. Please go back to rclone."的页面,这个网址的任务就完成了~
  • 返回终端处,它会让你选择一个类型。输入onedrive,会列举所有在浏览器登录的微软账号下OneDrive(全是内部id,难以观察谁是谁,建议在上面步骤授权时开浏览器无痕模式,且只登录一个微软账号)
  • 一路回车,加好了~
  • 测试,退出rclone config,然后rclone lsd OneDrive:(list directory,显示网盘根目录下所有目录)
  • 测试成功,就可以正常使用了~

连接一个Mega

这也是一个被墙的网盘。。。没有OneDrive给的容量那么大(但OneDrive其实并不免费),但在免费网盘里已经算容量比较大的了,上来就给30G,谷歌才15G耶。

  • rclone config,输入一个名称(识别这个网盘连接),比如Mega
  • 网盘选mega
  • user name填你注册网盘的邮箱地址
  • enter password选y然后输入自己网盘的密码两边
  • 选y确认
  • 测试,rclone lsd Mega: (Mega的位置填你输入的第一步的名称)

连接一个Google Drive

Google每个账户有免费的15G网盘,似乎并没有每个人可以注册的账号数限制?但是需要科 学 上 网
rclone关于使用默认client id的警告,以及如何创建自己的client id
用Rclone连接谷歌网盘的时候,如果client id使用默认的空值,rclone会使用一个公有client id访问谷歌网盘。由于谷歌网盘对每个client id的每秒查询次数有限制,使用默认的公有id可能会导致访问限速。

创建一个自己的client id

  • 首先在一个无痕窗口登录谷歌账号(对于登录了好几个谷歌账号的情况。。。为了方便连接一个网盘)
  • 谷歌云控制台
  • 位置选离你服务器近的?其实可能无所谓,顶多影响那5个G的免费Google Cloud Storage。谷歌free tier的VPS免费出站流量每个月才1GB还不包含对中国和澳洲的出站流量,不太用得到。
  • 创建一个应用,名称随便,比如Google Drive to Rclone之类的
  • 点“启用API与服务” (Enable APIs and Services),搜索Google Drive API,然后启用
  • 回到项目的面板上,选右侧菜单的“凭据”(Credentials)
  • 点左侧窗口的按钮“配置同意屏幕”(Configure Consent Screen)(已经配过的无视这步)。
    • User Type选外部(external),应用名称随便,比如rclone。
    • 其他必填的信息主要就是电子邮件,写自己的就好
    • 注意,在不发布应用的情况下,需要在Oauth测试用户里填写上自己这个google账号(邮箱),否则之后网盘验证时会有403 Access Denied
    • 一路保存并继续
  • 然后再左侧点击“创建凭据”(Create Credential),选OAuth客户端ID (OAuth client ID),然后类型选桌面应用(Desktop App),然后你就有客户端id和秘钥了。
  • 接着rclone config,输入名称,比如GoogleDrive
  • 选择网盘那里输入drive(你看这待遇。。。Google Drive的选项直接就是drive)
  • client_id输入刚刚获得的那个id
  • client_secret输入刚刚获得的那个秘钥
  • Scoop选drive获得Application Data以外的读写权(Application Data是应用写入用户google drive的,比如google play store里app的云存储或者游戏的存档)
  • root folder id和service account file可以直接回车(空),use advanced选no,auto config直接回车选默认就好
  • 像往常一样复制给出的网址到那个登录了谷歌账号的无痕窗口打开,然后授权。会有几个屏幕一遍一遍问你是否信任开发者,这是未经谷歌检验并发布的应用等等,一路确认信任(咱为啥要不信任咱自己??)
  • 再次看到Success页面。Done!

挂载一个OneDrive

  • 如果前面的步骤是在非root用户下进行的,那么除非你将用户的rclone.conf(位于~/.config/rclone/rclone.conf)复制到/root/.config/rclone/rclone.conf,那么在root那里是没有这些网盘的记录的。

  • 如果在挂载中要用--allow-other,那么需要先行去/etc/fuse.conf把allow-other的注释去掉(启用allow other)

  • 创建一个文件夹作为你要挂载的位置,比如/home/<username>/mnt/onedrive

  • 在有网盘config的用户下,rclone mount OneDrive: /home/<username>/mnt/onedrive --allow-other --allow-non-empty --vfs-cache-mode writes。其中Onedrive也可以是其他已经假如config可以连接的网盘,挂载位置只要存在且用户有权访问。--vfs-cache-more writes并不是所有网盘都需要,仅在网盘不支持streaming的情况下rclone才会提示需要设置为writes或者full

  • 执行完这条几秒之后,如果没反应,那八成是挂载成功了。需要断开ssh重新连接,然后df -h

  • 如果df -h里面你看到了自己挂的网盘,那就挂载成功了,可以像本地硬盘一样读写了(不过肯定比本地硬盘慢的)

设置开机挂载

  • whereis rclone一下,如果在/usr/bin/rclone就不用管了
    • 如果不在那里,比如在/usr/local/rclone/rclone,那就复制过去/usr/bin/rclone
  • nano /usr/lib/systemd/system/rclone.service,模板:
[Unit]
Description=rclone
 
[Service]
User=root

ExecStart=/usr/bin/rclone mount OneDrive: /home/<user_name>/mnt/onedrive --allow-other --allow-non-empty --vfs-cache-mode writes


Restart=on-abort

[Install]
WantedBy=multi-user.target

编辑好后,
重新加载新的service
systemctl daemon-reload
设置开机启动
systemctl enable rclone