V2EX 09月16日
Mac mini 赋能 NAS 存储,提升下载与媒体管理体验
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

针对低功耗 NAS 在运行 Transmission 时遇到的 UI 卡顿和下载速度瓶颈问题,本文分享了一种创新解决方案。通过将 Transmission 迁移至配置更强的 Mac mini,并利用一块 USB SSD 作为下载盘,成功突破了下载速度限制,实现了全速下载且 UI 流畅。同时,结合 Python 脚本和 RabbitMQ,实现了下载完成后的自动化任务,包括文件同步到 NAS、数据校验、硬链接创建以及媒体库刮削(使用 TinyMediaPlayer)和播放(Jellyfin)。该方案巧妙结合了 Mac mini 的计算能力和 NAS 的大容量存储,优化了整体使用体验,尤其是在媒体转码和库识别方面表现出色。作者认为这种组合能够提供强大的算力与海量存储的优势,并乐于分享此折腾成果。

💡 **解决 NAS 下载瓶颈,提升用户体验:** 针对双盘位低功耗 ARM NAS 在运行 Transmission 时出现的 UI 卡顿和下载速度远低于宽带上限(500 Mbps)的问题,作者将 Transmission 迁移至配置更高的 Mac mini(M4,16GB RAM)。通过使用一块 USB 3.1 Gen 2 的 500GB NVMe SSD 作为下载盘,成功实现了 5 个热门种子同时下载,速度达到家庭千兆局域网的极限(69 MB/s),同时保证了 UI 的流畅性和 Mac mini 的多任务处理能力。

🚀 **自动化下载后流程,优化文件管理:** 作者编写了一个 Python 脚本,通过 `transmissionrpc` 库实现种子信息的重定向和校验。当种子下载完成后,脚本会通过 Bark 推送通知,识别种子路径,若在 SSD Cache 目录则发送 rsync 任务至 RabbitMQ 进行串行同步至 NAS,避免因并行写入导致 NAS CPU 和 HDD I/O 瓶颈。完成后,脚本会更新种子路径至 NAS 并校验数据,确保继续做种,并根据文件类别创建硬链接,方便后续媒体库管理。

🎬 **整合媒体中心,实现无缝播放:** 为了提升媒体管理效率,作者在 Mac mini 上使用 Docker 运行 TinyMediaPlayer 进行视频刮削,并通过 NFS 挂载 NAS 的共享目录,解决了 SMB 挂载可能出现的权限问题,并统一了 PUID/PGID。Jellyfin 媒体服务器也部署在 Mac mini 上,能够实时识别刮削后的媒体库,并提供强大的硬件转码能力,确保在不同设备上的流畅播放体验。

🤝 **Mac mini 与 NAS 协同,优势互补:** 该方案的核心在于 Mac mini 强大的计算能力(尤其是在硬件解码和转码方面)与 NAS 海量存储的结合。Mac mini 负责高强度的计算任务,如下载、刮削和转码,而 NAS 则提供稳定可靠的存储空间。这种协同工作模式有效弥补了各自的短板,实现了“超强算力+超大容量”的理想组合,极大地提升了家庭影音娱乐和文件管理的整体效率与用户满意度。

背景

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 使用,前者能为后者提供超强算力(硬件解码等等),后者能为前者提供超大容量存储。折腾一番,心满意足。

分享给大家。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

NAS Mac mini Transmission Docker SSD RabbitMQ rsync Jellyfin TinyMediaPlayer NFS 文件同步 媒体库刮削 低功耗 性能优化
相关文章