缘由:

前面一直宅在家没什么事干,于是去撸了下服务器玩,想存点东西在服务器上,结果没存多少硬盘就满了(小硬盘vps嘛,毕竟穷),于是就想着在给服务器扩容,去网上找了下解决方案,还真找到了解决方案,就是使用rclone进行配合网盘扩容,不过在部署是还是遇到不少的问题,不过还好都顺利的解决了。下面说一下部署方法以及可能会遇到的问题及解决办法。


更新:

  • 3.14:增加一些提示,补充了一些意外的情况

目录:(点击右侧的目录可直接跳转)

  1. 开始部署
  2. 安装rclone
  3. 配置rclone
  4. 使用自己申请的api方法
  5. 不使用自己的api
  6. 我遇到的坑及解决办法
  7. 使用screen挂载
  8. 使用systemctl挂载并开机启动

开始部署

安装rclone

安装rclone使用我们的官方一键安装脚本,一步到位,方便快捷

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

配置rclone

上一步安装成功后输入rclone config开始进行配置
输入rclone config后是是这样的:

n) New remote
s) Set configuration password
q) Quit config
n/s/q> 

n是新建,s是设置配置的密码,q是退出,我们要新建一个,所以输入“n”,

下面是让我们设定一个名称,这里随便填,好区分就好

name>  //自己取一个名字

然后回车,来到让你选择要挂载哪家的网盘的选项,列表如下,很长:

1 / 1Fichier
   \ "fichier"
 2 / Alias for an existing remote
   \ "alias"
 3 / Amazon Drive
   \ "amazon cloud drive"
 4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
   \ "s3"
 5 / Backblaze B2
   \ "b2"
 6 / Box
   \ "box"
 7 / Cache a remote
   \ "cache"
 8 / Citrix Sharefile
   \ "sharefile"
 9 / Dropbox
   \ "dropbox"
10 / Encrypt/Decrypt a remote
   \ "crypt"
11 / FTP Connection
   \ "ftp"
12 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
13 / Google Drive
   \ "drive"
14 / Google Photos
   \ "google photos"
15 / Hubic
   \ "hubic"
16 / In memory object storage system.
   \ "memory"
17 / JottaCloud
   \ "jottacloud"
18 / Koofr
   \ "koofr"
19 / Local Disk
   \ "local"
20 / Mail.ru Cloud
   \ "mailru"
21 / Mega
   \ "mega"
22 / Microsoft Azure Blob Storage
   \ "azureblob"
23 / Microsoft OneDrive
   \ "onedrive"
24 / OpenDrive
   \ "opendrive"
25 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
26 / Pcloud
   \ "pcloud"
27 / Put.io
   \ "putio"
28 / QingCloud Object Storage
   \ "qingstor"
29 / SSH/SFTP Connection
   \ "sftp"
30 / Sugarsync
   \ "sugarsync"
31 / Transparently chunk/split large files
   \ "chunker"
32 / Union merges the contents of several remotes
   \ "union"
33 / Webdav
   \ "webdav"
34 / Yandex Disk
   \ "yandex"
35 / http Connection
   \ "http"
36 / premiumize.me
   \ "premiumizeme"
Storage>

我们要使用微软的OneDrive来扩容,所以我们选23.

下面让我们输入调用api的应用ID,从这开始,有点区别了,由于rclone自带的默认api在使用人多的时候会不稳定,所以如果你想用自己的api,请看第一条折叠里面的内容。如果不想使用自己的api,或者你的账号不能注册Azure的应用不能申请api的话(office不是商业版,或者OneDrive商业版没有Azure新建应用的权限),请看第二条折叠的内容。

ps:如果没有OneDrive商业版的账号,或者觉得自己的OneDrive的容量小太小的,可以来我的小店购买,有1T容量,5T容量和25T容量的,都是商业版哦,个人版目前在国内几乎是无法使用的。商业版OneDrive使用xdown下载几乎可以跑满你的带宽(与本地网络有关,联通>电信>移动)链接:wlnxing的小店

使用自己的申请的api:

使用自己的api请展开看这

首先,打开微软Azure注册应用网站,链接:Azure管理中心,点击“注册应用”:
注册.png

随后是这样:
捕获.PNG

注意,上面这张图有误

输入应用名称,下面如果你申请到的api只想自己用的话,选第一个,如果想给其他人用,选第三个请直接选择第三个,重定向url选web,网址可输入http://localhost:53682,这是用来当这个应用的使用者授权权限成功时返回数据给你的服务器的。
都填好后就点注册,随后来到了这个界面:
zhuce.png
点击左栏的api权限,点击添加权限,添加以下几个api权限(选委托的权限),其中可能会用到的我都标注出来了,请酌情添加。批注 2020-02-16 125120.png
最后,最好点击一下代表管理员同意(如果可以的话),或者找你的管理员给你点同意。
添加完权限后,我们来创建一个客户端密码,点击证书和密码,点击+新客户端密码。窗口里说明随便填,期限要选“从不”,随后点击添加。然后下面就会出现你创建的密码,记住这个密码,因为这个密码只会出现一次。
批注 2020-02-16 130520.png
最后一步,回到主页面(点击“概述”),复制“应用程序(客户端)ID。
回到我们的VPS的控制台,现在是这样的:

