使用 Aria2 + rclone 遇到的一些问题

 

在发布了 Aria2 + rclone 实现 Google Drive 离线下载 后发现很多朋友遇到了一些问题,在本文中我将优化它们。

什么问题?

我们使用 aria2 下载完文件后在 /data/Download 目录,然后执行了一个脚本将文件移动到 /data/GoogleDrive 目录(该目录是挂载目录)。这时候文件会自动的同步到谷歌云盘,但是问题来了,假设我们的 VPS 只有 10G 硬盘,这个挂载目录不能一直存文件吧,否则的话不就 GG 了。当时博主确实没考虑到这个问题,所以我们可以换一种思路去解决它。

rclone 命令

先来看看 rclone 这个工具的常用命令:

rclone config – 以控制会话的形式添加rclone的配置,配置保存在.rclone.conf文件中。

rclone copy – 将文件从源复制到目的地址,跳过已复制完成的。

rclone sync – 将源数据同步到目的地址,只更新目的地址的数据。

rclone move – 将源数据移动到目的地址。

rclone delete – 删除指定路径下的文件内容。

rclone purge – 清空指定路径下所有文件数据。

rclone mkdir – 创建一个新目录。

rclone rmdir – 删除空目录。

rclone check – 检查源和目的地址数据是否匹配。

rclone ls – 列出指定路径下所有的文件以及文件大小和路径。

rclone lsd – 列出指定路径下所有的目录/容器/桶。

rclone lsl – 列出指定路径下所有文件以及修改时间、文件大小和路径。

rclone md5sum – 为指定路径下的所有文件产生一个md5sum文件。

rclone sha1sum – 为指定路径下的所有文件产生一个sha1sum文件。

rclone size – 获取指定路径下,文件内容的总大小。.

rclone version – 查看当前版本。

rclone cleanup – 清空remote。

rclone dedupe – 交互式查找重复文件,进行删除/重命名操作。

 

我们可以看使用 rclone move 就可以直接将 aria2 下载的文件上传上去;

取消挂载

因为这个思路是直接移动,所以之前的挂载就不用了,我们取消挂载。

rm -f /etc/init.d/rcloned
fusermount -u /data/GoogleDrive

 

然后删除 vim /etc/rc.d/rc.local 中的 bash /etc/init.d/rcloned start 这一行。

这样就完成了取消挂载。

修改脚本

这个时候就不能用之前的脚本了,我们直接使用以下脚本。

> /root/rcloneupload.sh
vim /root/rcloneupload.sh

 

将之前的上传脚本清空后重新编辑

#!/bin/bash

filepath=$3	 #取文件原始路径,如果是单文件则为/Download/a.mp4,如果是文件夹则该值为文件夹内第一个文件比如/Download/a/1.mp4
path=${3%/*}	 #取文件根路径,如把/Download/a/1.mp4变成/Download/a
downloadpath='/data/Download'	#Aria2下载目录
name='codesofun' #配置Rclone时的name
folder='/share'	 #网盘里的文件夹,如果是根目录直接留空
MinSize='10k'	 #限制最低上传大小,默认10k,BT下载时可防止上传其他无用文件。会删除文件,谨慎设置。
MaxSize='15G'	 #限制最高文件大小,默认15G,OneDrive上传限制。

if [ $2 -eq 0 ]; then exit 0; fi

while true; do
if [ "$path" = "$downloadpath" ] && [ $2 -eq 1 ]	#如果下载的是单个文件
    then
    rclone move -v "$filepath" ${name}:${folder} --min-size $MinSize --max-size $MaxSize
    rm -vf "$filepath".aria2	#删除残留的.aria.2文件
    exit 0
elif [ "$path" != "$downloadpath" ]	#如果下载的是文件夹
    then
    while [[ "`ls -A "$path/"`" != "" ]]; do
    rclone move -v "$path" ${name}:/${folder}/"${path##*/}" --min-size $MinSize --max-size $MaxSize --delete-empty-src-dirs
    rclone delete -v "$path" --max-size $MinSize	#删除多余的文件
    rclone rmdirs -v "$downloadpath" --leave-root	#删除空目录,--delete-empty-src-dirs 参数已实现,加上无所谓。
    done
    rm -vf "$path".aria2	#删除残留的.aria2文件
    exit 0
fi
done

 

需要修改几个地方:

  • downloadpath:填写 aria2 的下载目录
  • name:填写 rclone 配置的名称
  • folder:填写谷歌云盘的文件夹名称,根目录填 / 即可

FAQ

如何实现多个网盘之间文件拷贝?

我们使用 rclone config 可以创建一个名为 codesofun 的配置,当然也能创建多个,你需要再创建第二个网盘的配置,即便是 Google Drive 同步到 OneDrive 也是可以的,假设第二个名字为 hello

执行命令 rclone copy codesofun:share hello:share 即可。

rclone copy source:sourcepath dest:destpsth

rclone copy 复制总是指定路径下的数据;而不是当前目录。 –no-traverse 标志用于控制是否列出目的地址目录。

 

如果文件比较多或者较大的话建议使用 screen 命令开启一个会话执行,这里使用 share 目录的原因是一个习惯而已,不加目录就是整个网盘咯。

 

浏览器访问 ip 出现 403?

 

权限不够

解决方法 chmod -R 755 /data/www

 

开启了 SELinux

使用 /usr/sbin/sestatus -v 查看是否开启,输出 enable 则为开启。

解决方法 修改 /etc/selinux/config 将 SELINUX=enforcing 改为 SELINUX=disabled,然后使用 reboot 重启系统。

AriaNg 一直连接不成功

AriaNg 是一个网页程序,它的配置主要是 RPC 相关的,这配置里也就是一个 IP、端口和密钥。

配置后打开浏览器的开发者工具可以在 network 选项里看到不停的会有请求发送,正常会返回 200 状态码。一般如果连接不上很可能就是防火墙拦截或者 aria2 根本没开启,因为只有这样才会导致网站端无法访问到,其他更复杂的原因要看具体情况。

 

我们可以在自己本地使用 telnet 命令测试一下端口是否暴露:

telnet ip 6800

 

这里的 ip 是你 VPS 的外网ip,端口默认是 6800 如果修改了就用自己修改的。正常情况会得到这样的输出:

telnet 66.42.xxx.232 6800
Trying 66.42.xxx.232...
Connected to 66.42.xxx.232.vultr.com.
Escape character is '^]'.

 

我们随便写个端口肯定不通,会得到这样的输出:

telnet 66.42.xxx.232 6899
Trying 66.42.xxx.232...
telnet: connect to address 66.42.xxx.232: Connection refused
telnet: Unable to connect to remote host

 

解决方法是在 VPS 上开放这个端口或关闭防火墙

systemctl stop firewalld

Mac 怎么安装使用 aria2 本地下载?

下载 aria2gui 配合插件使用即可,可参考使用说明。

 

 

@NSTUN

NSTUN - 版权声明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 如果你也有好源码或者教程,可以到审核区发布,分享有金币奖励和额外收入!
3. 本站提供的源码、软件、文档等其他资源,都不包含技术服务请大家谅解!
4. 如有链接无法下载、非对应文件或失效,请联系管理员处理!
5. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
6. 请联系管理员nstuni@163.com


弄事堂-NSTUN » 使用 Aria2 + rclone 遇到的一些问题

发表评论