基于Rclone网盘同步的NASTOOL搭建方式(同样适用于影视备份)
实现的效果
- 使用nastool自动搜索剧集
- 使用nastool自动识别剧集
- 上传重命名和刮削好的剧集到网盘(google drive 或者onedrive等)
搭建前必须要了解的概念
软链接
就是类似于windows的快捷方式。
比如:
源文件A,创建一个软链接B,在linux上的操作:
ln -s A B
同理windows,此时你删除源文件A,B还在,但是没用了,已经访问不了了。
这里讲软链接的目的就是方便理解硬链接。
复制
大家都了解了,不推荐,太影响性能,也占用空间。
rclone 的复制、移动和同步
推荐使用,但是不推荐在nastool中直接使用,对于使用docker版本的nastool配置比较复杂,而且最关键的一点,如果你的网速不能够实时上传到网盘里,那么本地就会有一个cache,这个cache也可能非常的大。
其实很多人想的是,我的vps硬盘很小,但是流量很足,想直接下到网盘了,这里很明确的说,这么做的效果是非常差的。rclone在move或者copy的过程中也会有cache文件,因为vps不可能和网盘是实时传输的,就会先cache到本地,然后再慢慢传。最关键的就是:nastool是在下载的瞬间就开始整理和刮削,那时候还没下完,这个时候同时在移动,非常耗费资源
rclone copy
copy文件到云端,我目前是用的这种方式,因为我有pt站,需要做种rclone sync
这种是增量备份,回删除云端的程序,不推荐rclone move
如果你是全bt下载,我感觉这种方式就很好,bt设置下载完几分钟删除,然后move整理好之后的到云端
硬链接
推荐!很多人搭建nastool看了很多教程,教程里都是自己的机器,比如nas上面使用硬链接,但是就好奇,网盘怎么使用硬连接呢?不要急,先了解硬链接的特点:
硬连接在linux上的操作:
ln A B
源文件A,硬连接B,他们都指向了同一个文件。
但是这个文件现在有了2个别名。
此时如果删除A,B还是能够访问到的内容的,只有把A和B同时删除了,这个文件在系统中才消失了。
同时硬链接也是一种链接,不会和复制一样增加很大的储存空间(就是个别名,几乎不额外占用空间)。
简单点说就是:如果创建了一个硬链接,那么我们操作这个硬链接,比如说移动或者修改原来的内容,效果和操作源文件是一样的。上传这个硬链接,也相当于上传的源文件!
如果还是看不懂,我这里找了几个比较明白的讲解:
youtube:09 硬链接和软链接
youtube:13 软硬链接
环境搭建
为了防止出现权限问题,以下的所有安装都使用root权限
我是直接搭建在vps上的,docker的环境就行,本次使用的docker compose,无需特别的去安装docker-compose,因为docker原生就带compose。使用命令为:docker compose [后面的参数同dokcer-compose]
还有一点就是,nastool和bt下载器要放到一台机器上。
nastool中使用到的组件和理由
- qbit:这个随自己喜欢,我使用的qbit
没了,包括索引器,字幕下载啥的,都推荐使用nastool自带的,因为那几个插件都不好用!
安装docker
无论你是什么linux发行版,使用如下命令都可以安装本次搭建的docker环境:
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
运行完上面两个命令之后,等到安装完成即可。
安装目录结构
演示环境使用如下命令操作:
cd $home
mkdir nastool
mkdir qbit
mkdir -p qbit/downloads qbit/downloads/movie qbit/downloads/tv qbit/downloads/animation qbit/downloads/link qbit/downloads/link/movie qbit/downloads/link/tv qbit/downloads/link/animation
此时的目录结构如下:
|-- nastool
|-- qbit
| `-- downloads
| |-- animation
| |-- link
| | |-- animation
| | |-- movie
| | `-- tv
| |-- movie
| `-- tv
cd $home && cd qbit
来到qbit目录,创建一个docker-compose.yml
文件,复制下面内容进去。
version: "3.4"
services:
qbittorrent:
image: linuxserver/qbittorrent
container_name: qbittorrent
environment:
- PUID=0 #PUID,使用 id 用户名 查询
- PGID=0 #PGID,使用 id 用户名 查询
- TZ=Asia/Shanghai # 你的时区
- UMASK_SET=000
- WEBUI_PORT=8081 # 将此处修改成你欲使用的 WEB 管理平台端口
volumes:
- ./config:/config # 绝对路径请修改为自己的config文件夹。修改”:“冒号前面的是你宿主机的文件路径;冒号后面的是docker qBittorrent目录,别改。下面这条同样道理
- ./downloads:/downloads # 绝对路径就是要下载的路径
ports:
# 要使用的映射下载端口与内部下载端口,可保持默认,安装完成后在管理页面仍然可以改成其他端口。
- 6981:6981
- 6981:6981/udp
# 此处WEB UI 目标端口与内部端口务必保证相同
- 8081:8081
restart: unless-stopped
如果全是bt下载的话,可以使用qbittorrent-ee,防吸血
version: "2"
services:
qbittorrentee:
image: superng6/qbittorrentee
container_name: qbittorrentee
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
- UMASK_SET=000
- WEBUI_PORT=8080
volumes:
- ./config:/config
- ./downloads:/downloads
ports:
- 6981:6981
- 6981:6981/udp
- 8080:8080
restart: unless-stopped
使用命令 docker compose up -d
启动qbit,先不管,等会去配置。
安装nastool
cd $home && cd nastool
进入到nastool文件夹,同样也创建一个docker-compose.yml
文件,如果是和我的步骤一摸一样,复制下面的内容进去。不一样的话自己改一下。
version: "3"
services:
nas-tools:
image: jxxghp/nas-tools:latest
ports:
- 3000:3000 # 默认的webui控制端口
volumes:
- ./config:/config # 冒号左边请修改为你想保存配置的路径
- /root/qbit/downloads:/my_media # 媒体目录,多个目录需要分别映射进来,需要满足配置文件说明中的要求
environment:
- PUID=0 # 想切换为哪个用户来运行程序,该用户的uid
- PGID=0 # 想切换为哪个用户来运行程序,该用户的gid
- UMASK=000 # 掩码权限,默认000,可以考虑设置为022
- NASTOOL_AUTO_UPDATE=true # 如需在启动容器时自动升级程程序请设置为true
#- REPO_URL=https://ghproxy.com/https://github.com/jxxghp/nas-tools.git # 当你访问github网络很差时,可以考虑解释本行注释
restart: always
network_mode: bridge
hostname: nas-tools
container_name: nas-tools
其实最关键的点就是映射了my_media目录,- /root/qbit/downloads:/my_media
。因为使用硬链接不能跨盘。如果映射多个目录的话同步就会错误1,这也是在qbit目录的download目录下建立了一个link文件夹的原因。
配置qbit
更改监听端口
按照我的配置是:http://ip:8081
,我的配置中把监听端口设置为了6981,因此先去设置中修改这个端口,如下图所示:
给未下载完成的项目添加一个后缀
这样只有下载完成的视频才会有比如.mkv后缀,这样才会去移动。
添加新的分类标签
在界面左边功能栏中,按下图创建新的分类
创建分类并配置好下载路径:按照我的qbit和nastool配置文件的以下都可以照着写
这样子nastool按照分类发送下载任务的时候,就可以准确的下载到指定的目录里面了。
同时可以设置自动删种,我是保种7天删除,这里随你了。
配置nastool
nastool的设置也不可能全部都设置到,就是设置了几个我感觉需要注意的点。
设置-基础设置-媒体
- 默认文件转移方式:硬链接
- 二级分类策略:我是直接给留空了,默认不分类 ,因为使用分类的话要去设置配置文件,我嫌麻烦
- 刮削设置:因为我用的gd,有40w文件总数的限制,我就只保留了NFO,图片我全取消了
设置-媒体库
如下图所示:
设置的是硬链接之后的地址。
设置-目录同步
设置-下载器-下载器目录
这里配置的目录是下载器里映射的目录,最后的那个就是分类,对应的就是qbit的分类。
其他的配置就不写了 ,我把自动获取字幕也给关了。
rclone 上传到网盘
rclone 的配置,和sa的配置,我感觉有点麻烦网上教程很多,下面是我的脚本:。
这里就是简单的通过 rclone copy
命令来进行同步刮削之后的剧集。rclone的详细使用命令可以看Rclone 进阶使用教程 - 常用命令参数详解。
你可以写一个定时脚本,或者 tmux
或screen
一个新的窗口,没事干的时候手动去同步一下。
#!/bin/bash
COUNT=$(ps -ef |grep 'rclone copy' |grep -v "grep" |wc -l)
echo $COUNT
if [ $COUNT -eq 0 ]; then
/usr/bin/rclone copy -v -P /root/qbit/downloads/link/ fin2:/ --transfers=32 --ignore-errors --buffer-size=200M --check-first --checkers=32
echo "rclone now start copying"
else
echo "rclone is runing,pass it "
fi
我是半小时执行一次
*/30 * * * * /bin/bash /root/nastool/rclone_copy.sh >> /dev/null 2>&1 &
最关键的一点就是如何及时的清理vps的硬盘空间。我这里是2个步骤:
- qbit 及时删种,我因为vps是10T的,设置了保种7天。但是删除了以后,因为是硬连接,所以还要去删硬连接的。
- 脚本自动删除硬链接文件夹
link
中的各个大分类文件夹下,创建时间超过8天的文件夹。具体的按照天数删除的脚本可以搜一下,网上很多。
我自己的脚本:
#!/bin/bash
find /root/qbit/downloads/link/movie/ -mmin +360 -type f -name "*" -exec rm -rf {} \;
find /root/qbit/downloads/link/tv/ -mmin +360 -type f -name "*" -exec rm -rf {} \;
find /root/qbit/downloads/link/animation/ -mmin +360 -type f -name "*" -exec rm -rf {} \;
find /root/qbit/downloads/link/movie/ -type d -empty -exec rmdir {} \;
find /root/qbit/downloads/link/movie/ -type d -empty -exec rmdir {} \;
find /root/qbit/downloads/link/animation/ -type d -empty -exec rmdir {} \;
我是半小时执行一次,可以自己改一下
*/30 * * * * /bin/bash /root/nastool/unlink_file.sh >> /dev/null 2>&1 &
最后来看一下我的效果:(之前第一次同步的时候用的sync,因为我增加了pt站,现在用的是copy,如果全bt可以用move)
顺便推荐一个我自己用的过滤规则
1080p和4k的通用视频文件下载规则
eyJuYW1lIjogIlx1OWFkOFx1NmUwNVx1NTM1NVx1NjU4N1x1NGVmNiIsICJydWxlcyI6IFt7Im5hbWUiOiAiNGtcdTUzNTVcdTY1ODdcdTRlZjZcdTVlMjZcdTRlMmRcdTViNTciLCAicHJpIjogIjEiLCAiaW5jbHVkZSI6ICJbXHU0ZTJkXHU1NmZkXHU1NzBiXHU3ZTQxXHU3YjgwXSgvfFxcc3xcXFxcfFxcfCk/W1x1N2U0MVx1N2I4MFx1ODJmMVx1N2NhNF18W1x1ODJmMVx1N2I4MFx1N2U0MV0oL3xcXHN8XFxcXHxcXHwpP1tcdTRlMmRcdTdlNDFcdTdiODBdfFx1N2U0MVx1OWFkNHxcdTdiODBcdTRmNTN8W1x1NGUyZFx1NTZmZFx1NTcwYl1bXHU1YjU3XHU5MTRkXXxcdTU2ZmRcdThiZWR8XHU1NzBiXHU4YTllfFx1NGUyZFx1NjU4N1xuMjE2MHw0S3w0ayIsICJleGNsdWRlIjogIkJsdS0/UmF5LitWQy0/MXxCbHUtP1JheS4rQVZDfFVIRC4rYmx1LT9yYXkuK0hFVkN8XFxXc2RyXFxXfG1pbmliZHxbXFxXX11kaXlbXFxXX118W1xcV19dM2RbXFxXX118UkVNVVh8RFZ8Qmx1ZVJheS5IRVZDIiwgInNpemUiOiAiNDkiLCAiZnJlZSI6ICIifSwgeyJuYW1lIjogIlx1OTAxYVx1NzUyOFx1NGUwYlx1OGY3ZDRrIiwgInByaSI6ICIzIiwgImluY2x1ZGUiOiAiMjE2MHw0S3w0ayIsICJleGNsdWRlIjogIkJsdS0/UmF5LitWQy0/MXxCbHUtP1JheS4rQVZDfFVIRC4rYmx1LT9yYXkuK0hFVkN8XFxXc2RyXFxXfG1pbmliZHxbXFxXX11kaXlbXFxXX118W1xcV19dM2RbXFxXX118UkVNVVh8RFZ8Qmx1ZVJheS5IRVZDIiwgInNpemUiOiAiNDkiLCAiZnJlZSI6ICIifSwgeyJuYW1lIjogIjEwODBwXHU1MzU1XHU2NTg3XHU0ZWY2XHU1ZTI2XHU0ZTJkXHU1YjU3IiwgInByaSI6ICI1IiwgImluY2x1ZGUiOiAiW1x1NGUyZFx1NTZmZFx1NTcwYlx1N2U0MVx1N2I4MF0oL3xcXHN8XFxcXHxcXHwpP1tcdTdlNDFcdTdiODBcdTgyZjFcdTdjYTRdfFtcdTgyZjFcdTdiODBcdTdlNDFdKC98XFxzfFxcXFx8XFx8KT9bXHU0ZTJkXHU3ZTQxXHU3YjgwXXxcdTdlNDFcdTlhZDR8XHU3YjgwXHU0ZjUzfFtcdTRlMmRcdTU2ZmRcdTU3MGJdW1x1NWI1N1x1OTE0ZF18XHU1NmZkXHU4YmVkfFx1NTcwYlx1OGE5ZXxcdTRlMmRcdTY1ODdcbjEwODBbcGldIiwgImV4Y2x1ZGUiOiAiQmx1LT9SYXkuK1ZDLT8xfEJsdS0/UmF5LitBVkN8VUhELitibHUtP3JheS4rSEVWQ3xcXFdzZHJcXFd8bWluaWJkfFtcXFdfXWRpeVtcXFdfXXxbXFxXX10zZFtcXFdfXXxSRU1VWHxEVnxCbHVlUmF5LkhFVkMiLCAic2l6ZSI6ICIxOCIsICJmcmVlIjogIiJ9LCB7Im5hbWUiOiAiXHU5MDFhXHU3NTI4XHU0ZTBiXHU4ZjdkMTA4MCIsICJwcmkiOiAiNyIsICJpbmNsdWRlIjogIjEwODBbcGldIiwgImV4Y2x1ZGUiOiAiQmx1LT9SYXkuK1ZDLT8xfEJsdS0/UmF5LitBVkN8VUhELitibHUtP3JheS4rSEVWQ3xcXFdzZHJcXFd8bWluaWJkfFtcXFdfXWRpeVtcXFdfXXxbXFxXX10zZFtcXFdfXXxSRU1VWHxEVnxCbHVlUmF5LkhFVkMiLCAic2l6ZSI6ICIxNSIsICJmcmVlIjogIiJ9XX0=
下面这个是只抓4k的
eyJuYW1lIjogIlx1NjcwMFx1NjViMDRrXHU1MjY3IiwgInJ1bGVzIjogW3sibmFtZSI6ICI0a1x1NTM1NVx1NjU4N1x1NGVmNlx1NWUyNlx1NGUyZFx1NWI1NyIsICJwcmkiOiAiMSIsICJpbmNsdWRlIjogIltcdTRlMmRcdTU2ZmRcdTU3MGJcdTdlNDFcdTdiODBdKC98XFxzfFxcXFx8XFx8KT9bXHU3ZTQxXHU3YjgwXHU4MmYxXHU3Y2E0XXxbXHU4MmYxXHU3YjgwXHU3ZTQxXSgvfFxcc3xcXFxcfFxcfCk/W1x1NGUyZFx1N2U0MVx1N2I4MF18XHU3ZTQxXHU5YWQ0fFx1N2I4MFx1NGY1M3xbXHU0ZTJkXHU1NmZkXHU1NzBiXVtcdTViNTdcdTkxNGRdfFx1NTZmZFx1OGJlZHxcdTU3MGJcdThhOWV8XHU0ZTJkXHU2NTg3XG4yMTYwfDRLfDRrIiwgImV4Y2x1ZGUiOiAiQmx1LT9SYXkuK1ZDLT8xfEJsdS0/UmF5LitBVkN8VUhELitibHUtP3JheS4rSEVWQ3xcXFdzZHJcXFd8bWluaWJkfFtcXFdfXWRpeVtcXFdfXXxbXFxXX10zZFtcXFdfXXxSRU1VWHxEVnxCbHVlUmF5LkhFVkMiLCAic2l6ZSI6ICI0OSIsICJmcmVlIjogIiJ9LCB7Im5hbWUiOiAiXHU0ZTBiXHU4ZjdkIiwgInByaSI6ICIzIiwgImluY2x1ZGUiOiAiMjE2MHw0S3w0ayIsICJleGNsdWRlIjogIkJsdS0/UmF5LitWQy0/MXxCbHUtP1JheS4rQVZDfFVIRC4rYmx1LT9yYXkuK0hFVkN8XFxXc2RyXFxXfG1pbmliZHxbXFxXX11kaXlbXFxXX118W1xcV19dM2RbXFxXX118UkVNVVh8RFZ8Qmx1ZVJheS5IRVZDIiwgInNpemUiOiAiNDkiLCAiZnJlZSI6ICIifV19
一些安装nastool时候碰到的坑
目录无法监控
进入到docker容易中,运行
apk add inotify-tools
重启容器即可。