title

1.关于微软的onedriveAPI获取和授权:

进入 Microsoft Azure 应用注册页面。点击新注册
名称随意,账户类型选择最后一个,重定向 URL 填写http://localhost:53682/
创建成功后你会看到 Client ID(客户端ID),复制并保存好。

获取 Client secret
点击证书和密码,创建个标签,设置到期时间并获得密码。

设置 API 权限
点击左侧列表API 权限,添加权限,选择Microsoft Graph类,添加Files.Read、Files.ReadWrite、Files.Read.All、Files.ReadWrite.All、offline_access五个权限,加上默认的User.Read总共六个
回到rlcone,你可以按部就班编辑onedrive的配置,新增Client_ID和Client_secret进行配置,也可以本地电脑打开cmd用如下指令快速配置:

rclone authorize "onedrive" "Client_ID" "Client_secret"

复制token到配置文件里,新增如下内容:

token = {"access_token":"xxxxxxxxxxxxxxxxxx","expiry":"2020-02-22T21:18:39.5036298+08:00"}

rclone拷贝至OneDrive的api配置基本就是这样了

2.拷贝至Onedrive常见设置和报错解决

  1. 拷贝到OneDrive报错size differ
    这是一个已知的微软的问题,在上传办公文件(word、xls等)和html文档的时候,OneDrive会偷偷修改文件大小

解决方法:拷贝完毕其他文件后确认只剩这些因为size differ报错而无法拷贝的文件了,则添加下述指令

--ignore-checksum --ignore-size

忽略文件检查指令,强制拷贝。

来自 [rclone.org]

  1. 如果遇到提示abuse文件无法拷贝
    请谷歌侧使用文件所有者账号拷贝,如果是团队盘,则使用管理员账号(SA群组则提升权限至管理员),并添加以下参数:
--drive-acknowledge-abuse

拷贝被标记abuse违规文件,此参数依然不能拷贝病毒文件,也不能拷贝不是自己所有权的违规文件

  1. 文件夹和文件名带有各种特殊字符的传输问题

在带有?#以及各种特殊日文字符的文件拷贝时,Google drive,OneDrive本身编码限制,容易造成方块或者系统限制无法上传,目前版本rclone暂时未能很好处理这个问题,可以添加--local-encoding=None 来处理,编码转换问题和系统特殊字符限制,详见:
Encoding

  1. 对于永久无法下载的403bug文件的处理方法:

因为Google drive的bug,某些未分享未达到下载限额的文件,会永久提示达到下载配额,如果通过下载后拷贝至OneDrive等网盘,会报错403error,downloadQuotaExceeded,这些文件只能通过删除后再次上传解决。

首先,我们需要获得bug文件清单,使用rlcone将日志级别-v改成-q仅输出错误日志,搭配log日志文件输出,重试次数设置为1次:-q --log-file=/root/error.txt --retries 1 演示完整拷贝指令如下:

gclone copy GdriveSA:{0AHKb_1xko1U4Uk9PVA}movies/M-team  Onedrive_M-team:M-team  --transfers 16 --cache-chunk-size 20M  --bwlimit 120M --max-size 100G  --include-from "/root/.config/rclone/M-teamCopyList.txt" -q --stats 15s --log-file=/root/error.txt --retries 1

获取到错误日志大概像这样子:

2020/11/04 03:29:49 ERROR : 91pxxn-180203-mixed-pack/木秀林_精品3P01 -1080P高清完整版.mp4: Failed to copy: failed to open source object: open file failed: googleapi: Error 403: The download quota for this file has been exceeded., downloadQuotaExceeded
2020/11/04 03:29:49 ERROR : 91pxxn-180203-mixed-pack/淘宝模特长靴短裤 -480P完整版.mp4: Failed to copy: failed to open source object: open file failed: googleapi: Error 403: The download quota for this file has been exceeded., downloadQuotaExceeded
2020/11/04 03:29:49 ERROR : 91pxxn-180203-mixed-pack/木秀林_酒店4p -720P高清完整版.mpg: Failed to copy: failed to open source object: open file failed: googleapi: Error 403: The download quota for this file has been exceeded., downloadQuotaExceeded

