1. 它到底在解决什么问题,为什么大家都在聊Sonarr
如果你家里有一台NAS,或者平时有整理个人媒体库的习惯,那你大概率经历过这种场景:一部剧追到一半,每周新出的那集要么忘了下,要么下完之后文件名乱七八糟,字幕文件散落得到处都是,过两天想回看某集,翻半天目录才找到。这种事儿一次两次还行,集数一多就是纯粹的折磨。
Sonarr这个名字在“媒体自动化管理”的小圈子里几乎就是代名词。它本质上是一个针对TV剧集的自动化管理工具,核心做三件事:第一,根据你“想追哪些剧”的清单,自动去索引器里找资源;第二,把找到的资源交给下载客户端去下载;第三,下载完成后按你预设的规则重命名、整理进媒体库,顺便推送给Plex、Jellyfin这样的媒体服务器去刷新片库。
换句话说,Sonarr干掉的是从“想看的剧更新了”到“能直接在电视上打开看”之间所有的机械劳动。
这篇文章我不会只贴个安装命令就跑,而是把设计思路、目录规划、路径映射、索引器、下载客户端配置、常见坑点全部串起来讲一遍。适合的人群有两类:一是刚入手NAS、想搭一套自动化媒体库的新手;二是已经在用Plex/Jellyfin,但还停留在手动下载、手动整理文件阶段的朋友。看完你可以直接从零搭出一套完整的、能自动跑起来的剧集管理链路。
顺便说一句,这个工具管理的是你自己合法获取的媒体内容,我在写的时候也默认这个前提。工具本身是中立的,重点在于你怎么用它。
2. 整体设计拆解:Sonarr是怎么把“追剧”这件小事串起来的
2.1 核心工作流:追踪、搜索、下载、整理、通知
要理解Sonarr为什么比手动下载好使,得先看它整个系统是怎么设计的。它内部不是单打独斗,而是由四个角色配合完成的:
- Sonarr本身:大脑,负责记录剧集元数据、判断每集是否缺失、是否需要升级画质,并调度下载任务。
- 索引器(Indexer):信息源,相当于“哪里有什么资源”的查询入口,通过Newznab或Torznab这类标准协议对外提供搜索接口。
- 下载客户端(Download Client):执行者,Sonarr搜到匹配项之后,把任务推给它去实际下载。
- 媒体服务器(如Plex/Jellyfin/Emby):展示端,Sonarr整理完文件后会通知它刷新媒体库。
这四个角色之间是通过API互相通信的,Sonarr在其中扮演调度中心的角色。它每隔一段时间(默认6小时)会检查一次你记录的剧集列表,看看有没有“期待已久的下一集”已经发布;如果你在设置里开启了RSS同步,它还会更频繁地抓取索引器的新资源,命中追剧列表就立刻发车。
2.2 为什么非要用“剧集粒度”而不是“文件粒度”管理
很多人第一次用Sonarr会问一个问题:这不就是个下载器带了个重命名功能吗?我自己用qBittorrent定时下载不也行?
还真不太一样。Sonarr最值钱的地方,是它对“剧集”这个概念的理解是结构化的。它知道一部剧一共多少季、多少集、每集的官方标题是什么、首播日期是哪天、有没有特殊集(比如圣诞特辑、SP),而这些元数据来自TheTVDB这样的线上数据库。
正因为它懂“剧集结构”,它能帮你做很多“普通下载器做不到的事”:
- 某一集因为网络原因下失败了,它只管补那一集,不会把整个季度重新拉一遍。
- 某部剧从标清升级到高清,它会对比当前文件的分辨率和预设的质量档位,自动决定是否替换升级。
- 下载完成后自动做目录归档,比如
TV Shows/剧名/Season 01/剧名 - S01E02 - 标题.mkv这种格式,而不是一堆字幕组风格混杂的文件名。
这种以“逻辑集数”为核心的模型,就是它区别于普通下载工具的根本点。你可以把Sonarr理解成一个带着剧集数据库的私人秘书,而不是一个跑腿的快递员。
2.3 方案选型时的几个核心考量
我见过有人在最便宜的入门NAS上硬跑整套Sonarr+Radarr+Jellyfin,也有人用一台专门的小主机跑这些容器。选型上给你几条实际经验:
- 如果你已经有NAS,直接用Docker跑Sonarr,资源占用很低。一个Sonarr容器平时内存占用大概在200MB到500MB之间,CPU更是闲得可以忽略。
- 如果你的NAS是ARM架构的(比如某些入门型号),也能跑,但部分索引器的抓取响应会慢一些,体感上就是搜索转圈时间稍长。
- 如果你打算同时跑Sonarr、Radarr、Prowlarr、Jellyfin全家桶,四五个容器开启自启动之后,建议内存至少4GB,否则遇到索引器批量刷新的时候可能会卡顿。
3. 部署实操:环境准备、目录规划与首次启动
3.1 目录结构规划:这一步直接决定你后面会不会返工
先讲目录,因为这是排坑率最高的一步。Sonarr虽然是容器,但它本身不做“移动文件”这种事——它让下载客户端把文件下到某个目录,之后再从那个目录把文件整理到媒体库。这两个目录如果规划不好,后面会遇到“下载完了但Sonarr找不到文件”“找不到文件还不是最惨的,最惨是导入的时候做了跨文件系统的复制,把盘塞满”。
我给一个经过验证的目录方案,以一台群晖/威联通/普通Linux主机为例:
/volume1/data/ ├── downloads/ # 所有下载中转文件 │ ├── tv/ # Sonarr专属下载目录 │ ├── movies/ # Radarr专属下载目录 │ └── incomplete/ # 下载未完成时的临时目录 └── media/ ├── tv/ # 最终剧集媒体库 └── movies/ # 最终电影媒体库把“未完成的下载”和“要入库的媒体文件”分开,是一个很重要的习惯。下载没完成时文件还可能被客户端改名或者加上后缀,Sonarr如果去扫未完成目录,低概率会误判文件不可用。
用Docker部署时,目录映射有一个核心原则:Sonarr容器里看到的路径,和下载客户端容器里看到的路径必须互相同义。什么意思呢?比如宿主机上实际路径是/volume1/data/downloads/tv,映射进Sonarr后叫/downloads,那你在配置下载客户端时,指向的路径也必须是/downloads,而不是/volume1/data/downloads/tv。因为Sonarr对文件的操作是通过“路径对齐”来实现的,路径不一致会直接导致“找不到文件、无法导入”的问题。
3.2 Docker部署Sonarr(推荐方案)
如果你还没用过Docker,这是最简单的入门方式。我用的是linuxserver版镜像,因为它对时区、权限、目录映射的支持做得比较完善。docker-compose.yml大致长这样:
version: "3.8" services: sonarr: image: lscr.io/linuxserver/sonarr:latest container_name: sonarr environment: - PUID=1000 - PGID=1000 - TZ=Asia/Shanghai volumes: - ./sonarr/config:/config - /volume1/data/downloads/tv:/downloads/tv - /volume1/data/media/tv:/tv ports: - 8989:8989 restart: unless-stopped几个关键点展开说一下:
PUID和PGID这两个参数极其容易踩坑。Sonarr容器内的进程会以你指定的用户身份去读写挂载目录,如果这个用户对下载目录或媒体目录没有写权限,后面必然出现“下载完成但无法导入”的诡异问题。最简单的方式是在宿主机上执行id命令,把你当前用户名对应的UID和GID填进去,同时确认你要挂载的目录归属这个UID/GID。
/tv目录映射是指向最终媒体库的,/downloads/tv是所有剧集下载的中转目录,编译完成后执行docker-compose up -d,然后浏览器访问http://宿主机IP:8989,看到欢迎页面就说明启动成功了。
注意:不要在容器里跑root用户,虽然能解决权限问题,但后面一旦有脚本执行漏洞,整个宿主机的风险就大了。用PUID/PGID做用户降权才是规范的姿势。
3.3 首次启动向导与基础设置
第一次进入Sonarr,会有一个Setup向导,主要配置三块内容:媒体库根目录、下载客户端、索引器。如果你目前还没准备好索引器和下载客户端,也可以先跳过,之后在Settings里补。
第一个要设置的是“Root Folder”(根文件夹),也就是你的最终剧集存放目录,对应上面例子里的/tv。注意在Sonarr里选目录的时候,它显示的是容器内的路径,不是宿主机路径。
第二个建议设置的是“媒体管理”里的重命名规则。我个人推荐开启Season Folders(季目录)和Episode Renaming,默认格式里把空格换成点也不是不行,但说实话,剧名 - S01E02 - 集名.ext这种带可读性的格式,在Plex和Jellyfin里识别率最高,而且将来手动翻文件的时候一眼就知道是哪集。
4. 核心配置实操:索引器、下载客户端与媒体库对接
4.1 索引器配置:用Prowlarr统一管理,而不是手动填十几个源
索引器是Sonarr的“眼睛”。索引器配置得对不对,直接决定你能不能搜到想要的内容、搜到的资源质量怎么样。
我有两个建议:第一,不要直接在Sonarr里手动添加一堆索引器,而是装一个Prowlarr,用它集中管理索引器,再同步给Sonarr。第二,索引器不是越多越好,关键是质量和响应速度。
Prowlarr也是一个容器,部署方式和Sonarr类似。它最大的好处是你只需要在一个地方维护索引器的账号、Cookie、API Key,然后一键同步到Sonarr(以及其他*arr工具),不用每个工具各配一遍。Sonarr里添加Prowlarr作为唯一索引器入口之后,在搜索时其实还是去索引器们那边查,但维护成本大大降低。
配置索引器时,有两点值得注意:
- 每种索引器都有分类(Categories),对齐很重要。电视类索引器一般会把资源标为TV/Anime等分类,Sonarr在搜索时只会关心5030、5040这些电视剧分类。如果分类没对齐,明明索引器里有资源,Sonarr却搜不到。
- 设置“Search”超时时间不宜过于严苛。有些索引器响应慢,默认设置下可能因为超时被判定为不可用。建议保留系统默认值,等实际使用一段时间之后再针对性调整。
4.2 下载客户端配置:qBittorrent为默认首选
下载客户端的选择上,我用下来最推荐qBittorrent,其次是SABnzbd(如果你用Usenet方案)。为了直观,我把常见组合放在一个表格里:
| 客户端 | 协议 | Web UI | Sonarr集成稳定度 | 适用场景 |
|---|---|---|---|---|
| qBittorrent | BitTorrent | 有 | 高 | 大多数人首选,标签/分类体系完善 |
| Transmission | BitTorrent | 有 | 中 | 轻量级,但大文件并发性能一般 |
| SABnzbd | Usenet | 有 | 高 | 追求高速稳定下载的用户 |
| NZBGet | Usenet | 有 | 中等 | 已停止维护,不推荐新玩家尝试 |
在Sonarr里配置下载客户端的路径时,必须再次确认路径一致原则。以qBittorrent为例,如果qBittorrent里设置的保存目录是/downloads/tv,那Sonarr里也必须填/downloads/tv,两个容器需要共享这个目录(或者用同一个卷)。很多人第一次配置失败,八成是栽在这个地方。
qBittorrent本身要做三个小设置:开启Web UI远程访问;开启“Torrent Queuing”但不是必须,建议根据宽带情况限制并行任务数;把“Save to Subdirectory”关掉,否则Sonarr导入时还要多跑一层子目录。
提示:qBittorrent的“重命名文件”和“保留未完成文件”这两个选项建议默认不动,Sonarr对它俩的支持虽然没问题,但改了之后出现异常时排查头绪更多。
4.3 媒体库对接:让Plex/Jellyfin自动发现新入库的内容
媒体库对接是让整套系统显得“智能”的最后一步。Sonarr在完成文件导入、重命名之后,会主动发通知给媒体服务器,触发对应剧集文件夹的扫描,不需要你手动去Plex里点“刷新”。
在Sonarr的Settings -> Connect里,可以添加Plex、Jellyfin、Emby或者通用Webhook。以Jellyfin为例,你需要先给Sonarr生成一个API Key,然后在Connect里填上Jellyfin的地址、API Key和Library名称。
这里有个实际经验:如果媒体服务器和Sonarr都在同一台机器上,请使用内网地址而不是公网地址,不仅响应更快,还能减少不必要的代理路径。有些人喜欢把所有服务都通过反向代理统一暴露,看起来整洁,但实际上内网互访完全没必要绕一圈。
4.4 质量配置文件:不要让Sonarr“有什么下什么”
默认的质量配置(Quality Profiles)是“Any”,意思是只要找到资源就收。如果你不介意文件大小,这没问题,但如果你跟我一样对画质有要求,建议自己建一个Profile。
我日常推荐一套组合:在Profile里开启“1080p WEB-DL”作为首选,并把“720p WEB-DL”和“1080p BluRay”放进来作为备选。这样Sonarr在搜索时优先选择1080p WEB-DL,找不到的话再降级去找720p。
同时开启“Upgrades Allowed”(允许升级),并设置升级阈值。比如当前已下载的是720p,之后发现一个1080p,Sonarr会下载新版本并替换旧文件。这样做的好处是画质可以慢慢“养”,缺点是磁盘空间会吃紧。如果你硬盘只有4T,建议把升级阈值限制在1080p以内,不要追着2160p跑,不然后期存储压力很大。
5. 进阶玩法:多实例、自动化脚本与全家桶互连
5.1 给剧集打标签:一个Sonarr实例管理多种内容
很多人不知道Sonarr支持标签系统,这是管理“动画、综艺、美剧、国剧混合存在”的场景下特别好用的功能。
在添加系列时,可以打上标签,比如anime、variety、doc,然后再给每个标签绑定单独的根目录或质量Profile。这样动画片进入动画目录、纪录片进入纪录片目录,各类资源互不干扰,比用文件夹手动分干净得多。更进一步,想区分不同来源语言的,比如中文配音版和原声版,可以配合标签和下载规则来处理。
5.2 常见系列扫描:把已有文件批量导入Sonarr
很多人搭好Sonarr之后,手头已经有一堆剧集文件了,不知道该怎么让Sonarr接管。这里提供一个方案,不用重新下载。
在Sonarr里先添加对应的剧集(从TheTVDB匹配),然后到该剧的页面,点击“Manual Import”(手动导入),选你已有的剧集文件夹所在目录,Sonarr会扫描出候选文件并匹配到对应季/集。确认后它会按新规则重命名并移入媒体库。这个过程会“吞掉”原有文件,建议在操作前先备份一份危险数据,免得匹配错误造成文件被改名后无法辨识。
批量导入大批量文件时,我建议一次只处理一部剧,因为Sonarr日志里会把匹配过程打得比较详细,方便你追踪有没有匹配错集。
5.3 Sonarr + Radarr + Prowlarr:一套完整的自动化媒体中心
如果你除了追剧,还有电影管理需求,可以在这个架构里再加入Radarr。它与Sonarr的设计体系几乎一致,配置思路也同理,但针对电影做了优化(支持电影合集、电影格式识别等)。
三兄弟外加qBittorrent、Jellyfin的完整架构如下:
- Sonarr:管理剧集生命周期。
- Radarr:管理电影生命周期。
- Prowlarr:统一管理索引器、同步给这两个工具。
- qBittorrent:实际下载。
- Jellyfin/Plex:最终消费入口。
这套架构下,你唯一需要手动做的,就是在看到一部新剧/新电影时把它加入Sonarr/Radarr。等到资源一发布,从搜索到入库到刷新片库,全程自动。我在实际使用了一年之后,最大的感受就是“存在感归零”,也就是你几乎意识不到这堆工具在后台干活了,但它们确实每天都在默默把新集整理好。
5.4 备份与恢复:配置文件才是你最值钱的东西
很多人部署完Sonarr就再也不管config目录了,这是个大坑。Sonarr的所有配置、追剧列表、历史记录都存在config目录下的数据库文件里,一旦磁盘损坏或者误删容器,重建配置虽然不至于要命,但重新添加几十部剧集绝对让人崩溃。
我目前的做法是:每天凌晨3点把Sonarr容器的config目录整体压缩备份到一块独立硬盘上,保留最近7天,之后再做一次异地同步。备份命令很简单,实测没遇到过恢复失败的情况。
6. 常见问题与排查技巧实录
6.1 “No files found are eligible for import”到底是怎么回事
这个问题可能是所有Sonarr新用户遇到最多的。文件明明下完了,Sonarr却说没有可导入的文件。排查顺序如下:
- 检查下载客户端里任务是否真的完成。如果还在做种但没完成校验,Sonarr不会去导入。
- 检查下载客户端保存路径和Sonarr里配置的路径是否一致。路径不一致是最常见的原因。
- 检查容器是否有目录权限。手动进容器里执行
ls看看能不能看到那个文件。 - 如果你用的是BT协议,顺便检查下载文件是否被放在了一个子目录里,而Sonarr配置的“下载目录”刚好指向父目录导致找不到。
6.2 所有索引器都超时,搜索结果转圈
遇到这种情况,先别急着删索引器。第一排查Sonarr网络是否能访问到索引器地址,尤其是有些自建索引器只允许特定IP访问,你容器网络用的是bridge还是host可能就决定了能不能连上。第二检查索引器是否被封禁或需要更新Cookie。第三,把“Search Timeout”适当调大一点。
如果是Prowlarr同步过来的索引器,优先在Prowlarr里测试,Prowlarr能搜到、Sonarr搜不到,那大概率是分类没同步完整。
6.3 剧集文件一直停在下载列表里,不进入媒体库
这种情况一般不是因为Sonarr坏了,而是它的“下载后处理”步骤卡住了。点开Activity里的Queue列表,看当前任务的状态。如果显示“Downloading”,那就是还在等下载完成;如果是“Importing”,说明正在处理;如果状态是“Pending”,有可能是残留的同一文件已经导入过,Sonarr在等用户确认是否重复导入。
还有一种容易忽略的场景:当多个剧集文件同时下载完成,Sonarr会顺序处理队列,文件较多时排队时间会比较长,看起来像“卡住了”,其实还在跑。
6.4 为什么我明明设置了1080p优先,却还是下载了720p
首先检查你用的Quality Profile是不是你新建的那个,而不是默认的Any。其次,当你添加的剧集已经存在720p文件,且你的Profile支持从720p升级到1080p时,Sonarr会先保留现有文件,同时继续在后台搜索更高画质。但它不会在每一次RSS同步时都去翻老剧,如果你想立刻扫描已拥有剧集的更高画质,可以在对应剧集页面执行“Search All Missing”,然后选择升级搜索。
6.5 数据库损坏或者磁盘满了怎么处理
Sonarr在运行过程中如果磁盘空间满了,偶发数据库损坏的情况。表现是页面打开很慢、日志里报数据库相关错误。处理方式:先停容器,把config目录里的sonarr.db复制出来备份,尝试用SQLite工具执行PRAGMA integrity_check和PRAGMA recovery恢复;如果修复不了,可以把备份回退或者重建数据库。所以再次强调,定期备份config目录真的很重要。
6.6 新增剧集不在索引器里搜到,怎么办
如果你添加的剧集比较冷门,或者刚发布几天还没被索引器收录,完全搜不到是正常的。这时候可以适当增加“Available Delay”的分钟数,给索引器留出抓取时间。还可以在剧集页面里对某一季执行搜索,换成更具体的资源关键词再试。
经验:冷门资源建议等资源发布后24小时再搜索,命中率会高很多。为什么?因为很多索引器是靠站点爬虫定期抓取的,不是实时同步,太早搜基本等于白搜。
7. 我在实际运行中的几个体会
Sonarr不是一个“装好就完事”的工具,它是需要你慢慢调教出自己习惯的一套系统。我用了两年多,最大的感悟就是“路径规划是最底层的地基”,所有前期省事跳过的地方,后期几乎都会以报错的方式找你补课。
如果你正在规划一套家用媒体服务,我的建议是:先从Sonarr+qBittorrent+Jellyfin这三个最小组合开始,等跑顺了再引入Prowlarr和Radarr,不要一上来就全家桶all in。前两周你会频繁看日志、调配置,但过了这一阵之后,它带来的便利是几何级别的提升。
最后分享一个小技巧:给Sonarr单独设一个固定的下载分类名(比如tv-sonarr),在qBittorrent里给这个分类限一份单独的下载速度上限,避免它把整个宽带占满导致其他设备上网卡顿。细节虽然小,但对于家庭网络来说,体验差异非常明显。