Rclone是一个非常牛逼的软件,可以挂载OneDrive/Google Drive/Amazon Drive等云存储,同时还支持全平台,意味着您可以在Windows、Mac OS、Linux上进行使用。这篇文章主要分享CentOS使用Rclone挂载OneDrive的过程,其它系统或者挂载其它网盘原理和方法大致相同。
前提说明
服务器上CentOS大部分未安装图形界面,但是Rclone必须要在有内置浏览器的电脑才能正常完成授权,因此这里使用的办法是先在本地Windows电脑安装Rclone并获取授权后的token,再将其复制到CentOS的服务器上。
Windows 安装Rclone
- Windows客户端:rclone-v1.41-windows-amd64.zip
下载后将其解压,并将rclone.exe
移动到C:\Windows\System32
这个目录,这样就可以使用rclone命令了,如下截图。
在cmd窗口继续输入命令rclone config
进行配置,输入n
新建一个远程,并取一个名字,比如onedrive
继续下一步,选择需要挂载的云存储,Onedrvie是16,随着版本的变化可能会改变,自己灵活变通即可。
client_id
/client_secret
直接留空并回车,然后选择OneDrive版本,教育版或商业版请选择b
,个人版选择p
浏览器会自动打开http://localhost:53682/
并进行授权,如果授权成功会返回token
,请务必将token
记录并保存后面还要使用。
CentOS安装Rclone
直接使用官方的一键安装命令即可,输入下面的命令:
curl https://rclone.org/install.sh | sudo bash
CentOS挂载Onedrive
接下来操作方法和windows完全一样,就不重复了,唯一的区别是“Use auto config?”这里选择n
,并输入之前获取的token
继续输入命令进行挂载
#安装fuse
yum -y install fuse
#创建挂载目录
mkdir -p /home/onedrive
#挂载
rclone mount remote:path/to/files /home/onedrive
#如果需要后台保持运行,使用下面的命令
nohup rclone mount remote:path/to/files /home/onedrive &
#####必须挂载到可道云安装目录下的文件夹:
mount onedriver5t:/ /www/wwwroot/yunpan.caojiawan.cn/data/User/admin/home/onedriver5t --allow-other --daemon --allow-non-empty
解释下上面的参数:
- remote:远程名,之前我们设置的是onedrive
- path/to/files:远程文件路径(也就是Onedrive路径),可设置为
/,注意不可有空格,我就在这里卡了一会。
- /home/onedrive:本地磁盘路径
- 如果不挂载到可道云目录下,就访问不到。
不出问题的情况下,输入df -h
就可以看到Onedrive成功挂载。
总结
Rclone支持挂载20多种网盘,不过大多数网盘都是国外的,在国外VPS上使用效果更佳,用来备份数据这些还是挺不错的。
Microsoft OneDrive
路径指定为 remote:path
路径可以根据需要深入,例如remote:directory/subdirectory
。
OneDrive的初始设置涉及从Microsoft获取您需要在浏览器中执行的令牌。 rclone config
引导你完成它。
这是一个如何制作远程调用的示例remote
。第一次运行:
rclone config
这将指导您完成交互式设置过程:
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> n
name> remote
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
...
17 / Microsoft OneDrive
\ "onedrive"
...
Storage> 17
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
y/n> n
Remote 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
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 / 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!Eqwertyuiopasdfghjklzxcvbnm-7mnbvcxzlkjhgfdsapoiuytrewqk
Chose drive to use:> 0
Found drive 'root' of type 'business', URL: https://org-my.sharepoint.com/personal/you/Documents
Is that okay?
y) Yes
n) No
y/n> y
--------------------
[remote]
type = onedrive token = {“access_token”:”youraccesstoken”,”token_type”:”Bearer”,”refresh_token”:”yourrefreshtoken”,”expiry”:”2018-08-26T22:39:52.486512262+08:00″} drive_id = b!Eqwertyuiopasdfghjklzxcvbnm-7mnbvcxzlkjhgfdsapoiuytrewqk drive_type = business ——————– y) Yes this is OK e) Edit this remote d) Delete this remote y/e/d> y
有关如何在没有Internet浏览器的计算机上进行设置,请参阅远程设置文档。
请注意,rclone在本地计算机上运行Web服务器以收集从Microsoft返回的令牌。这仅从打开浏览器的那一刻开始,直到您返回验证码的那一刻。这是http://127.0.0.1:53682/
,这可能需要你,如果你正在运行的主机防火墙暂时解锁。
配置完成后,您可以rclone
像这样使用,
列出OneDrive顶级目录
rclone lsd remote:
列出OneDrive中的所有文件
rclone ls remote:
将本地目录复制到名为backup的OneDrive目录
rclone copy /home/source remote:backup
获取您自己的客户端ID和密钥
在默认情况下执行请求时,rclone使用所有rclone用户共享的一对客户端ID和密钥。如果您遇到问题(例如,看到很多限制),您可以按照以下步骤获取自己的客户ID和密钥:
- 打开https://apps.dev.microsoft.com/#/appList,然后单击
Add an app
(Converged applications
如果适用则选择) - 输入应用的名称,然后点击“继续”。复制并保留
Application Id
应用名称下方以供日后使用。 - 在部分下
Application Secrets
,单击Generate New Password
。复制并保留该密码以供日后使用。 - 在部分下
Platforms
,单击Add platform
,然后Web
。输入http://localhost:53682/
在Redirect URLs
。 - 根据部分
Microsoft Graph Permissions
,Add
这些delegated permissions
:Files.Read
,Files.ReadWrite
,Files.Read.All
,Files.ReadWrite.All
,offline_access
,User.Read
。 - 滚动到底部并单击
Save
。
现在申请已经完成。运行rclone config
以创建或编辑OneDrive远程。分别提供应用程序ID和密码作为客户端ID和密钥。rclone将引导您完成剩下的步骤。
修改时间和哈希值
OneDrive允许在精确到1秒的对象上设置修改时间。这些将用于检测对象是否需要同步。
OneDrive个人支持SHA1类型哈希。OneDrive for Business和Sharepoint Server支持 QuickXorHash。
对于所有类型的OneDrive,您可以使用该--checksum
标志。
删除文件
您使用rclone删除的任何文件都将以垃圾邮件结尾。Microsoft不提供永久删除文件的API,也不提供清空垃圾箱的API,因此您必须使用Microsoft的某个应用程序或通过OneDrive网站执行此操作。
标准选项
以下是onedrive(Microsoft OneDrive)特有的标准选项。
–onedrive-客户端ID
Microsoft App Client ID正常保留空白。
- 配置:client_id
- 环境变量:RCLONE_ONEDRIVE_CLIENT_ID
- 输入:string
- 默认值:“”
–onedrive客户端秘密
Microsoft App Client Secret正常保留空白。
- 配置:client_secret
- 环境变量:RCLONE_ONEDRIVE_CLIENT_SECRET
- 输入:string
- 默认值:“”
高级选项
以下是onedrive(Microsoft OneDrive)特有的高级选项。
–onedrive的块大小
使用上传文件的块大小必须是320k的倍数。
超过这个大小的文件将被分块 – 必须是320k的倍数。请注意,块将被缓冲到内存中。
- 配置:chunk_size
- 环境变量:RCLONE_ONEDRIVE_CHUNK_SIZE
- 类型:SizeSuffix
- 默认值:10M
–onedrive驱动-ID
要使用的驱动器的ID
- 配置:drive_id
- 环境变量:RCLONE_ONEDRIVE_DRIVE_ID
- 输入:string
- 默认值:“”
–onedrive驱动型
驱动器的类型(个人| business | documentLibrary)
- 配置:drive_type
- 环境变量:RCLONE_ONEDRIVE_DRIVE_TYPE
- 输入:string
- 默认值:“”
–onedrive展露-的OneNote档案
设置为使OneNote文件显示在目录列表中。
默认情况下,rclone会将OneNote文件隐藏在目录列表中,因为“打开”和“更新”等操作对它们无效。但是这种行为也可能会阻止您删除它们。如果要删除OneNote文件或希望它们显示在目录列表中,请设置此选项。
- 配置:expose_onenote_files
- 环境变量:RCLONE_ONEDRIVE_EXPOSE_ONENOTE_FILES
- 输入:bool
- 默认值:false
限制
请注意,OneDrive不区分大小写,因此您不能拥有名为“Hello.doc”的文件和名为“hello.doc”的文件。
有很多字符不能在OneDrive文件名中。这些在Windows平台上不会发生,但在非Windows平台上它们很常见。Rclone将这些名称映射到相同的unicode等效名称。例如,如果文件中包含一个文件?
,则会将其映射到?
。
OneDrive for Business允许的最大文件大小为15GB,OneDrive Personal允许的最大文件大小为35GB(2019年1月4日更新)。
对于OneDrive,OneDrive for Business和SharePoint Online,整个路径(包括文件名)必须包含少于400个字符。如果使用rclone加密文件和文件夹名称,则可能需要注意此限制,因为加密的名称通常比原始名称长。
OneDrive似乎可以在一个文件夹中至少有50,000个文件,但是100,000 rclone将会出现列出目录的错误couldn’t list files: UnknownError:
。有关详细信息,请参阅 #2707。
有关不同类型OneDrive限制的官方文档可在此处找到。
版本问题
OneDrive中的每个更改都会导致服务创建新版本。这会计入用户配额。例如,更改文件的修改时间会创建第二个版本,因此文件使用两倍的空间。
这copy
是唯一受此影响的rclone命令,因为我们复制文件然后设置修改时间以匹配源文件。
注意:从2018年10月开始,用户将无法再默认禁用版本控制。这是因为Microsoft已对该机制进行了更新。要更改此新的默认设置,SharePoint管理员需要运行PowerShell命令。如果您是管理员,则可以在PowerShell中运行这些命令以更改该设置:
Install-Module -Name Microsoft.Online.SharePoint.PowerShell
(如果你还没有安装这个)Import-Module Microsoft.Online.SharePoint.PowerShell -DisableNameChecking
Connect-SPOService -Url https://YOURSITE-admin.sharepoint.com -Credential YOU@YOURSITE.COM
(替换YOURSITE
,YOU
,YOURSITE.COM
与实际值,这将提示输入您的凭据)Set-SPOTenant -EnableMinimumVersionRequirement $False
Disconnect-SPOService
(断开与服务器的连接)
以下是普通用户禁用版本控制的步骤。如果未看到“无版本控制”选项,请确保满足上述要求。
用户Weropol找到了一种在OneDrive上禁用版本控制的方法
- 单击OneDrive Business页面顶部的齿轮符号打开设置菜单。
- 单击站点设置。
- 进入“站点设置”页面后,导航到“站点管理”>“站点库和列表”。
- 单击“自定义”“文档”。
- 单击常规设置>版本控制设置。
- 在文档版本历史记录下,选择无版本控制选项。注意:这将禁用新文件版本的创建,但不会删除任何以前的版本。您的文件是安全的。
- 单击“确定”应用更改。
- 使用rclone上传或修改文件。(我也使用–no-update-modtime标志)
- 使用rclone后恢复版本控制设置。(可选的)
故障排除
Error: access_denied
Code: AADSTS65005
Description: Using application 'rclone' is currently not supported for your organization [YOUR_ORGANIZATION] because it is in an unmanaged state. An administrator needs to claim ownership of the company by DNS validation of [YOUR_ORGANIZATION] before the application rclone can be provisioned.
这意味着rclone无法将OneDrive for Business API与您的帐户一起使用。你不能做太多,也许写一封电子邮件给你的管理员。
但是,还有其他方式可以与OneDrive帐户进行交互。看一下webdav后端:https://rclone.org/webdav/#sharepoint