Rclone 挂载 OneDrive (MSDN E5) 全流程教程
本教程适用于将 Microsoft 365 E5 开发者订阅(MSDN)的 5TB OneDrive 空间挂载为 Linux 本地磁盘。当然也适用其他版本的空间挂载,但是需要自己根据实际情况做出修改。

一、 基础准备在开始之前,请确保你拥有 MSDN 管理员账号,并在 Linux 服务器上安装 fuse3(挂载必需依赖)。
# 1. 安装 Rclone
curl https://rclone.org/install.sh | sudo bash
# 2. 安装 FUSE 依赖
# Ubuntu / Debian:
apt update && apt install -y fuse3
# CentOS / AlmaLinux:
yum install -y fuse3
# 3. 修正 FUSE 权限配置(允许非 root 用户访问)
sed -i 's/#user_allow_other/user_allow_other/g' /etc/fuse.conf
二、 Rclone 配置步骤
执行 rclone config,
按照以下逻辑操作:n) New remote: 输入名称 onedrive
Storage Type: 输入 42 (Microsoft OneDrive)
client_id/client_secret: 直接回车跳过
region: 输入 1 (global)
Edit advanced config: 输入 n
Use auto config: 输入 n (因为是远程服务器)获取
Token:在你的本地电脑
- (Windows/Mac)下载 Rclone。
- 在本地终端运行:
rclone authorize "onedrive"。 - 浏览器弹出授权,登录 MSDN 账号并确认。
- 将本地终端生成的 {"access_token":...} 整个 JSON 字符串复制。回到服务器粘贴。
config_type: 输入 1 (OneDrive Personal or Business)
Drive Selection: 搜索到 5TB 盘后,输入序号 0。
Confirm: 输入 y 确认,最后输入 q 退出。
三、 手动挂载测试创建挂载点并尝试手动挂载,确认没有报错:
# 创建挂载点 mkdir -p /mnt/onedrive # 手动挂载命令(测试用) rclone mount onedrive:/ /mnt/onedrive \ --vfs-cache-mode writes \ --vfs-cache-max-size 50G \ --allow-other \ --header "Referer:https://onedrive.live.com/" \ --vfs-read-chunk-size 16M \ --vfs-read-chunk-size-limit 1G \ --buffer-size 64M \ --daemon
使用 df -h 查看是否出现了 5TB 的磁盘。
四、 配置开机自动挂载 (Systemd)为了保证服务器重启后自动挂载,建议配置系统服务。
1. 创建服务文件
nano /etc/systemd/system/rclone.service
2. 粘贴以下内容(请确保 /usr/bin/rclone 路径正确,可用 which rclone 查看)
[Unit]
Description=Rclone OneDrive Mount
After=network-online.target
[Service]
Type=simple
# 核心挂载命令
ExecStart=/usr/bin/rclone mount onedrive:/ /mnt/onedrive \
--vfs-cache-mode writes \
--vfs-cache-max-size 50G \
--vfs-cache-max-age 24h \
--allow-other \
--header "Referer:https://onedrive.live.com/" \
--vfs-read-chunk-size 16M \
--vfs-read-chunk-size-limit 1G \
--buffer-size 64M \
--dir-cache-time 5m \
--low-level-retries 10
# 停止时卸载
ExecStop=/bin/fusermount3 -qzu /mnt/onedrive
Restart=on-failure
RestartSec=10
User=root
[Install]
WantedBy=multi-user.target
3. 启用服务
//先卸载之前手动挂载的路径 fusermount3 -qzu /mnt/onedrive //启用并启动服务 systemctl daemon-reload systemctl enable rclone systemctl start rclone //检查状态 systemctl status rclone
五、 常用维护指令汇总
目的 命令验证 5TB 容量 rclone about onedrive:
查看实时挂载日志 journalctl -u rclone -f
重启挂载服务 systemctl restart rclone
强制卸载挂载点 fusermount3 -qzu /mnt/onedrive
清空 OneDrive 回收站 建议去网页端操作,可释放 Trashed 占用的配额
Microsoft Rewards Script Docker 部署完整教程