Microsoft App Client Id
Enter a string value. Press Enter for the default ("").
client_id>   //输入刚刚复制的应用

输入我们刚刚复制的应用程序(客户端)ID,回车, 接下来是输入密码,这个是我们刚刚保存下来的密码。如下:

Enter a string value. Press Enter for the default ("").
client_secret>    //刚刚保存下来的密码

不用自己的api:

不用自己的api看这


不用自己的api非常简单,只需不停回车即可,如下:
回车:

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 (default)
y/n>

这里是问我们需不需要配置额外配置,我们用不上,所以直接输入n回车或者直接回车
然后来到了这:

Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine
y) Yes (default)
n) No
y/n>

这里是让我们选要不要进行自动配置,我说明一下,如果你是在有桌面环境的系统上进行的配置,那么就选y,自动配置;反之,如果你在没有桌面环境的系统上进行配置,那么就选n,手动配置。
由于在有桌面环境的系统进行自动配置比较简单,我就不讲了,重点讲一下在没有桌面环境的情况下的配置。
ps:这里我遇到了坑,大部分人可能遇不到,所以先说常规方法,你们可以先照我的方法做,后面遇到问题了再在下面我我的解决方法。
我们不用自动配置,所以选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 (same rclone version recommended) :
    rclone authorize "onedrive"
Then paste the result below:
result> 

手动配置的原理是我们在一台有浏览器的电脑上进行客户端授权,授权成功后把返回是信息手动输入到服务器里。因此,回到我们的电脑上,以Windows举例,在电脑上下载rclone,链接:rclone.org/downloads,解压到一个文件夹里,以我的举例,我解压在F盘里的rclone文件夹里的。这时,这时,按win+R键,输入cmd调出命令提示符控制台,输入以下命令:

f:
cd ./rclone
rclone authorize "onedrive"

这时会出现
以下信息:并且马上弹出浏览器

F:\service\rclone>rclone authorize "onedrive"
If your browser doesn't open automatically go to the following link: 
http://127.0.0.1:53682/auth? state=xxxxxxxxxxxxxxxxxxxx
Log in and authorize rclone for access Waiting for code..

如果你的浏览器没有弹出来,请手动打开浏览器,打开上面我标黄的内容,注意,不是复制我的,复制你控制台里的,每个人的都不一样。

打开后会跳转,跳转到微软的登录界面,这时登录你要挂载的微软账号,进行授权即可。
授权结束后,会显示“succee!”说明你授权成功了。这时回到你的命令行控制台,发现多了一长串代码,把这段代码复制下来,注意,是{}里的全部复制下来,包括{}。
回到服务器上,把你刚刚复制到的内容粘贴进去,回车

注意,这里可能会遇到坑,就是这段代码一复制进去,发现只复制到一半就复制不进去了,手动输也输入不进去。推测可能是限制了长度。要解决的话要换一种配置思路,具体方法请跳到后面,注意,如果回车进去报错的话,也可以试试这个方法

如果顺利的话,你会看到类似与以下的信息:

[OneDrive]
type = onedrive
client_id =
client_secret =
token = {xxxxxxxxx}
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> 

问我们信息正不正确,选y,回车,然后就会到类似下面界面:

Current remotes:

Name                 Type
====                 ====
xxxxx               xxxxxxx

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>

输入q退出配置。

我遇到的坑及解决方法

展开查看解决方法


正如上面所说的,可能是有什么限制,一次只能复制那么多字符进去,所以配置一直不成功。
rclone主要是需要返回后面的那一串参数,那么我们利用反代的方法把那一串参数传给rclone。简单说下。
这里我用宝塔面板举例,首先,创建一个网站,假设创建的是9696966.xyz(填写你服务器的IP也可以),随后,点击你创建的网站,建立一个反向代理,代理名称随便写,目标URL填写http://127.0.0.1:53682,发送域名填写9696966.xyz(你建立的网站的域名/ip)。点击保存。这样的话别人访问你的这个网站就相当于在访问你服务器上本地的53682上的那个网站,即rclone自动配置的网站。弄好后大概长这样:
批注 2020-02-16 221024.png
因此,在我们选是否要自动配置的时候,就是下面这个选项的时候:

Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine
y) Yes (default)
n) No
y/n>

我们选y自动配置,之后大概这样子的:

If your browser doesn't open automatically go to the following link: 
http://127.0.0.1:53682/auth?state=xxxxxxxxxxxxxxxxxxxxxxxxx
Log in and authorize rclone for access Waiting for code...

