背景:
NAS 是双盘位的低功耗 ARM 芯片千兆网机型,1.4 GHz ,只有 1 GB RAM 。Mac mini 就是丐版的 M4 Mac mini ,16 GB RAM ,千兆网口,256 GB SSD 。家里是千兆局域网环境,iperf3 测速能跑到 800-900 Mbps 。
问题描述:
之前在 NAS 上用 Docker 跑 Transmission ,下载 2-3 个种子 UI 就会卡死,而且下载速度远远达不到家里宽带的上限( 500 Mbps )。
折腾方案:
现在的做法是,所有的文件依然保留在 NAS ,但是把 Transmission 跑在 Mac mini 上。写了个小脚本,用 transmissionrpc 把种子重新添加到新的 Transmission ,并指定文件路径、校验本地数据,继续做种。
有一块闲置的 500 GB NVMe M.2 SSD ,搞了个 USB 3.1 Gen 2 的硬盘盒,插在 Mac mini 上。Transmission 直接下载到这块 SSD 上,5 个热门种子同时下载,跑满了家宽下行( 69 MB/s ),UI 不卡,也不影响用 Mac mini 干别的事(废话!)。
在 transmission 的 settings.json
里面启用 script-torrent-done-enabled
并且在 script-torrent-done-filename
指定了用 python 写的一个脚本:
1. 用 Bark 推送消息到 iPhone ,包含种子名字、大小、平均下载速度
2. 识别当前种子路径,如果是 SSD Cache 目录,就往 RabbitMQ 发送一个 rsync 任务
3. 等待 rsync 完成,发送通知,包含文件大小、等待时间、同步时间
4. 更新种子路径到 NAS ,并校验本地数据,确保继续做种
5. 根据类别和文件名(只考虑视频文件)在对应目录创建硬链接,并发送通知
之所以用 RabbitMQ ,是为了确保多个种子先后完成的时候,往 NAS 同步是串行写入,避免并行写入降速。毕竟 NAS 的 CPU 和 HDD I/O 都是瓶颈。
刮削还是 TinyMediaPlayer 好用,但是需要手工操作。为了能远程使用,是在 Mac mini 上用 Docker 跑的。刮削涉及小文件读写,所以 NAS 不用 SMB ,而是用 NFS 挂载在 Mac mini 上的。这样做也方便统一 Transmission 和 TMM 的 PUID 以及 PGID ,防止权限混乱。
Jellyfin 是跑在 Mac mini 上的,刮削完几乎立即就能识别到媒体库,而且在不同设备上播放的时候,在 Mac mini 上能实时转码太爽了。
最后:
Mac mini 搭配 NAS 使用,前者能为后者提供超强算力(硬件解码等等),后者能为前者提供超大容量存储。折腾一番,心满意足。
分享给大家。
1
stinkytofux 13 小时 7 分钟前
闲的蛋疼, 你这方案既复杂又不方便. 又没有发挥 NAS 的作用, 直接用 NAS 开一个 SMB 或者 NFS 共享, 文件直接下载到 nas 上不就行了. 下载和做种工具建议用 docker 装 qBittorrent.
如果你的 NAS CPU 连 SMB 这种协议都跑不满的话, 还不如直接扔掉算了. |
![]() |
2
ahdw OP @stinkytofux 不管是 SMB 还是 NFS ,NAS 上都有协议开销+局域网传输+HDD I/O 太慢,试过直接下载到 NAS ,速度上不去。
|