使用Rclone挂载世纪互联OneDrive

发布于 2020-05-27  530 次阅读


世纪互联 OneDrive 获取 CLIENT_ID 及 CLIENT_SECRET

打开 https://portal.azure.cn/ 登陆并按以下步骤:

  1. 左侧找到 Azure Active Directory 点击
  2. 左侧找到 应用注册
  3. 上方找到 新注册 点击
  4. 名称:onedrive
  5. 受支持的账户类型: 任何组织目录(任何 Azure AD 目录 - 多租户)中的帐户(第二个)
  6. 重定向 URL:http://localhost:53682
  7. 点击注册 找到 应用程序(客户端) ID 复制 client_ID 保存
  8. 左侧找到 证书和密码 点击
  9. 下方 客户端密码 - 新客户端密码
  10. 说明:onedrive
  11. 截止期限:默认 1年内
  12. 点击 添加, 客户端密码 复制 client_secret 保存
  13. 左侧找到 API 权限 点击
  14. 添加权限 - Microsoft Graph - 委托的权限 - Files (7)全部勾选
  15. 选择应用程序权限 在下方Files里选择 Files.Read.AllFiles.ReadWrite.All

回到界面会发现该权限处于未授权状态,我们需要全局管理员点击 代表XXXX授予管理员同意

Files.Read
Files.Read.All
Files.Read.Selected
Files.ReadWrite
Files.ReadWrite.All
Files.ReadWrite.AppFolder
Files.ReadWrite.Selected

安装配置 Rclone

Rclone 世纪互联版地址:兼容世纪互联的 Rclone

预编译兼容世纪互联的 Rclone v1.50.2

Linux 32 位 | Linux 64 位 | Windows 32 位 | Windows 64 位

下载解压上传到 /usr/bin 目录,然后

chmod +x /usr/bin/rclone
rclone config

完整配置过程如下

Microsoft Windows [版本 10.0.17763.316]
(c) 2018 Microsoft Corporation。保留所有权利。

C:\Users\user>cd C:\Users\user\Desktop\rclone-v1.50.2-windows-amd64-21vianet

C:\Users\user\Desktop\rclone-v1.50.2-windows-amd64-21vianet>rclone config
2020/02/01 13:46:21 NOTICE: Config file "C:\\Users\\user\\.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
name> onedrive_cn
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 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 / JottaCloud
   \ "jottacloud"
17 / Koofr
   \ "koofr"
18 / Local Disk
   \ "local"
19 / Mail.ru Cloud
   \ "mailru"
20 / Mega
   \ "mega"
21 / Microsoft Azure Blob Storage
   \ "azureblob"
22 / Microsoft OneDrive
   \ "onedrive"
23 / OpenDrive
   \ "opendrive"
24 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
25 / Pcloud
   \ "pcloud"
26 / Put.io
   \ "putio"
27 / QingCloud Object Storage
   \ "qingstor"
28 / SSH/SFTP Connection
   \ "sftp"
29 / Transparently chunk/split large files
   \ "chunker"
30 / Union merges the contents of several remotes
   \ "union"
31 / Webdav
   \ "webdav"
32 / Yandex Disk
   \ "yandex"
33 / http Connection
   \ "http"
34 / premiumize.me
   \ "premiumizeme"
Storage> 22
** See help for onedrive backend at: https://rclone.org/onedrive/ **

Microsoft App Client Id
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id> 6b57cb03-3791-4823-9ce9-5dd027e*****
Microsoft App Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret> l05:IBoAAVh4]Y]4M_?9lgw-L8******
OneDrive operated by 21Vianet (世纪互联).
Enter a boolean value (true or false). Press Enter for the default ("false").
is_21vianet_version> true
Edit advanced config? (y/n)
y) Yes
n) No
y/n> y
Chunk size to upload files with - must be multiple of 320k (327,680 bytes).

Above this size files will be chunked - must be multiple of 320k (327,680 bytes). Note
that the chunks will be buffered into memory.
Enter a size with suffix k,M,G,T. Press Enter for the default ("10M").
chunk_size> 10M
The ID of the drive to use
Enter a string value. Press Enter for the default ("").
drive_id>
The type of the drive ( personal | business | documentLibrary )
Enter a string value. Press Enter for the default ("").
drive_type> business
Set to make OneNote files show up in directory listings.

