背景:
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 使用,前者能为后者提供超强算力(硬件解码等等),后者能为前者提供超大容量存储。折腾一番,心满意足。
分享给大家。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.