使用Aria2+Rclone来进行离线下载

准备

  1. 一台有一定空闲硬盘空间,流量无限制的VPS;
  2. 较为多空间的网盘,例如onedrive、google drive等等;

开始

1. 如果需要,可以先优化下网络(国外主机建议优化)

这里介绍的是“一键安装最新内核并开启 BBR 脚本”1

脚本适用环境

系统支持:CentOS 6+,Debian 7+,Ubuntu 12+
虚拟技术:OpenVZ 以外的,比如 KVM、Xen、VMware 等
内存要求:≥128M

使用方法

使用root用户登录,运行以下命令:

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh

安装完成后,脚本会提示需要重启 VPS,输入 y 并回车后重启。
重启完成后,进入 VPS,验证一下是否成功安装最新内核并开启 TCP BBR,输入以下命令:

sysctl net.ipv4.tcp_available_congestion_control

返回值一般为:net.ipv4.tcp_available_congestion_control = bbr cubic reno

sysctl net.ipv4.tcp_congestion_control

返回值一般为:net.ipv4.tcp_congestion_control = bbr

sysctl net.core.default_qdisc

返回值一般为:net.core.default_qdisc = fq

lsmod | grep bbr

返回值有 tcp_bbr 模块即说明 bbr 已启动。注意:并不是所有的 VPS 都会有此返回值,若没有也属正常。

2. 安装rclone

rclone2能够方便的管理 google drive 与 OneDrive for Business以及FTP等网盘,支持挂载盘符与命令MOVE,COPY,SYNC,MKDIR等操作。

脚本安装

有一些可能会用到的,也装下,避免回过头来装

apt update
apt install wget unzip net-tools bc curl sudo -y

要在Linux / macOS / BSD系统上安装rclone,请运行:

curl https://rclone.org/install.sh | sudo bash

对于测试版安装,请运行:

curl https://rclone.org/install.sh | sudo bash -s beta

脚本首先会检查已安装的版本,如果不需要,将不会重新下载

rclone配置

由于rclone对于Linux系统来说,采用的是fuse的文件格式,所以先安装下fuse:

  • centos系统

64位安装

yum install fuse-devel.x86_64 fuse.x86_64

32位安装

yum install fuse-devel.i686 fuse.i686
  • debain/ubuntu系统
apt-get install -y fuse

下面开始配置:
因为OneDrive for Business用的多,所以暂时以此为例子。

rclone config

然后选择N) New remote 返回如下

1 / Amazon Drive
   \ "amazon cloud drive"
 2 / Amazon S3 (also Dreamhost, Ceph, Minio)
   \ "s3"
 3 / Backblaze B2
   \ "b2"
 4 / Box
   \ "box"
 5 / Dropbox
   \ "dropbox"
 6 / Encrypt/Decrypt a remote
   \ "crypt"
 7 / FTP Connection
   \ "ftp"
 8 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
 9 / Google Drive
   \ "drive"
10 / Hubic
   \ "hubic"
11 / Local Disk
   \ "local"
12 / Microsoft Azure Blob Storage
   \ "azureblob"
13 / Microsoft OneDrive
   \ "onedrive"
14 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
15 / QingClound Object Storage
   \ "qingstor"
16 / SSH/SFTP Connection
   \ "sftp"
17 / Yandex Disk
   \ "yandex"
18 / http Connection
   \ "http"

选择13 Microsoft OneDrive,会出现。

Microsoft App Client Id - leave blank normally.
client_id> 
Microsoft App Client Secret - leave blank normally.
client_secret>

这两个默认回车,直接跳过。

Remote config
Choose OneDrive account type?
 - Say b for a OneDrive business account
 - Say p for a personal OneDrive account
b) Business
p) Personal
b/p> 

在此选择b Bussiness,返回

Use auto config?
 - Say Y if not sure
 - Say N if you are working on a remote or headless machine
y) Yes
n) No

此处一定要选择N,因为大多数linux没有可视窗口,然后返回。

For this to work, you will need rclone available on a machine that has a web browser available.
Execute the following on your machine:
        rclone authorize "onedrive"
Then paste the result below:

在此,需要用本机Windows下,下载rclone for windows,然后输入rclone authorize “onedrive”,登录OneDrive获得result,把获得的result黏贴在这就可以了。
注意OneDrive for Business 目前有15G单文件的限制。
后续按照操作步骤,退出就OK。

常用命令
## 文件上传
rclone copy /home/backup gdrive:backup # 本地路径 配置名字:谷歌文件夹名字
### 文件下载
rclone copy gdrive:backup /home/backup
### 列表
rclone ls gdrive:backup
rclone lsl gdrive:backup # 比上面多一个显示上传时间
rclone lsd gdrive:backup # 只显示文件夹
### 新建文件夹
rclone mkdir gdrive:backup
### 挂载
rclone mount gdrive:mm /root/mm &
### 卸载
fusermount -u  /root/mm
 
#### 其他 ####
#### https://softlns.github.io/2016/11/28/rclone-guide/
rclone config - 以控制会话的形式添加rclone的配置,配置保存在.rclone.conf文件中。
rclone copy - 将文件从源复制到目的地址,跳过已复制完成的。
rclone sync - 将源数据同步到目的地址,只更新目的地址的数据。   –dry-run标志来检查要复制、删除的数据
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 - 交互式查找重复文件,进行删除/重命名操作。
#### 其他 ####

3. 安装BT下载神器aria2

Aria2 (aria2c)3,它是一款开源免费跨平台且不限速的多线程下载软件,其优点是速度超级快、体积轻盈、性能强劲、资源占用少;支持 HTTP / FTP / BT / Magnet 磁力链接等类型的文件下载;并且跨平台支持 Win、Mac、Linux,甚至在树莓派、NAS、路由器等设备上都能安装它。

