rclone的折腾
起因
用过一些私人云盘(cloudreve、alist、nextcloud)。但是我同时还有RSS离线下载的需求。对于我来说,alist支持的超多云盘挂载无疑是我多网盘管理的最佳之选。但是离线下载功能就太蛋疼了。
2023_08_23:
昨天在NodeSeek上正巧看见有人吐槽alist的上传功能太辣鸡了,他在使用离线下载,内容下载到机器后上传总出错(在群里看有大佬的阿里云1G带宽机器上传一千个只出错几个,看来也许只是对小带宽机器不友好?不过我是没有那实力了哈哈),他就说转战cloudreve用同样的服务器做离线下载,上传环节没出过错。
不仅对带宽要求这么高,还对网络质量要求这么高吗,还是说是onedrive的问题。
在这个帖子下面有人就说cloudreve限制太多(离线下载器只能使用aria2,支持的云存储太少之类的)。这点我也是深感体会。alist的超多云存储驱动支持太方便了,并且对于onedrive来说,cloudreve在导入云盘目录之后。通过非cloudreve操作onedrive它是获取不到变化的。alist的刷新令牌模式相较之下就好很多。
不过这也是两家的特色吧,cloudreve适合开私人小云盘盈利,不会直接操作存储器的场景。
alist的话更适合个人使用,但是如上所述,它的上传功能对于小机器来说实在是太难用了。
言归正传,评论有个人提到了rclone挂载云盘,这样的话上传失败率非常小(我目前没遇到过失败情况),并且支持的下载器也几乎等于支持所有(因为云盘挂载后在本地有目录)。我一想,确实是这样的。于是脑袋里
就有了一个想法:alist只做前端展示,离线下载功能就交给服务器内部使用rclone+qbit来完成吧。
开始实践
安装rclone
这一步跟着官网走,执行官方提供的脚本就好了。
sudo -v ; curl https://rclone.org/install.sh | sudo bash
但即便如此简单,我也遇到了问题:执行脚本的时候终端始终不执行,并且有报错提醒。期初我也很懵逼,寻思怎么一个curl命令还能有幺蛾子。后来翻译了报错才知道,这台服务器上的debian貌似是精简版的。没有sudo?我整一个蚌埠住了,我绷不住是应为我自己太傻逼了,也因为这个服务器厂商提供的垃圾系统。但奈何它便宜呀哈哈。在执行下面的命令安装好sudo后就没问题了
apt install sudo
使用rclone添加云盘
终端执行来配置、添加云盘
rclone config
根据提示按n回车开始添加,首先会让你输入配置名称,可以随便起。但最好是能让自己知道是哪个,我这里就叫test,之后按下回车进行下一步
到这个界面就是选择哪家云盘。有好多,找到自己要添加的输入前面的数字(注意这个数字有可能会发生变化,请根据实际情况输入)我这边要添加的是onedrive,对应的数字是31。
之后会要求输入azure应用的客户端id和客户端秘钥(这两步可以跳过,跳过的话就是使用rclone的应用,推荐还是自己去注册一个应用,听说自己注册的应用速度会更快)
我这里演示就都不输入了
然后会让你选onedrive的账号地区,根据实际情况来选,我的是全球的,就选1
之后这一步直接默认即可
来到下图这一步就要注意了,如果是linux服务器的话请选n,windowd的话选y。选y会弹出浏览器让你登录微软账号,之后就会自动配置好。
选n的话会给你段命令,让你在windows机器上也下载一个rclone(同版本)。在windows机器上执行这段命令
因为我这里是linux服务器,我就选n。之后复制这段命令到windows机器上。来到rclone文件夹,按住shift鼠标右键,用powershell打开。输入./然后粘贴上这段文字
之后会弹出浏览器,登录账号后浏览器显示Success!我们回到powershell。将得到的这一段全部都复制到ssh终端里按回车
输入提交token后报错请看这里
如果这一步将得到的代码粘贴回车之后报错,或者之后的步骤有报错没成功,这里有个跟更简单暴力的方式:可以直接在windows机器上进行上面的所有步骤,再将windows上的配置文件直接复制到linux机器上也是可以的(可以直接复制整个文件,也可以打开文件将内容复制到服务器上)
windows配置文件位置:C:\Users{用户名}\AppData\Roaming\rclone\rclone.conf
linux配置文件位置:/root/.config/rclone/rclone.conf
linux配置文件可以使用
rclone config paths
命令查看,得到的结果中Config file就是了
替换完成后直接添加完成了,直接前往完成后执行进行检查
来查看添加的存储
之后会提示让你选择存储类型,我这里是onedrive for Business,就选第一个
后面的全都直接回车就好了
完成后执行
rclone config
应该就能看到刚刚添加的存储了
挂载云盘到服务器
在挂载之前,先创建空文件夹用来作为挂载目录
mkdir /CloudStorage/AdminOnedrive
使用以下命令挂载:
rclone mount <云盘存储名称>:<要挂载云盘哪个路径> <挂载到本地哪个目录> --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000
举例:
rclone mount AdminOnedrive:/ /CloudStorage/AdminOnedrive --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000 --vfs-cache-mode full --cache-dir /256dataDisk/rcloneCacheAndTemp/Cache --transfers=10 --checkers=50 --vfs-cache-max-age 1h
意思是将云端存储名为AdminOnedrive的云盘的根目录挂载到本地的/CloudStorage/PanOnedrive目录下。
对比上面的命令,增加了一些参数。以下是几个我自己用的参数对照表:
参数名称 | 作用 |
---|---|
--vfs-cache-mode | 设置为full开启缓存 |
--cache-dir | 设置缓存路径,可解决默认缓存路径为系统盘导致系统盘爆满,使用绝对路径 |
--transfers | 同时传输数数量 |
--vfs-cache-max-age 1h | 设置最大缓存时间 |
挂载可能出现的问题报错
提示
Fatal error: failed to mount FUSE fs: fusermount: exec: "fusermount3": executable file not found in $PATH
解决方法:
apt-get install fuse
apt-get install fuse3
挂载完成后使用下面的命令查看是否挂载成功
df -h
创建开机自启
1.首先进入到系统自己文件的文件夹里
cd /etc/systemd/system
2.创建新的守护文件
touch {文件名}.service
例如:
touch rclone.service
3.编写守护文件:
vi rclone.service
修改下面代码中的ExecStart=。等于号后面替换成自己的命令。然后将下面的命令粘贴进去,输入法英文状态下按esc后按shift+: 输入wq 保存并退出
[Unit]
Description=Rclone
AssertPathIsDirectory=LocalFolder
After=network-online.target
[Service]
Type=simple
ExecStart=rclone mount AdminOnedrive:/ /CloudStorage/AdminOnedrive --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000 --vfs-cache-mode full --cache-dir /256dataDisk/rcloneCacheAndTemp/Cache --transfers=10 --checkers=50 --vfs-cache-max-age 1h --vfs-cache-max-size 80G
ExecStop=fusermount -u LocalFolder
Restart=on-abort
User=root
[Install]
WantedBy=default.target
EOF
开启开机自启
systemctl enable rclone
立即执行启动
systemctl startrclone
停止
systemctl enable rclone
重启
systemctl restart rclone
可以设置多个自启动挂载,使用文件名区分,分别设置