我们需要进一步的提取修正

提取基本的错误文件列表:

cat error.txt |cut -d':' -f4  > files.txt

然后从vps下载错误文件file.txt,使用记事本打开,将文件路径中的{}[]特殊字符转义,即直接全部替换添加转义符\,演示为:

{替换为\{

以此类推
你应该会获得如下的txt文档列表:

91pxxn-180203-mixed-pack/木秀林_精品3P02 -1080P高清完整版.mp4
91pxxn-180203-mixed-pack/燃情美少女_夜店黑丝妹01 -720P高清完整版.mp4
91pxxn-180203-mixed-pack/木秀林_酒店4p -720P高清完整版.mpg

接下来就可以将所有403文件转存到临时盘查看备用,确认清单是否正确并成功拷贝备份完整。

gclone copy GdriveSA:{0AP9FI_z4bj-mUk9PVA}movies/M-team  GdriveSA:{0AIZA9vF84-K2Uk9PVA}movies/M-team   -v --stats 15s --transfers 16  --cache-chunk-size 20M  --bwlimit 120M --max-size 100G  --include-from "root/files.txt"
--drive-server-side-across-configs

无误后再将所有错误文件的源文件使用rclone delete 删除

gclone delete GdriveSA:{0AP9FI_z4bj-mUk9PVA}movies/M-team    -v --stats 15s --transfers 16  --cache-chunk-size 20M  --bwlimit 120M --max-size 100G  --include-from "/root/files.txt"

再将提取转存的bug文件用server side copy拷回去,最后拷贝至OneDrive检测,应该全部都能正常下载拷贝了。

3.建议关闭Onedrive/Sharepoint的版本控制

  • 1、我们先安装最新的SharePoint Online Management Shell→下载地址
  • 2、首先登录我们的域:
Connect-SPOService -Url "https://omomoe-admin.sharepoint.com"
  • 3、输入以下指令关闭版本控制:
Set-SPOTenant -EnableMinimumVersionRequirement $False
  • 4、如有必要,你还可以设置OneDrive默认空间大小为25TB:
Set-SPOSite -Identity https://omomoe-my.sharepoint.com/personal/admin_omo_moe -StorageQuota 26214400

这个需要你有5个账号用满4.5tb空间后跟微软客服申请,方法参考:

  • 5、世纪互联的登录地址参考:
Connect-SPOService -url https://XXXXX-admin.sharepoint.cn -Credential admin@xxxx.partner.onmschina.cn
  • 6、这样我们就可以在网页端打开“无版本控制”选项了,访问方法如下:

  • 7、SharePoint的版本控制也是类似的,访问你的SharePoint,点击左下角经典网站页面,选择网站设置,找到版本控制或者存储标准,去删除不需要的文件历史版本,参考的设置地址和存储标准地址如下
https://omomoe.sharepoint.com/sites/SiteName/_layouts/15/settings.aspx
https://omomoe.sharepoint.com/sites/SiteName/_layouts/15/storman.aspx
  • 8、如果你之前开启了历史版本功能,由于微软的快速md5验证的bug,会导致重复上传同个文件,多个历史版本占用大量的空间,微软的解决方案是让你全部下载完毕后关闭版本控制再上传一次

rclone 拷贝时 移除history versions相关参数 --onedrive-no-versions
相关讨论:
https://github.com/rclone/rclone/issues/4106
帖子里提到有shell脚本可以自行修改盘符配置进行文件历史版本清理:
onedrive-cleanup.sh
当然你还是有最后的方案:DMS-Shuttle 下载这个软件,获取正版授权或者下载绿色版,还是可以批量访问微软OneDrive api循环删除所有文件的历史版本的,不过不一定稳定,也不见得所有的历史版本能够删除成功。所以,如果以上方案都不适合你,最后的无奈之举,我个人觉得微软客服说的有道理,建议使用mover或者rclone拷贝到其他账号后,关闭版本控制,再拷贝回来

Last modification:March 25, 2022
If you think my article is useful to you, please feel free to appreciate