By default rclone will hide OneNote files in directory listings because
operations like "Open" and "Update" won't work on them.  But this
behaviour may also prevent you from deleting them.  If you want to
delete OneNote files or otherwise want them to show up in directory
listing, set this option.
Enter a boolean value (true or false). Press Enter for the default ("false").
expose_onenote_files>
Remote config
Make sure your Redirect URL is set to "http://localhost:53682/" in your custom 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?state=3-n1fmI2XA7QsjnhQAjoQw
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 / Root 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!Yb3jWYP2_EOgiOjYxlsv4iz1Y8ZSfhlEm48kp98Ew0Dzv4TUrSwSSK1sL5j*****
Chose drive to use:> 0
Found drive 'root' of type 'business', URL: https://*****-my.sharepoint.cn/personal/***_****_partner_onmschina_cn/Documents
Is that okay?
y) Yes
n) No
y/n> y
--------------------
[onedrive_cn]
type = onedrive
client_id = 6b57cb03-3791-4823-9ce9-5dd027e*****
client_secret = l05:IBoAAVh4]Y]4M_?9lgw-L8******
is_21vianet_version = true
chunk_size = 10M
drive_type = business
token = {"access_token":"eyJ0eXAiOiJKV1Q********BtBs2OM8B1Euv7SAA","expiry":"2020-02-01T14:50:32.8151941+08:00"}
drive_id = b!Yb3jWYP2_EOgiOjYxlsv4iz1Y8****************UrSwSSK1sL5jmrG0I
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name                 Type
====                 ====
onedrive_cn        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> q

配置文件C:\Users\user\.config\rclone\rclone.conf格式如下

[onedrive_cn]
type = onedrive
client_id = 6b57cb03-3791-4823-9ce9-5dd027e*****
client_secret = l05:IBoAAVh4]Y]4M_?9lgw-L8******
is_21vianet_version = true
chunk_size = 10M
drive_type = business
token = {"access_token":"eyJ0eXAiOiJKV1Q********BtBs2OM8B1Euv7SAA","expiry":"2020-02-01T14:50:32.8151941+08:00"}
drive_id = b!Yb3jWYP2_EOgiOjYxlsv4iz1Y8****************UrSwSSK1sL5jmrG0I

挂载

apt -y update && apt install fuse

挂载命令:

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

后台挂载命令:

nohup rclone mount onedrive:/ /mnt --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000 >/dev/null 2>&1 &

卸载命令:

fusermount -qzu LocalFolder onedrive

Rclone 开机启动(脚本来自:Rat’s Blog,二次修改支持多网盘挂载)

nano /etc/init.d/rcloned

文本内容如下

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
NAME_BIN="rclone"

REMOTE='' 
LOCAL='' 

NAME_1=""
REMOTE_1=''
LOCAL_1=''

Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m"
Info="${Green_font_prefix}[信息]${Font_color_suffix}"
Error="${Red_font_prefix}[错误]${Font_color_suffix}"
RETVAL=0

check_running(){
    PID="$(ps -C $NAME_BIN -o pid= |head -n1 |grep -o '[0-9]\{1,\}')"
    if [[ ! -z ${PID} ]]; then
        return 0
    else
        return 1
    fi
}
do_start(){
    check_running
    if [[ $? -eq 0 ]]; then
        echo -e "${Info} $NAME_BIN (PID ${PID}) 正在运行..." && exit 0
    else
        fusermount -zuq $LOCAL >/dev/null 2>&1
        mkdir -p $LOCAL
        /usr/bin/rclone mount $NAME:$REMOTE $LOCAL --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000 >/dev/null 2>&1 &
        sleep 2s
        fusermount -zuq $LOCAL_1 >/dev/null 2>&1
        mkdir -p $LOCAL_1
        /usr/bin/rclone mount $NAME_1:$REMOTE_1 $LOCAL_1 --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000 >/dev/null 2>&1 &
        check_running
        if [[ $? -eq 0 ]]; then
            echo -e "${Info} $NAME_BIN 启动成功 !"
        else
            echo -e "${Error} $NAME_BIN 启动失败 !"
        fi
    fi
}
do_stop(){
    check_running
    if [[ $? -eq 0 ]]; then
        kill -9 ${PID}
        RETVAL=$?
        if [[ $RETVAL -eq 0 ]]; then
            echo -e "${Info} $NAME_BIN 停止成功 !"
        else
            echo -e "${Error} $NAME_BIN 停止失败 !"
        fi
    else
        echo -e "${Info} $NAME_BIN 未运行"
        RETVAL=1
    fi
    fusermount -zuq $LOCAL >/dev/null 2>&1
    fusermount -zuq $LOCAL1 >/dev/null 2>&1
}
do_status(){
    check_running
    if [[ $? -eq 0 ]]; then
        echo -e "${Info} $NAME_BIN (PID $(echo ${PID})) 正在运行..."
    else
        echo -e "${Info} $NAME_BIN 未运行 !"
        RETVAL=1
    fi
}
do_restart(){
    do_stop
    do_start
}
case "$1" in
    start|stop|restart|status)
    do_$1
    ;;
    *)
    echo "使用方法: $0 { start | stop | restart | status }"
    RETVAL=1
    ;;
esac
exit $RETVAL

操作命令

chmod +x /etc/init.d/rcloned
/etc/init.d/rcloned start
/etc/init.d/rcloned stop

或许明日太阳西下倦鸟已归时