由于百度网盘、115网盘等的普及,通常我们在使用网盘的时候,都是按照了这些软件的习惯,使用特定客户端,有些时候并不是很方便。

其实有些网盘,本身是支持API的,在API的基础上,我们就可以自行开发出第三方的网盘客户端了。

Rclone简介

Rclone是一款可以直接将网盘挂载到本地目录的程序,我们可以像时候本地的磁盘一样使用挂载好的网盘。
今天记录一下在linux环境下,OneDrive的挂载过程。

下载Rclone

github

https://github.com/rclone/rclone/releases

官网

https://rclone.org/downloads/

为了更方便安装,我们需要下载Windows版本,用于获取网盘的access_token。目前最新版为【rclone-v1.57.0-windows-amd64】
Linux版本可以不用下载,直接使用一键安装脚本即可。
image99f7ef6897d824a5.png

获取access_token

下载好安装包后先进行解压。
如我解压后的路径为:

D:\ashin\Downloads\rclone-v1.57.0-windows-amd64\rclone-v1.57.0-windows-amd64

打开windows的命令行窗口,运行如下两条命令:

cd D:\ashin\Downloads\rclone-v1.57.0-windows-amd64\rclone-v1.57.0-windows-amd64

注意将路径更改为自己的rclone文件所在路径。

.\rclone.exe authorize "onedrive"

image693c0b78bb68fb55.png

运行后浏览器将会打开OneDrive登陆页面,根据提示登陆自己的OneDrive账号,等待页面提示【Success!】

再次回到命令行窗口,此时会出现我们的access_token。
imagefaa3bb0655b4bbb2.png
根据提示,复制整段内容(我图中标记阴影部分)。

Linux安装Rclone

使用root用户ssh登录到linux客户端,执行以下命令自动安装最新版。

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

等待提示成功【rclone v1.57.0 has successfully installed.】。
image683781f79cdfcf2c.png

配置OneDrive

运行rclone config

rclone config

输出:

root@instance-20220204-2125:~# rclone config
<5>NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> 

这里输出【n】,表示新建。并且根据提示输入一个自定义的名称以及挂载的类型。

n/s/q> n
name> onedrive-mac
Option Storage.
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.
 1 / 1Fichier
   \ "fichier"
 2 / Alias for an existing remote
   \ "alias"
 3 / Amazon Drive
   \ "amazon cloud drive"
 4 / Amazon S3 Compliant Storage Providers including AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, SeaweedFS, and Tencent COS
   \ "s3"
 5 / Backblaze B2
   \ "b2"
 6 / Better checksums for other remotes
   \ "hasher"
 7 / Box
   \ "box"
 8 / Cache a remote
   \ "cache"
 9 / Citrix Sharefile
   \ "sharefile"
10 / Compress a remote
   \ "compress"
11 / Dropbox
   \ "dropbox"
12 / Encrypt/Decrypt a remote
   \ "crypt"
13 / Enterprise File Fabric
   \ "filefabric"
14 / FTP Connection
   \ "ftp"
15 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
16 / Google Drive
   \ "drive"
17 / Google Photos
   \ "google photos"
18 / Hadoop distributed file system
   \ "hdfs"
19 / Hubic
   \ "hubic"
20 / In memory object storage system.
   \ "memory"
21 / Jottacloud
   \ "jottacloud"
22 / Koofr
   \ "koofr"
23 / Local Disk
   \ "local"
24 / Mail.ru Cloud
   \ "mailru"
25 / Mega
   \ "mega"
26 / Microsoft Azure Blob Storage
   \ "azureblob"
27 / Microsoft OneDrive
   \ "onedrive"
28 / OpenDrive
   \ "opendrive"
29 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
30 / Pcloud
   \ "pcloud"
31 / Put.io
   \ "putio"
32 / QingCloud Object Storage
   \ "qingstor"
33 / SSH/SFTP Connection
   \ "sftp"
34 / Sia Decentralized Cloud
   \ "sia"
35 / Sugarsync
   \ "sugarsync"
36 / Tardigrade Decentralized Cloud Storage
   \ "tardigrade"
37 / Transparently chunk/split large files
   \ "chunker"
38 / Union merges the contents of several upstream fs
   \ "union"
39 / Uptobox
   \ "uptobox"
40 / Webdav
   \ "webdav"
41 / Yandex Disk
   \ "yandex"
42 / Zoho
   \ "zoho"
43 / http Connection
   \ "http"
44 / premiumize.me
   \ "premiumizeme"
45 / seafile
   \ "seafile"