本教程介绍如何在 Linux 服务器使用 Docker 部署
thenetsky/microsoft-rewards-script 自动完成 Microsoft Rewards 搜索任务。
先决条件
你需要先安装:docker + compose
安装过程
先获取脚本
git clone https://github.com/TheNetsky/Microsoft-Rewards-Script.git
cd Microsoft-Rewards-Script添加配置和账号
· 将 src/accounts.example.json复制或重命名为 src/accounts.json 并添加您的凭证
· 复制或重命名 src/config.example.json 为 src/config.json 并自定义你的偏好设置
accounts.json
[
{
"email": "微软账户",
"password": "密码",
"totpSecret": "",
"recoveryEmail": "",
"geoLocale": "CN",
"langCode": "zh-CN",
"proxy": {
"proxyAxios": false,
"url": "",
"port": 0,
"username": "",
"password": ""
},
"saveFingerprint": {
"mobile": true,
"desktop": true
}
},
{
"email": "微软账户2",
"password": "密码",
"totpSecret": "",
"recoveryEmail": "",
"geoLocale": "CN",
"langCode": "zh-CN",
"proxy": {
"proxyAxios": false,
"url": "",
"port": 0,
"username": "",
"password": ""
},
"saveFingerprint": {
"mobile": true,
"desktop": true
}
}
]config.json
{
"baseURL": "https://rewards.bing.com",
"sessionPath": "sessions",
"headless": true,
"clusters": 1,
"errorDiagnostics": false,
"workers": {
"doDailySet": true,
"doSpecialPromotions": true,
"doMorePromotions": true,
"doPunchCards": true,
"doAppPromotions": true,
"doDesktopSearch": true,
"doMobileSearch": true,
"doDailyCheckIn": true,
"doReadToEarn": true
},
"searchOnBingLocalQueries": false,
"globalTimeout": "30sec",
"searchSettings": {
"scrollRandomResults": false,
"clickRandomResults": false,
"parallelSearching": true,
"queryEngines": ["google", "wikipedia", "reddit", "local"],
"searchResultVisitTime": "10sec",
"searchDelay": {
"min": "30sec",
"max": "1min"
},
"readDelay": {
"min": "30sec",
"max": "1min"
}
},
"debugLogs": false,
"consoleLogFilter": {
"enabled": false,
"mode": "whitelist",
"levels": ["error", "warn"],
"keywords": ["starting account"],
"regexPatterns": []
},
"proxy": {
"queryEngine": true
},
"webhook": {
"discord": {
"enabled": false,
"url": ""
},
"ntfy": {
"enabled": false,
"url": "",
"topic": "",
"token": "",
"title": "Microsoft-Rewards-Script",
"tags": ["bot", "notify"],
"priority": 3
},
"webhookLogFilter": {
"enabled": false,
"mode": "whitelist",
"levels": ["error"],
"keywords": ["starting account", "select number", "collected"],
"regexPatterns": []
}
}
}重命名compose.yaml为compose.yaml1,然后nano compose.yaml
services:
microsoft-rewards-script:
image: ghcr.nju.edu.cn/thenetsky/microsoft-rewards-script:latest
container_name: microsoft-rewards-script
restart: unless-stopped
volumes:
- /root/Microsoft-Rewards-Script/src:/usr/src/microsoft-rewards-script/dist/config
- /root/Microsoft-Rewards-Script/sessions:/usr/src/microsoft-rewards-script/dist/browser/sessions
- /root/.cache/ms-playwright:/usr/src/microsoft-rewards-script/node_modules/patchright-core/.local-browsers
environment:
- TZ=Asia/Shanghai
- NODE_ENV=production
# 每天早上7点执行
- CRON_SCHEDULE=0 7 * * *
# 容器启动立即执行一次
- RUN_ON_START=true
# 是否跳过随机等待
- SKIP_RANDOM_SLEEP=false
# 浏览器路径
- PATCHRIGHT_BROWSERS_PATH=/usr/src/microsoft-rewards-script/node_modules/patchright-core/.local-browsers
healthcheck:
test: ["CMD", "sh", "-c", "pgrep cron > /dev/null || exit 1"]
interval: 60s
timeout: 10s
retries: 3
start_period: 30s
security_opt:
- no-new-privileges:true建议这三个文件都使用文章提供的
启动容器
docker compose up -d如果可以,建议安装好Portainer -ce面板,方便查看日志docker volume create portainer_data
docker run -d \
-p 9000:9000 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest可能出现的问题
提示未安装浏览器
Executable doesn't exist
方法一 宿主机直接安装
npmmirror:
export PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright华为云镜像:
export PLAYWRIGHT_DOWNLOAD_HOST=https://mirrors.huaweicloud.com/playwright安装浏览器:
npx patchright install chromium浏览器会下载到:
~/.cache/ms-playwright
查看:
ls ~/.cache/ms-playwright正常应该看到:
chromium-xxxx
chromium_headless_shell-xxxxDocker 会通过挂载使用该浏览器。
docker安装浏览器
一条命令搞定
docker exec -it -e PATCHRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright/ microsoft-rewards-script npx patchright install如果出现Missing libraries
安装过程中可能会出现网络慢的情况,我们更新一下源就行了
docker exec -it -u root microsoft-rewards-script sh -c "sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources && apt-get update"docker安装方式:
docker exec -it microsoft-rewards-script npx patchright install-deps
宿主机安装方式:
docker exec -it microsoft-rewards-script npx patchright install-deps如果没有安装nodejs那么就用这个
sudo apt-get update && sudo apt-get install -y \
libgbm1 libasound2 libpango-1.0-0 liblibcairo2 libicu72 \
libnss3 libxcursor1 libxss1 libxcomposite1 libxdamage1 \
libxrandr2 libxtst6 libatk1.0-0 libatk-bridge2.0-0 \
libgtk-3-0 libx11-xcb1 libxcb-dri3-0 libdrm2 libvpx7 用 rclone 把 R2 绑定到本地目录
突然想用一个简单的方法可以直接修改cloudflare R2储存的html和txt文件,想了一下用rclone+宝塔面板或许更简单,于是开始了这部分内容,这里只是把r2储存挂载到服务器的步骤……
全篇文章均是以debian/ubuntu为主,其他系统自行替换安装命令……
安装 rclone
Debian / Ubuntu:
curl https://rclone.org/install.sh | bash
创建 R2 的配置
执行:
rclone config
选择:n 新建一个,这里仔细对照一下括号内的内容
n) New remote
name: r2
然后依次:(以下内容要自己仔细看哟)
Storage: s3(Amazon S3 Compliant Storage Providers including AWS……)
provider: Cloudflare(Cloudflare R2 Storage)
env_auth: false(Enter AWS credentials in the next step.)
access_key_id: <你的R2 Access Key>
secret_access_key: <你的R2 Secret Key>
region: auto(1)
endpoint: https://12*****f799e.r2.cloudflarestorage.com到这里基本就算搞定了
Configuration complete.
Options:
- type: s3
- provider: Cloudflare
- access_key_id: e141d989a****dfbff4da9
- secret_access_key: 649fcef77cd84a45e29b66c****71003188e01f0417
- region: auto
- endpoint: https://122393bf79ab9****ba1ef799e.r2.cloudflarestorage.com
Keep this "r2" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> 选择Y
然后q) Quit config
创建挂载目录
mkdir -p /mnt/r2
安装 rclone FUSE 支持(必须)
Debian / Ubuntu:
apt install fuse3 -y
CentOS:
yum install fuse -y
fusermount -u /mnt/r2 2>/dev/null
rclone mount r2:你的r2bucket(如我这里是img那么就是img) /mnt/r2 --allow-other --vfs-cache-mode full --daemon测试是否获取成功
ls -lah /mnt/r2
设置开机自启动(我是设置的一个脚本然后添加到启动项)
通过rc.local设置自启动
创建启动脚本
nano /usr/local/bin/rclone_r2_mount.sh
写入:
#!/bin/bash
# 延迟,防止网络未完全启动
sleep 10
/usr/bin/rclone mount r2:你的r2bucket /mnt/r2 \
--allow-other \
--vfs-cache-mode full \
--vfs-cache-max-age 24h \
--vfs-cache-max-size 1G \
--dir-cache-time 12h \
--poll-interval 5m \
--log-file /var/log/rclone-r2.log \
--log-level INFO &保存:Ctrl+X → Y → Enter
赋予执行权限:
chmod +x /usr/local/bin/rclone_r2_mount.sh
编辑 rc.local
nano /etc/rc.local
如果不存在,创建:
内容如下:
#!/bin/bash
/usr/local/bin/rclone_r2_mount.sh &
exit 0保存 → 赋权(这一步也许有些不需要操作):chmod +x /etc/rc.local
通过systemctl设置自启动
创建启动文件nano /etc/systemd/system/rclone-r2.service
内容如下
[Unit]
Description=rclone-r2-mount
After=network-online.target
[Service]
Type=simple
User=root
# 这里的 r2:image 对应你刚才创建的配置名和桶名
ExecStart=/usr/bin/rclone mount r2:你的r2bucket /mnt/r2 \
--allow-other \
--vfs-cache-mode writes \
--vfs-cache-max-age 24h \
--vfs-cache-max-size 10G \
--config /root/.config/rclone/rclone.conf
# 停止时自动卸载,防止挂载点残留
ExecStop=/bin/fusermount -qzu /mnt/r2
Restart=on-failure
[Install]
WantedBy=multi-user.target启动并设置自启动
# 重新加载配置
systemctl daemon-reload
# 启动服务
systemctl start rclone-r2
# 设置开机自启
systemctl enable rclone-r2 用 BorgBackup/Restic 增量备份Linux文件
以我的环境来作为示例:
我的 NAS 信息:
NAS IP:10.0.2.12
NAS 用户名:etotakeo
NAS 密码:ng057720
NAS 共享目录:Ext_Flies/Linux备份(自己进去nas确定路径)
`root@DiskStation:/volume2/Ext_Files/Linux整盘备份# pwd
/volume2/Ext_Files/Linux整盘备份`
假设 NAS 用的是 SMB 共享(群晖/威联通常见)
这说明你在 NAS 本机(DiskStation) 上看到的目录。
如果你要从 Linux 主机 上挂载这个目录,通常需要通过 SMB 或 NFS 协议 访问。
比如:
SMB 地址://10.0.2.12/Ext_Files/Linux整盘备份
NFS 地址(如果你在 DSM 里启用了 NFS):10.0.2.12:/volume2/Ext_Files/Linux整盘备份
创建挂载点
sudo mkdir -p /mnt/nas挂载 NAS
把 NAS SMB 路径挂载到 /mnt/nas:
sudo mount -t cifs //10.0.2.12/Ext_Flies/Linux备份 /mnt/nas \
-o username=etotakeo,password=ng057720,vers=3.0,iocharset=utf8iocharset=utf8 保证中文目录不会乱码。
确认挂载成功:
df -h | grep nas初始化 Restic 仓库
先设置密码(写入文件,避免每次输入):
echo "your-restic-password" > /root/.restic-pw
chmod 600 /root/.restic-pw初始化仓库:
export RESTIC_REPOSITORY=/mnt/nas
export RESTIC_PASSWORD_FILE=/root/.restic-pw
restic init注意:为了避免备份一些不必要或会导致问题的目录(例如 /proc、/sys、/dev 等),我们需要排除掉它们。
新建一个排除文件:
nano /root/restic-excludes.txt内容写入(常见排除目录):
/dev/*
/proc/*
/sys/*
/tmp/*
/run/*
/mnt/*
/media/*
/lost+found执行备份:
restic backup / --exclude-file=/root/restic-excludes.txt这样就会把系统整盘数据备份到 NAS 的 /mnt/nas 仓库。
设置定时备份(每天一次)
编辑 cron 任务:
crontab -e添加一行(每天凌晨 2 点执行一次):
0 2 * * * RESTIC_REPOSITORY=/mnt/nas RESTIC_PASSWORD_FILE=/root/.restic-pw /usr/bin/restic backup / --exclude-file=/root/restic-excludes.txt这样每天都会自动备份一次。
每个月备份一次,最多只保留5份
0 3 1 * * RESTIC_REPOSITORY=/mnt/nas RESTIC_PASSWORD_FILE=/root/.restic-pw /usr/bin/restic backup / --exclude-file=/root/restic-excludes.txt && RESTIC_REPOSITORY=/mnt/nas RESTIC_PASSWORD_FILE=/root/.restic-pw /usr/bin/restic forget --keep-last 5 --prune查看已有备份快照
restic snapshots如果这里运行的时候提示:
Fatal: Please specify repository location (-r or --repository-file)
那么试试
restic -r /mnt/nas --password-file /root/.restic-pw snapshots可以看到每次备份的时间和 ID。
恢复数据
你可以按需恢复:
恢复整个系统到某个目录(比如 /restore):
restic restore latest --target /restore这样会把最近的整盘备份恢复到 /restore 目录。
恢复单个文件或目录(例如 /etc/hosts):
restic restore latest --target /restore --include /etc/hosts恢复后你可以从 /restore/etc/hosts 拷贝出来。
NAS 再同步到 OneDrive
你已经说 NAS 会自动备份到 OneDrive,那 restic 在 NAS 上生成的备份文件也会自动被同步上去,等于实现了 本地 + NAS + 云端 三重备份。