脚本安装
  • Debian/Ubuntu:

可以直接使用命令安装:

apt-get -y install aria2
  • CentOS 7+:

安装 epel 源:

yum install epel-release

然后直接安装:

yum install aria2 -y
配置 Aria2
  • 创建必须的文件及文件夹。

    • 创建 .aria2 目录
      mkdir /root/.aria2
    • 创建 aria2.session 文件
      touch /root/.aria2/aria2.session
    • 创建 aria2.log
      touch /root/.aria2/aria2.log
    • 下载dht文件(目录在/root/.aria2/下面)
      wget "https://raw.githubusercontent.com/chiakge/Aria2-Rclone-DirectoryLister-Aria2Ng/master/sh/dht.dat"
    • 创建 aria2 配置文件,示例如下
## '#'开头为注释内容, 选项都有相应的注释说明, 根据需要修改 ##
## 被注释的选项填写的是默认值, 建议在需要修改时再取消注释  ##
 
## 文件保存相关 ##
 
# 文件的保存路径(可使用绝对路径或相对路径), 默认: 当前启动位置
dir=/root/download
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
disk-cache=32M
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
file-allocation=trunc
# 断点续传
continue=true
 
## 下载连接相关 ##
 
# 最大同时下载任务数, 运行时可修改, 默认:5
max-concurrent-downloads=10
# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=5
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M
# 单个任务最大线程数, 添加时可指定, 默认:5
split=20
# 整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0
# 单个任务下载速度限制, 默认:0
#max-download-limit=0
# 整体上传速度限制, 运行时可修改, 默认:0
#max-overall-upload-limit=0
# 单个任务上传速度限制, 默认:0
#max-upload-limit=0
# 禁用IPv6, 默认:false
disable-ipv6=false
 
## 进度保存相关 ##
 
# 从会话文件中读取下载任务
input-file=/root/.aria2/aria2.session
# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=/root/.aria2/aria2.session
# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
#save-session-interval=60
 
## RPC相关设置 ##
 
# 启用RPC, 默认:false
enable-rpc=true
# 允许所有来源, 默认:false
rpc-allow-origin-all=true
# 允许非外部访问, 默认:false
rpc-listen-all=true
# 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
#event-poll=select
# RPC监听端口, 端口被占用时可以修改, 默认:6800
#rpc-listen-port=6800
# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
#rpc-secret=<TOKEN>
# 设置的RPC访问用户名, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-user=<USER>
# 设置的RPC访问密码, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-passwd=<PASSWD>
 
## BT/PT下载相关 ##
 
# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
#follow-torrent=true
# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413
# 单个种子最大连接数, 默认:55
#bt-max-peers=55
# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=true
# 打开IPv6 DHT功能, PT需要禁用
enable-dht6=false
# DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999
# 本地节点查找, PT需要禁用, 默认:false
#bt-enable-lpd=true
# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=true
# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K
# 客户端伪装, PT需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=0.1
# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false
# BT校验相关, 默认:true
#bt-hash-check-seed=true
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 为0时,下载完成就不做种
seed-time=0
# 下载完成执行脚本
on-download-complete=/root/.aria2/autoupload.sh
# 允许覆盖
allow-overwrite=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=false

将其保存为 aria2.conf,放在 /root/.aria2/ 目录下。

启动 Aria2
  1. 方法一

运行

nohup aria2c -c "/root/.aria2/aria2.conf" > "/root/.aria2/aria2.log" 2>&1 &

停止

kill -9 $(ps -ef |grep "aria2c" |grep -v "grep" |awk '{print $2}')
  1. 方法二

新开名为 aria2 的 screen,不开机启动。

apt-get -y install screen
screen -dmS aria2 aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all -c

这样,Aria2 在 linux 下配置完成了,可以使用了。

如果需要 Web 端,可以参考接下来的文章使用 AriaNg(比较强大,包含了 Yaaw 和 Aria2 Web UI 的所有功能)。

3. 关于离线下载部分说明

离线下载实现的方法是:利用aria2来下载文件,下载完成后执行脚本,调用rclone来同步到网盘上。这样假设网盘空间无限大的话,那就可以存很多东西到网盘。

贴个下载完成后执行脚本的示例:

#!/bin/bash
path=$3 #取原始路径,我的环境下如果是单文件则为/data/demo.png,如果是文件夹则该值为文件夹内某个文件比如/data/a/b/c/d.jpg
downloadpath='/root/download'


if [ $2 -eq 0 ]
        then
                exit 0
fi
while true; do  #提取下载文件根路径,如把/data/a/b/c/d.jpg变成/data/a
filepath=$path
path=${path%/*}; 
if [ "$path" = "$downloadpath" ] && [ $2 -eq 1 ]  #如果下载的是单个文件
    then
    rclone move "$filepath" ${name}:${folder}/     
    exit 0
elif [ "$path" = "$downloadpath" ]   #文件夹
    then
    while [[ "`ls -A "$filepath/"`" != "" ]]; do
    rclone move "$filepath"/ ${name}:${folder}/"${filepath##*/}"/ --delete-empty-src-dirs
    done
    rm -rf "$filepath/"
    exit 0
fi
done

${name}这个请修改成你rclone配置中的名称;

${folder}这个请修改成你所同步的网盘里的文件夹名;


  1. bbr:脚本来源秋水逸冰,访问来源查看更多使用方法。
  2. rclone:访问官网,查看更多信息
  3. aria2:访问官网,查看更多信息
posted @ 2018-04-12 18:18:00 kuye 阅读(16019) 评论(0)
发表评论
昵称
邮箱
网址