Microsoft OneDrive编号为27,则输入27。
【client_id】和【client_secret】不了解的话直接默认即可。
服务提供商如果是21世纪互联选择【Azure and Office 365 operated by 21Vianet in China】,不清楚的话直接默认。
【Edit advanced config?】默认y
【Use auto config?】选择N,不自动配置

Storage> 27
Option client_id.
OAuth Client Id.
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id> 
Option client_secret.
OAuth Client Secret.
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret> 
Option region.
Choose national cloud region for OneDrive.
Enter a string value. Press Enter for the default ("global").
Choose a number from below, or type in your own value.
 1 / Microsoft Cloud Global
   \ "global"
 2 / Microsoft Cloud for US Government
   \ "us"
 3 / Microsoft Cloud Germany
   \ "de"
 4 / Azure and Office 365 operated by 21Vianet in China
   \ "cn"
region> 
Edit advanced config?
y) Yes
n) No (default)
y/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> n
Option config_token.
For this to work, you will need rclone available on a machine that has
a web browser available.
For more help and alternate methods see: https://rclone.org/remote_setup/
Execute the following on the machine with the web browser (same rclone
version recommended):
        rclone authorize "onedrive"
Then paste the result.
Enter a string value. Press Enter for the default ("").

而后输入刚才在windows下获取到的access_token。其他选项参考图中所示。
image4711c7cff79d5749.png

提示添加成功后选择【y】,并且退出即可。

--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> 
Current remotes:

Name                 Type
====                 ====
mac                  onedrive

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> 
e/n/d/r/c/s/q> q

安装fuse

挂载到磁盘我们还需要用到fuse这个工具。
Debian和Ubuntu:

apt install -y fuse

CentOS

yum install -y fuse

挂载OneDrive

建立挂载文件夹

选一个自己喜欢的目录

mkdir /onedrive

临时挂载

rclone mount mac:/ /onedrive --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000

请注意,上面命令中:
1、【mac】为配置OneDrive步骤中自己填写的名称,我的为【mac】,需改成自己的。
2、/onedrive 为需要挂载到的本地目录,我的为/onedrive,需改为自己的。

执行后页面没有动静,为正常现象。

root@instance-20220204-2125:~# rclone mount mac:/ /onedrive --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000
<5>NOTICE: One drive root '': --vfs-cache-mode writes or full is recommended for this remote as it can't stream

重新打开一个SSH窗口,确认是否成功挂载。

df -h

image0014ed798f9e27fc.png

配置开机自动挂载

运行以下命令

command=" mount mac:/ /onedrive  --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000"

此命令后面为上面临时挂载命令去掉开头的rclone。

cat > /etc/systemd/system/rclone.service <<EOF
[Unit]
Description=Rclone
After=network-online.target

[Service]
Type=simple
ExecStart=$(command -v rclone) ${command}
Restart=on-abort
User=root

[Install]
WantedBy=default.target
EOF

此为一条完整的shell命令,需要全部复制,一次执行。
启动

systemctl start rclone

开机自启

systemctl enable rclone

查看状态

systemctl status rclone

重启

systemctl restart  rclone

停止

systemctl status rclone

这样就挂载到linux里面了

Rclone常用功能选项

命令格式

# 本地到网盘
rclone [功能选项] <本地路径> <网盘名称:路径> [参数] [参数] ...

# 网盘到本地
rclone [功能选项] <网盘名称:路径> <本地路径> [参数] [参数] ...

# 网盘到网盘
rclone [功能选项] <网盘名称:路径> <网盘名称:路径> [参数] [参数] ...

举例

同步内容到网盘

/usr/bin/rclone sync -v /root/本地目录/ mac:/ > ~/drive.log 2>&1

同步内容到本地

/usr/bin/rclone sync -v mac:/ /root/本地目录/ > ~/drive.log 2>&1

其他命令

  • rclone copy - 复制
  • rclone move - 移动,如果要在移动后删除空源目录,请加上 --delete-empty-src-dirs 参数
  • rclone sync - 同步:将源目录同步到目标目录,只更改目标目录。
  • rclone size - 查看网盘文件占用大小。
  • rclone delete - 删除路径下的文件内容。
  • rclone purge - 删除路径及其所有文件内容。
  • rclone mkdir - 创建目录。
  • rclone rmdir - 删除目录。
  • rclone rmdirs - 删除指定灵境下的空目录。如果加上 --leave-root 参数,则不会删除根目录。
  • rclone check - 检查源和目的地址数据是否匹配。
  • rclone ls - 列出指定路径下的所有的文件以及文件大小和路径。
  • rclone lsl - 比上面多一个显示上传时间。
  • rclone lsd 列出指定路径下的目录
  • rclone lsf - 列出指定路径下的目录和文件