修改完整版 worker.conf


shitou@shitou:~$ cat /usr/local/tunasync/conf/worker.conf
[global]
name = "local-worker"
mirror_dir = "/opt/mirror/mirrors"
# 强制只允许1个同步任务运行,杜绝多rsync争抢磁盘IO
concurrent = 1
# 机械硬盘优先1MB/s限速,小文件写入压力更低,wa过高可下调至512
rsync_speed_limit = 1024
# rsync正常非报错退出码
dangerous_global_rsync_success_exit_codes = [23,24]
log_dir = "/opt/mirror/logs/{{.Name}}"

[manager]
api_base = "http://127.0.0.1:14242"
token = "Sync@2026Tuna"
ca_cert = ""

# Ubuntu软件源,开启延迟写入优化小文件随机IO
[[mirrors]]
name = "ubuntu"
provider = "rsync"
upstream = "rsync://mirrors.bfsu.edu.cn/ubuntu/"
interval = 21600
use_ipv6 = false
# 数组格式开启延迟更新,禁止全局配置rsync_options(0.8.0版本会崩溃)
rsync_options = ["--delay-updates","--no-compress"]

# Ubuntu‑cdimage光盘镜像,同样开启IO优化
[[mirrors]]
name = "ubuntu-cdimage"
provider = "rsync"
upstream = "rsync://mirrors.bfsu.edu.cn/ubuntu-cdimage/"
interval = 604800
use_ipv6 = false
rsync_options = ["--delay-updates","--no-compress"]
shitou@shitou:~$

环境基础

  1. tunasync 版本:0.8.0(硬性限制:全局[global]区块不支持rsync_options,参数仅能在独立镜像内使用数组格式

  2. 存储介质:机械硬盘,短板为大量小文件的随机读写,极易出现 IO‑wait (wa) 过高、系统卡顿

  3. 同步源:北外镜像站 ubuntu 软件源、ubuntu‑cdimage 光盘镜像

全程遇到的所有报错 & 故障原因

  1. 服务反复崩溃、日志报错 expected a digit but got '-'

    错误:在全局global段写入rsync_options;0.8.0 全局配置不识别该字段,解析读到横杠-直接失败。

  2. 镜像内直接填写字符串 rsync_options = --delay-updates

    语法错误,该版本附加参数必须使用数组 ["参数"]

  3. 磁盘 IO 等待 wa 飙升至 42%,同时存在两条 rsync 进程

    • cdimage 镜像没有开启--delay‑updates延迟写入优化

    • 旧 rsync 残留进程未关闭,多进程争抢机械硬盘随机 IO

  4. 初始下载速度 2MB/s 过快,大批量小文件涌入超出机械盘写入上限

  1. 终止所有残留、卡死的 rsync 进程

bash

pkill rsync
  1. 修改 worker‑conf,下调同步限速至 512KB/s,减轻硬盘瞬时写入压力

ini

rsync_speed_limit = 512
  1. 确认两个镜像均配置完整 IO 优化参数

ini

rsync_options = ["--delay-updates","--no-compress"]
  1. 重载配置、重启服务

bash

sudo systemctl daemon-reload
sudo systemctl restart tunasync-worker

  • 要是后续磁盘负载太高、wa 长期居高不下,直接执行 pkill rsync,清理掉冲突的进程再重启服务即可;

  • 现在限速 512KB/s 已经很低,可以减轻硬盘负担;两个镜像也都配置好了延迟写入优化;

  • cd‑image 每周才触发一次定时任务,平时大多只有 ubuntu 源在同步,日常压力不会太大

在 tunasync‑worker 同步机械硬盘、容易双 rsync 进程、IO‑wait 很高的现状,我把所有可以改动的配置项、作用、调整方案完整拆分清楚,你按需修改即可:

[global] 全局区块可调整项

ini

[global]
name = "local-worker"
mirror_dir = "/opt/mirror/mirrors"
concurrent = 1
rsync_speed_limit = 512
dangerous_global_rsync_success_exit_codes = [23,24]
log_dir = "/opt/mirror/logs/{{.Name}}"
  1. concurrent

  • 只允许同时运行 1 个同步任务;只能管控新启动任务,无法处理卡死残留 rsync。

  • 不要改成 2 及以上,机械硬盘扛不住多进程读写。

  1. rsync_speed_limit(最核心可调参数,单位 KB/s)

  • 2048:2MB/s,速度快、硬盘极易堵死、进程卡死

  • 1024:1MB/s,中等压力

  • 512:低速,当前推荐

  • 256:超低速,wa 依旧很高的时候使用

  1. log_dir

    存放同步日志;磁盘空间紧张可以修改路径,或者定时清理旧日志。

[manager] 管理端

一般不需要改动,负责和控制面板通讯。

ini

[manager]
api_base = "http://127.0.0.1:14242"
token = "Sync@2026Tuna"
ca_cert = ""

mirrors 镜像段(两个镜像独立修改)

1.interval 定时周期(单位秒)

  • ubuntu:21600 = 6 小时同步一次

  • ubuntu‑cdimage:604800 = 7 天同步一次

你可以错开二者的触发时间,避免刚好同时启动任务。

2.rsync_options rsync 运行参数(数组格式,0.8.0 硬性语法)

当前配置:

ini

rsync_options = ["--delay-updates","--no-compress"]
  • --delay‑updates:内存缓存小文件,最后一次性顺序写入,解决随机 IO 卡顿,必开

  • --no‑compress:关闭传输压缩,节省 CPU 开销

  • 可额外可选参数(按需添加)

    • --bwlimit=512:rsync 内层限速,双重限速兜底

禁止在 global 全局添加 rsync_options,会直接造成服务崩溃。

解决双 rsync 残留进程的额外手段(配置无法管控,只能手动操作)

  1. 每次重启服务前清理僵死进程

bash

pkill rsync
sudo systemctl restart tunasync-worker
  1. 当 wa>40%、出现两条 rsync,优先杀掉所有 rsync,从根源解决磁盘争抢

  1. 整体改动优先级

整体改动优先级

  1. 优先调低下载限速 → 防止 rsync 硬盘卡死残留

  2. 两个镜像全部配置延迟写入参数

  3. 严格保持 concurrent=1

  4. 定时清理卡死的 rsync 残留进程