rtorrent 挪文件后续种那些事
前两天整理 Jellyfin 的媒体库,把电影和剧集分到了不同目录(因为剧集在电影库里会展开显示,就很乱),一通 mv 下来,Jellyfin 那边是清爽了。然后我突然想起来:这些片子都是古老但依旧好用的 rtorrent 下的,而 rtorrent 一直开着在做种呢!我意识到,不妙,来活儿了~
好在折腾一圈之后,文件不用挪回去,种子也没重新下,校验 100% 继续做种。中间踩了几个挺反直觉的坑,网上中文资料也不多,值得写一篇,分享给有需要的朋友。
mv 之后,rtorrent 会怎样?
先说结论:不会马上出问题,但迟早会出问题。
同一个文件系统内的 mv 其实只是改了个名字,文件本身没动。rtorrent 手里如果还攥着这个文件的句柄,就还能照常读,所以刚 mv 完的时候,上传可能看起来一切正常。
但 rtorrent 会定期关掉空闲的文件,下次再按原路径去打开,就找不到了。更要命的是重启 rtorrent 之后,它会重新校验,原路径下啥都没有,种子直接被判成 0%。这时候要是一启动,它就会勤勤恳恳地在原目录把几十个 G 重新下一遍。。。
所以正确的做法是:告诉 rtorrent 文件搬到哪儿了。
正确的改目录姿势
rtorrent 里改种子目录有两个命令,区别挺关键:
1. d.directory_base.set:填的是种子的最终路径。多文件种子就是那个种子文件夹本身。
2. d.directory.set:填的是父目录。对多文件种子,rtorrent 会自动在后面拼上种子自己的名字。
我最后是用第二个搞定的(原因见下一节)。完整流程如下,在 rtorrent 界面里选中这个种子:
|
1 2 3 4 5 6 |
Ctrl-D # 停止种子(只按一次!连按两次就会从列表里删除掉) Ctrl-X d.close= # 关闭种子,状态从 [OPEN] 变成 [CLOSED] Ctrl-X d.directory.set=/DOWNLOAD/PATH # 只填父目录 Ctrl-X print=$d.base_path= # 看一眼当前路径对不对 Ctrl-R # 重新校验 Ctrl-S # 启动,继续做种 |
校验跑完显示已下载和总大小一致,就说明路径改对了。最后顺手存一下会话,免得 rtorrent 还没来得及自动保存就被重启,新路径又丢了:
|
1 |
Ctrl-X session.save= |
踩到的坑
1. 种子没关,目录改不了
我一开始 Ctrl-D 停了种子就去改目录,结果底部蹦出来一行:
|
1 |
Input failed: Cannot change the directory of an open download atter the files have been moved. |
(对,atter,rtorrent 源码里就是这么拼的,哈哈,方便大家原样搜索)
意思是:种子还处于 open 状态,而且已经在原目录创建过文件,这时不让改目录。Ctrl-D 只是停止,并不是关闭,得再用 d.close= 把它关掉才行。
还有一个细节:Ctrl-R 校验会把种子重新打开。所以顺序一定是先关、再改、最后校验。我中间手快按了一次 Ctrl-R,列表里又变回了 [OPEN],还显示 0%,当时着实吓了一跳:
|
1 2 |
* [OPEN] 0.0 / 28395.6 MB Rate: 0.0 / 0.0 KB Uploaded: 200046.0 MB * Inactive: Cannot change the directory of an open download atter the files have been moved. |
这时千万别 Ctrl-S,一启动就开始重新下载了。
2. Ctrl-X 输入框吃掉了中文
这个坑最隐蔽。我的种子目录叫 [太平年].Swords.into.Plowshares.S01.2026.1080p.IQ.WEB-DL.H264.AAC-CMCTV,用 d.directory_base.set 把完整路径粘进去之后,没报错,看着挺顺利。结果 print 一下:
|
1 |
/home/shared/TV/[].Swords.into.Plowshares.S01.2026.1080p.IQ.WEB-DL.H264.AAC-CMCTV |
「太平年」三个字凭空消失了!😂 列表里明明能正常显示中文,但 Ctrl-X 的命令输入框很可能只收 ASCII,粘贴进去的中文被悄悄丢掉了,目录就被改成了一个根本不存在的路径。
解决办法就是前面说的 d.directory.set:只填纯英文的父目录 /home/shared/TV,中文部分让 rtorrent 从种子文件里自己取,一个汉字都不用输入。单文件种子也一样,填文件所在的目录就行,文件名也是从种子里取的。
前提是:挪过去的文件夹名和文件名,必须和种子里的一模一样。为了让 Jellyfin 识别得好而顺手改名的,就续不了种了。
顺手整理:rtorrent 常用按键和命令
rtorrent 是纯键盘操作,没有菜单可点,平时用熟的就那几个键,一到这种时候就得现翻文档。。。干脆把常用的整理一下,下次直接来这儿抄。
主界面按键
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
↑ / ↓ 在种子列表里上下选择 → 进入选中种子的详情页(Peer、文件列表、Tracker 等) ← 返回上一级 1 ~ 9 切换视图,1 是 main,其余是 started/stopped/complete/seeding 这类筛选视图 Ctrl-S 启动种子 Ctrl-D 停止种子;对已停止的种子再按一次 = 从列表移除(不删文件) Ctrl-K 停止并关闭种子(相当于 d.stop= 加 d.close=) Ctrl-R 重新校验 Ctrl-O 修改种子的保存目录(需要种子处于关闭状态) + / - 调整种子优先级 Backspace 输入种子文件路径或 URL,添加并立即开始 Enter 输入种子文件路径或 URL,添加但不开始 a / s / d 全局上传限速 +1 / +5 / +50 KB z / x / c 全局上传限速 -1 / -5 / -50 KB A S D / Z X C 同上,改的是下载限速 Ctrl-X 输入命令(下面那一堆都靠它) Ctrl-Q 退出,再按一次强制退出 |
对,Ctrl-K 其实一步就能完成「停止 + 关闭」,比我前面先 Ctrl-D 再 d.close= 省事。不过拆开写更能看清楚「停止」和「关闭」是两回事,就先这样吧,哈哈。
Ctrl-O 也能改目录,但它同样是在 rtorrent 的输入框里敲路径,碰到中文目录名应该也逃不过被吞的命运,所以我还是更推荐 d.directory.set 只填父目录的办法。
在详情页里选中文件列表(File list)时,按空格可以切换单个文件的优先级,比如 off 掉不想下的文件,只下合集里的某几集。
Ctrl-X 常用命令
以 d. 开头的命令作用于当前选中的种子,其他的是全局命令:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
d.start= 启动 d.stop= 停止 d.close= 关闭 d.erase= 从列表移除(不删文件) d.check_hash= 重新校验,同 Ctrl-R d.tracker_announce= 立即向 Tracker 汇报一次 d.directory.set=/path 改目录,填父目录,种子名自动拼接 d.directory_base.set=/path 改目录,填最终路径 print=$d.base_path= 打印当前种子的实际路径 print=$d.name= 打印种子名 throttle.global_up.max_rate.set_kb=1000 全局上传限速(KB/s,0 表示不限) throttle.global_down.max_rate.set_kb=5000 全局下载限速 session.save= 立即保存会话 |
print= 的输出会显示在界面最底部那一行,想确认某个值的时候特别好用。
~/.rtorrent.rc 里常用的几行
|
1 2 3 4 |
directory.default.set = /data/torrents # 默认下载目录 session.path.set = ~/.session # 会话目录,存种子状态,重启不丢 schedule2 = watch_directory,5,5,load.start=/data/watch/*.torrent # 监视目录:往里丢 .torrent 就自动开始下载 |
session 目录一定要配,否则 rtorrent 一重启,所有种子都没了。watch 目录也很方便,配合 Samba 或者 Syncthing,在别的电脑上把种子文件往里一扔就行。
发表回复