服务器用rclone挂载onedrive定时远程备份
一、安装 rclone
使用脚本下载安装 Rclone:
1 | curl https://rclone.org/install.sh | sudo bash |
1.在 rclone 中配置 OneDrive
1 | rclone config |
输入 n 创建一个新配置
然后填一个名称,例如onedrive,会要求选择要挂载的网盘,找到 Microsoft OneDrive 并输入其前面的序号,接下来会要求输入 client_id 和 client_secret。然后会出现 OneDrive 区域选择,如下:
1 | Choose national cloud region for OneDrive. |
可以直接输入 1 选择全球
然后是选择是否进行高级配置,如下:
1 | dit advanced config? (y/n) |
可以输入 n ,
接着是自动配置选择,如下:
1 | Remote config |
可以输入 n ,
这里需要获取授权码:
1 | For this to work, you will need rclone available on a machine that has |
授权码需要在本地电脑上获取,访问 rclone 根据你的电脑系统版本下载对应的 Rclone。
下载完成后解压,进入存放 Rclone 的目录,打开 Powershell ,Rclone 放在 D:\下载\rclone-v1.67.0-windows-amd64 ,输入:
1 | cd D:\下载\rclone-v1.67.0-windows-amd64 |
在存放 Rclone 的目录可以看到 rclone.exe 的可执行程序,输入:
1 | ./rclone authorize "onedrive" |
浏览器应该会自动打开,如果浏览器没有打开可以根据提示复制地址访问。如果浏览器登录了 OneDrive 的话会直接显示授权确认信息,如果没有登录的话会弹出登录页面,登录 OneDrive 后也会显示授权确认信息。
选择 接受 后在本地命令行会显示一串 JSON 格式的授权信息,复制授权信息包括首尾的 {} ,到 Linux 终端粘贴。
然后是选择 OneDrive 的类型,如下:
1 | Choose a number from below, or type in an existing value |
输入 1
然后会显示找到的 OneDrive 账户,如下:
1 | Found 1 drives, please select the one you want to use: |
根据提示输入序号,
这里会根据你输入的序号查找账户,如下:
1 | Found drive 'root' of type 'business', URL: https://xxx-my.sharepoint.com/personal/changbin_xxx_onmicrosoft_com/Documents |
确认无误后输入 y ,
接着会显示你选择的配置信息,确认无误后输入 y 保存配置。
1 | Current remotes: |
经过上面的设置后,我们就成功地将Rclone连接挂载到OneDrive网盘啦。
二、挂载到 vps
首先新建一个文件夹用于挂载:
1 | mkdir /onedrive |
开始挂载:
1 | rclone mount onedrive: /onedrive --allow-other --allow-non-empty --vfs-cache-mode writes --daemon |
其中 onedrive 是 rclone 配置时输入的配置名称,/onedrive 是挂载目录,–daemon 是指后台运行。
查看磁盘空间,检查是否挂载成功:
1 | df -h |
三、编写同步脚本
这个脚本也不算麻烦,首先输入下方命令新建同步脚本。
1 | vim rclone.sh |
按Insert键进入编辑模式,粘贴以下三条内容。
1 |
|
然后按Esc键退出编辑模式,输入:wq保存并退出。
脚本首行是注释,上面的脚本只包含两条命令,第二行是将/www/backup/database目录及里面的数据库备份文件,同步到OneDrive的bak/database文件夹里。第三行是同步网站备份文件。
接着为新建的脚本增加执行权限。
1 | chmod +x rclone.sh |
设置定时任务
脚本编写成功后,需要设置定时任务来运行脚本,才能完成自动备份。
在设置之前,首先将VPS服务器的时区设置为东八区,与我们的作息相同。如果你是国内的VPS或云服务器通常不需要设置。
1 | cp /usr/share/zoneinfo/Asia/Chongqing /etc/localtime |
输入y确定。
接下来我们设置定时任务,输入下方命令。
1 | crontab -e |
按Insert键进入编辑模式,在尾部添加一行即可。
1 | 35 1 * * * /root/rclone.sh >> /root/rclone.log 2>&1 |
这行内容的意思是,每天凌晨1点35分,运行rclone.sh脚本,将网站和数据库备份文件同步到OneDrive网盘。
然后等到第二天,登录OneDrive盘就能看到备份文件已经同步过来了。
四、创建 OneDrive API(注册微软开发者E5账户)
参考https://macin.top/posts/75823327/
1.获取 client_id
首先访问 Microsoft Azure 应用注册,登录账号后点击应用注册
点击左上角的新注册
如图所示进行配置,名称可以随便写,账户类型选择第三项
点击注册后可以看到你的应用的相关信息,复制好 应用程序 (客户端) ID ,这个就是 client_id
2.获取 client_secret
依次点击证书和密码,新客户端密码,在截止期限中将时间选择为最长(即两年)
然后就可以看见值和机密 ID,我们只需要记录下值就可以
3.添加 API 权限
依次点击 API 权限,添加权限,Microsoft Graph,在右边栏搜索并添加权限。
需要 Files.Read, Files.ReadWrite, Files.Read.All, Files.ReadWrite.All, offline_access, User.Read 这几项
4.添加身份验证
依次点击身份验证,添加平台,Web
在重定向 URI 中输入http://localhost
OneDrive API 创建完成。