这时我们把那个链接(我标黄那个)的“http://127.0.0.1:53682”这一部分换成你自己的域名,然后到你的电脑上访问,注意后面那一部分要复制全,会跳转到微软的授权的界面,我们授权成功后,会跳转到之前我们在azure申请应用时填写的回复url
localhost:53682上,具体想这样的网址:http://localhost:53682/xxxxxxxxxxxxxxxxxx,然后会报错,无法访问,这时别慌,我们把前面的“http://localhost:53682”换成你刚刚建立的网站域名/ip,然后回车访问,你会发现,页面提示success!了,回到服务器控制台,服务器提示“get code”,然后就和上面的步骤一样了。

rclone配置成功了,接下来到我们的挂载。

挂载很简单,有两个方案:

使用screen挂载:

如果没有安装screen则安装screen

yum -y install screen

Screen是可以在多个进程之间多路复用一个物理终端的窗口管理器,说人话就是你可以把没有桌面窗口的服务器变成多窗口(当然还是命令行啦,不过你退出窗口后命令仍然会继续运行

安装好screen后,使用命令screen -S rclone打开一个名叫rclone的窗口(名字可以自行替换),随后创建文件夹,下一步要把网盘挂载在这。(路径和名字自己定,这里我挂载在root下的叫onedrive的文件夹

mkdir /root/OneDrive

文件夹创建好后便开始挂载:

rclone mount OneDrive:Folder /root/OneDrive --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000    

这里说下,OneDrive就是你在配置时起的名字,Folder就是你希望同步你OneDrive网盘里的哪个文件夹,/root/OneDrive就是你本地的路径,后面的参数的话如果你不清楚可以不用管,或者你可以参照官网的说明改。

注意,成功后是没有任何提示的,就是一直没有命令行出来,就像卡死了一样,这正说明rclone正在挂载,如果你按CTRL+C取消的话,就没有在挂载了

正如上面的说的一样,如果要挂载rclone了,那岂不是输不了命令了?这就为什么我们要用screen来挂载了,由于我们在screen开的窗口挂载的,因此,我们只需要退出这个窗口就行了,快捷键:按CTRL+a+d即可退出这个窗口,窗口里面的命令任然在运行。这样就可以据继续输入我们的命令了,可以输入df -h查看是否挂载成功了。如果Filesystem那一栏有你的挂载的名字的话就是成功了。
这里说下screen的常用命令和快捷键:

新建窗口:screen -S name//新建一个名叫name的窗口
退出该窗口(该窗口仍在):快捷键:CTRL+a+d
退出该窗口:输入:exit
在窗口外面要杀死一个窗口:screen -S name -X quit
进入一个窗口:screen -S -r name

其实我个人并不喜欢使用screen来挂载,因为切来切去的太麻烦了,还不好设置开机启动。

使用system服务来挂载并开机启动

使用服务来挂载是linux更推荐的做法,但是写要写服务文件比较麻烦,大家可以参考下我的,写的不是很好,如果有不完善的地方欢迎指出:



# Automatically generated by systemd-sysv-generator

[Unit]
Documentation=man:systemd-sysv-generator(8) 
Description=rclone 
Before=shutdown.target
After=all.target
After=network-online.target
Conflicts=shutdown.target
    
[Service]
Restart=on-abort
ExecStart= xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
User=root
    
[Install]
WantedBy = multi-user.target
  

打x的地方填入你的挂载命令

注意,这里最好写rclone安装路径的绝对位置,一般安装位置是在/usr/bin ,即填入的部分大概应该是“/usr/bin/rclone xxxxx"这种

把x替换后在把内容填进文件放入systemctl的文件夹,centos一般在/etc/systemd/system/
上命令:
进入文件夹:cd /etc/systemctl/system
创建文件:touch name.service //name是文件名字,后面通过这个名字管理挂载
编辑文件:vi name
ps:以可以直接vi /etc/systemd/system/name.service先输入文件内容后保存自动创建
i进入编辑模式,把上面的文件内容粘贴进去,按esc退出编辑模式,然按输入wq保存。
最后键入systemctl daemon-reload重载即可

说下命令:

挂载(启动服务):systemctl start name.service
停止挂载(停止挂载):systemctl stop name.service
重启服务:systemctl restart name.service
开机挂载(开机启动)systemctl enable name.service
取消开机启动:systemctl disable name.service

看,多方便,第一次配置好后,以后直接一条命令就可以可以控制了。

如果想挂载多个盘,只需要复制文件里的内容,以不同的名字命名,放在systemclt服务文件夹即可,后面的操作一样的。下面附上rclone官网地址:rclone

硬核广告:欢迎来wlnxing的小店看看有没有你需要的东西:wlnxing的小店

最后修改:2020 年 11 月 18 日
如果觉得我的文章对你有用,请随意赞赏