1. Rsync 服务深度解析:从原理到生产环境部署
在数据备份与同步领域,Rsync 一直是运维工程师手中的瑞士军刀。这个诞生于1996年的工具,至今仍是跨服务器文件同步的事实标准。不同于简单的scp拷贝,Rsync的核心价值在于其差异同步算法——只传输源文件和目标文件之间的差异部分,这使得它在处理大文件或频繁更新的场景时,能节省90%以上的带宽和传输时间。
我在管理分布式集群时,曾用Rsync同步过单节点500GB的日志目录。实测显示,首次全量同步耗时2小时,而后续增量同步仅需3-5分钟。这种效率来自于Rsync的三重优化:滚动校验算法(rolling checksum)快速定位差异块、压缩传输减少带宽占用、以及灵活的排除规则避免无效传输。
2. Rsync 核心工作机制
2.1 差异同步算法实现原理
Rsync的智能同步依赖于其核心的"滚动校验-块匹配"机制。当同步文件时:
- 分块处理:将目标文件分割为固定大小(默认4KB)的连续块
- 双重校验:对每个块计算弱校验(快速但可能冲突)和强校验(MD5确保精确)
- 差异比对:源端通过滚动窗口计算,只发送目标端缺失的块
- 重组文件:接收方用已有块和新块重组完整文件
# 查看rsync算法调试信息(需-vv参数) rsync -avvv --progress source/ user@remote:/destination/注意:块大小可通过
--block-size调整,较大的值适合大文件但会降低差异检测精度
2.2 传输加密与认证方式
Rsync支持三种安全连接方式:
| 协议 | 端口 | 认证方式 | 适用场景 |
|---|---|---|---|
| SSH | 22 | 系统用户密码/密钥 | 临时同步、少量服务器 |
| Rsync守护进程 | 873 | 模块用户/密码文件 | 大规模自动化同步 |
| 明文TCP | 自定义 | 无 | 内网可信环境调试 |
生产环境推荐使用SSH证书认证,避免密码泄露风险。生成专用密钥对:
ssh-keygen -t ed25519 -f ~/.ssh/rsync_key ssh-copy-id -i ~/.ssh/rsync_key.pub user@remote3. 生产级Rsync服务部署
3.1 守护进程模式配置
对于需要7x24小时同步的服务,需配置rsyncd守护进程:
- 创建配置文件
/etc/rsyncd.conf:
[web_backup] path = /data/websites comment = Web content backup uid = www-data gid = www-data read only = yes auth users = backup secrets file = /etc/rsyncd.secrets- 设置认证密码文件:
echo "backup:SecurePass123" > /etc/rsyncd.secrets chmod 600 /etc/rsyncd.secrets- 启动服务并设置防火墙规则:
systemctl enable --now rsync firewall-cmd --add-service=rsync --permanent firewall-cmd --reload3.2 高级同步策略示例
增量备份保留方案
#!/bin/bash # 保留最近7天的增量备份 BACKUP_DIR="/backups/$(date +%Y%m%d)" PREV_DIR="/backups/$(date -d '1 day ago' +%Y%m%d)" rsync -a --link-dest="$PREV_DIR" \ --delete --exclude="*.tmp" \ /data/ $BACKUP_DIR # 清理旧备份 find /backups/ -type d -mtime +7 | xargs rm -rf实时监控同步方案
inotifywait -mrq --format '%w%f' -e modify,create,delete /data | while read file; do rsync -az --delete /data/ backup-server:/backups/ done4. 性能调优与故障排查
4.1 传输瓶颈诊断方法
当同步速度异常时,按以下步骤排查:
网络测试:
iperf3 -c remote_server # 测试裸带宽 rsync --bwlimit=10M # 限速测试稳定性磁盘IO检查:
iostat -x 1 # 查看磁盘利用率 rsync --no-whole-file # 强制使用增量传输算法优化:
rsync -W # 禁用增量校验(全文件传输) rsync --block-size=8192 # 调整块大小
4.2 常见错误解决方案
| 错误代码 | 原因分析 | 解决方案 |
|---|---|---|
| 255 | SSH连接问题 | 检查~/.ssh/config权限 |
| 12 | 目标磁盘空间不足 | 添加--min-size=1M过滤小文件 |
| 23 | 部分文件传输中断 | 使用--partial续传 |
| 11 | 输入/输出错误 | 检查磁盘SMART状态 |
5. 企业级应用场景实践
5.1 跨数据中心同步架构
在混合云环境中,我们采用三级同步策略:
- 边缘节点:使用rsync inotify实现实时变更捕获
- 区域中心:每15分钟聚合边缘数据(
--delay-updates) - 核心数据中心:每日全量校验(
--checksum)
graph TD A[边缘节点] -->|实时同步| B[区域中心] B -->|定时聚合| C[核心数据中心]5.2 与版本控制系统集成
将Rsync作为Git大文件存储的传输层:
git config --global filter.rsync.clean "rsync -a --delete %f /git-lfs-store/" git config --global filter.rsync.smudge "rsync -a /git-lfs-store/%f ."这种方案特别适合游戏开发中的美术资源管理,相比原生Git-LFS节省50%存储空间。
6. 安全加固方案
6.1 网络层防护
使用TLS隧道增强传统rsync协议:
stunnel -d 8873 -r localhost:873 -p /etc/stunnel/stunnel.pem实施IP白名单限制:
# rsyncd.conf hosts allow = 192.168.1.0/24, 10.0.0.5
6.2 文件系统隔离
通过命名空间实现同步隔离:
unshare --mount --uts --ipc --net --pid --fork \ --mount-proc --user --map-root-user \ rsync --server --daemon .7. 监控与日志分析
7.1 Prometheus监控指标
通过rsync_exporter采集关键指标:
# prometheus.yml scrape_configs: - job_name: 'rsync' static_configs: - targets: ['rsync-exporter:9123']关键监控项包括:
rsync_transferred_bytes_totalrsync_errors_totalrsync_latency_seconds
7.2 ELK日志分析配置
Rsync日志转JSON格式示例:
filter { grok { match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:host} %{WORD:program}\[%{NUMBER:pid}\]: %{GREEDYDATA:msg}" } } date { match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } }8. 替代方案对比
8.1 与传统工具对比
| 工具 | 增量同步 | 断点续传 | 加密传输 | 适合场景 |
|---|---|---|---|---|
| rsync | ✓ | ✓ | ✓ | 通用文件同步 |
| scp | ✗ | ✗ | ✓ | 简单文件传输 |
| tar+ssh | ✗ | ✗ | ✓ | 目录打包传输 |
| rclone | ✓ | ✓ | ✓ | 云存储同步 |
8.2 与分布式系统对比
当文件数量超过1千万时,考虑:
- SeaweedFS:适合小文件海量存储
- Ceph:提供块/文件/对象统一存储
- Syncthing:去中心化P2P同步
但Rsync在以下场景仍不可替代:
- 已有服务器架构下的快速部署
- 需要精细控制传输参数的场景
- 对系统资源占用敏感的环境
9. 性能基准测试
9.1 测试环境配置
使用fio生成测试数据集:
fio --name=test --size=10G --rw=write --bs=4k --directory=/test9.2 同步效率对比
测试10GB虚拟机镜像的同步耗时:
| 模式 | 首次同步 | 1%变更 | 10%变更 |
|---|---|---|---|
| rsync -a | 5m12s | 8s | 38s |
| rsync -a -z | 3m45s | 6s | 29s |
| scp | 6m50s | 6m50s | 6m50s |
| tar + ssh | 4m20s | 4m20s | 4m20s |
10. 进阶技巧汇编
10.1 带宽限制策略
动态调整带宽占用:
#!/bin/bash while true; do hour=$(date +%H) if (( hour >= 8 && hour <= 18 )); then bwlimit=5M # 工作时间限速 else bwlimit=50M # 夜间全速 fi rsync --bwlimit=$bwlimit -a source/ dest/ sleep 300 done10.2 内存优化方案
对于低内存设备(如树莓派):
rsync --no-compress --temp-dir=/tmp \ --whole-file --no-inc-recursive \ --max-alloc=1M10.3 自动化校验机制
同步后验证文件一致性:
rsync -avc --checksum --dry-run source/ dest/11. 容器化部署方案
11.1 Docker镜像构建
FROM alpine:3.14 RUN apk add --no-cache rsync openssh COPY rsyncd.conf /etc/ VOLUME /data EXPOSE 873 CMD ["rsync", "--daemon", "--no-detach"]11.2 Kubernetes部署
rsync-daemonset.yaml示例:
apiVersion: apps/v1 kind: DaemonSet metadata: name: rsync-node spec: selector: matchLabels: app: rsync template: spec: containers: - name: rsync image: custom/rsync:v3 volumeMounts: - mountPath: /data name: sync-data volumes: - name: sync-data hostPath: path: /var/rsync12. Windows系统适配
12.1 Cygwin环境配置
安装必要组件:
setup-x86_64.exe -q -P rsync,openssh,cygrunsrv创建系统服务:
cygrunsrv -I rsyncd -p /usr/bin/rsync -a \ "--daemon --no-detach --config=/etc/rsyncd.conf"
12.2 权限映射处理
在rsyncd.conf中添加:
[global] strict modes = false ignore errors = yes transfer logging = yes log file = /var/log/rsyncd.log13. 备份系统集成
13.1 与Baculum整合
在bacula-dir.conf中添加:
Job { Name = "Daily-Rsync" Level = Incremental FileSet = "Rsync-Files" Schedule = "WeeklyCycle" RunBeforeJob = "/scripts/trigger_rsync.sh" }13.2 ZFS快照配合
# 创建快照 zfs snapshot pool/data@$(date +%Y%m%d) # 同步快照 rsync -a --delete /pool/data/.zfs/snapshot/$(date +%Y%m%d)/ \ backup:/pool/replica/14. 协议扩展开发
14.1 自定义模块示例
用Python扩展rsync协议:
import rsync class MyRsync(rsync.Rsync): def filter(self, filename): if filename.endswith('.tmp'): return False return True server = MyRsync() server.run()14.2 性能分析插件
使用SystemTap监控rsync:
probe process("/usr/bin/rsync").function("*") { printf("%s -> %s\n", thread_indent(1), probefunc()) }15. 多云环境实践
15.1 AWS S3同步方案
通过rclone桥接:
rclone sync /local/path remote:s3-bucket \ --transfers=32 \ --s3-upload-cutoff=1GB \ --s3-chunk-size=128M15.2 阿里云OSS集成
使用ossutil工具链:
ossutil64 sync /local/dir oss://bucket/path \ --update \ --parallel=10 \ --retry-times=516. 大规模部署优化
16.1 分片同步策略
# 按文件首字母分片 for letter in {a..z}; do rsync -a --include="${letter}*" --exclude="*" \ source/ dest_${letter}/ done16.2 集群化部署架构
使用Ansible批量配置:
- hosts: rsync_nodes tasks: - name: Deploy rsyncd config template: src: rsyncd.conf.j2 dest: /etc/rsyncd.conf - name: Create data directory file: path: "/data/{{ inventory_hostname }}" state: directory17. 审计与合规
17.1 GDPR合规配置
在rsyncd.conf中添加:
[audit] log format = %o %h [%a] %m %f %l syslog facility = local517.2 文件完整性监控
使用AIDE进行基线检查:
aide --init mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz aide --check18. 灾难恢复方案
18.1 全量备份策略
#!/bin/bash BACKUP_ROOT="/backups/$(date +%Y%m%d)" mkdir -p "$BACKUP_ROOT" cat <<EOF > "$BACKUP_ROOT/restore.sh" #!/bin/bash rsync -a --numeric-ids --delete \\ $BACKUP_ROOT/ / EOF rsync -aAXv --delete --numeric-ids \ --exclude={"/dev/*","/proc/*","/sys/*"} \ / "$BACKUP_ROOT/"18.2 增量恢复流程
for day in {7..1}; do rsync -a --delete \ --link-dest="/backups/$(date -d "${day} days ago" +%Y%m%d)/" \ "/backups/$(date -d "${day} days ago" +%Y%m%d)/" /mnt/recovered/ if [ $? -eq 0 ]; then break fi done19. 性能调优参数
19.1 网络相关参数
| 参数 | 默认值 | 推荐值 | 作用 |
|---|---|---|---|
| --bwlimit | 无限制 | 10M | 限制带宽占用 |
| --compress-level | 6 | 3 | 压缩级别平衡CPU/带宽 |
| --partial-dir | 无 | .rsync-partial | 断点续传目录 |
19.2 文件处理参数
rsync -a --no-whole-file \ # 强制增量模式 --inplace \ # 直接修改目标文件 --preallocate \ # 预分配磁盘空间 --max-size=10G \ # 限制单个文件大小 --min-size=1M # 过滤小文件20. 未来演进方向
20.1 基于eBPF的性能优化
使用BPF程序监控rsync系统调用:
SEC("tracepoint/syscalls/sys_enter_sendfile") int bpf_sendfile_enter(struct trace_event_raw_sys_enter* ctx) { u64 pid = bpf_get_current_pid_tgid(); if (pid == rsync_pid) { bpf_printk("rsync sendfile call\n"); } return 0; }20.2 QUIC协议支持
实验性QUIC传输分支:
git clone https://github.com/quic-rsync/rsync cd rsync && ./configure --with-quic21. 社区资源推荐
21.1 核心开发资源
- 官方代码库:https://github.com/WayneD/rsync
- 算法论文:《The rsync algorithm》by Andrew Tridgell
- 性能白皮书:Rsync vs Rclone基准测试报告
21.2 第三方工具链
- lsyncd:实时监控+rsync触发
- rsnapshot:基于rsync的快照工具
- grsync:图形化前端
- rdiff-backup:增量备份系统
22. 安全漏洞历史
22.1 CVE重点记录
| CVE-ID | 影响版本 | 风险等级 | 修复方案 |
|---|---|---|---|
| CVE-2022-29154 | <3.2.5 | 高危 | 升级到3.2.5+ |
| CVE-2020-14387 | <3.2.3 | 中危 | 限制模块路径访问 |
| CVE-2017-16548 | <3.1.3 | 高危 | 禁用匿名模块 |
22.2 加固检查清单
- [ ] 禁用
--no-implied-dirs选项 - [ ] 设置
use chroot = yes - [ ] 定期轮换认证密钥
- [ ] 启用
refuse options = delete
23. 监控指标详解
23.1 关键性能指标
传输效率:
- 文件传输速率(MB/s)
- 差异检测耗时(ms/file)
资源占用:
- 内存使用峰值(MB)
- CPU平均负载(%)
成功率:
- 完整同步周期
- 失败文件计数
23.2 Prometheus指标示例
- name: rsync_transfer_duration help: Time spent transferring files type: histogram buckets: [0.1, 0.5, 1, 5, 10] - name: rsync_checksum_calls help: Number of checksum computations type: counter24. 日志分析实战
24.1 典型日志模式
2023/08/01 12:34:56 [12345] receiving file list 2023/08/01 12:35:02 [12345] sent 1024 bytes received 2048 bytes total size 4096 2023/08/01 12:35:07 [12345] rsync error: some files could not be transferred (code 23)24.2 ELK解析规则
{ "grok": { "match": { "message": "%{TIMESTAMP_ISO8601:timestamp} %{NUMBER:pid} %{WORD:action}: %{GREEDYDATA:detail}" } }, "date": { "match": ["timestamp", "ISO8601"] } }25. 压力测试方案
25.1 测试数据集生成
使用fio创建混合负载:
[global] ioengine=libaio size=10G runtime=300s [rsync-test] directory=/test rw=write bs=4k-64k iodepth=16 numjobs=825.2 性能拐点检测
通过逐渐增加并发数,观察系统负载变化:
| 并发数 | CPU负载 | 内存占用 | 吞吐量 |
|---|---|---|---|
| 1 | 15% | 200MB | 50MB/s |
| 8 | 60% | 800MB | 180MB/s |
| 16 | 90% | 1.2GB | 210MB/s |
| 32 | 100% | 1.5GB | 190MB/s |
26. 自动化运维集成
26.1 Ansible Playbook示例
- name: Configure rsync server hosts: backup_servers tasks: - name: Install rsync package: name=rsync state=present - name: Configure rsyncd template: src: rsyncd.conf.j2 dest: /etc/rsyncd.conf mode: 0644 - name: Start service service: name: rsync state: started enabled: yes26.2 Terraform模块
resource "aws_instance" "rsync" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t3.medium" provisioner "file" { source = "rsyncd.conf" destination = "/etc/rsyncd.conf" } provisioner "remote-exec" { inline = [ "systemctl enable --now rsync" ] } }27. 成本优化策略
27.1 带宽成本计算
公式:总成本 = 数据量(GB) × 传输次数 × 每GB单价
示例场景:
- 每日增量数据:50GB
- 跨云传输单价:$0.05/GB
- 月成本:
50 × 30 × 0.05 = $75
优化方案:
- 启用压缩:
--compress节省40%流量 - 调整同步频率:非关键数据改为每日一次
27.2 存储优化方案
使用--link-dest硬链接节省空间:
rsync -a --link-dest=/backups/prev/ \ /data/ /backups/$(date +%Y%m%d)/存储节省率计算:
原始数据:100GB 每日变更:5GB 30天传统备份:100 + 5×30 = 250GB 硬链接备份:100 + 5×30 = 155GB (节省38%)28. 跨平台兼容方案
28.1 Windows权限映射
在rsyncd.conf中配置:
[global] fake super = yes map users = * map groups = *28.2 macOS扩展属性
保留资源派生数据:
rsync -aE /path/src/ /path/dst/29. 基准测试方法论
29.1 测试环境标准化
硬件配置:
- CPU:至少4核
- 内存:8GB+
- 磁盘:SSD阵列
网络环境:
- 延迟:<50ms
- 带宽:1Gbps专用链路
- 包丢失率:<0.1%
29.2 测试指标定义
- 吞吐量:MB/s(扣除协议开销)
- 文件处理速率:files/sec
- CPU效率:MB/s per core
- 内存效率:MB/s per GB RAM
30. 新兴技术整合
30.1 与IPFS集成
通过FUSE挂载IPFS到本地:
ipfs mount /mnt/ipfs rsync -a /data/ /mnt/ipfs/data/30.2 区块链校验方案
记录文件哈希到以太坊:
contract RsyncAudit { mapping(string => bytes32) public hashes; function storeHash(string memory path, bytes32 hash) public { hashes[path] = hash; } }31. 行业应用案例
31.1 影视制作流水线
某动画工作室的资产同步方案:
- 500TB NAS存储集群
- 全球5个制作中心
- 使用rsync over SSH隧道
- 每日同步量:20TB+
关键配置:
timeout = 3600 lock file = /var/run/rsync.lock refuse options = delete31.2 科研数据同步
高能物理实验数据同步特点:
- 单文件大小:100GB+
- 每日新增:5TB
- 使用
--inplace避免临时文件 --whole-file禁用分块校验
32. 协议扩展开发
32.1 自定义校验算法
修改rsync/hash.c:
void get_checksum2(char *buf, int len, char *sum) { // 替换为xxHash算法 XXH64_hash_t hash = XXH64(buf, len, 0); memcpy(sum, &hash, 8); }32.2 异步IO支持
使用libuv改造网络层:
uv_fs_t read_req; uv_fs_read(uv_default_loop(), &read_req, fd, &buf, 1, -1, on_read);33. 性能调优案例
33.1 海量小文件优化
某社交平台的图片同步方案:
- 文件数量:2亿+
- 平均大小:50KB
- 优化措施:
--no-recursive+ 并行实例- inode缓存预热
- XFS文件系统+更大inode表
33.2 跨国同步加速
采用中继服务器架构:
东京办公室 -> 香港中继 -> 法兰克福数据中心技术要点:
- TCP BBR拥塞控制
--bwlimit时区感知调整- 压缩算法测试(最终选用zstd)
34. 安全审计方案
34.1 渗透测试要点
模块路径遍历测试:
rsync rsync://target::module/../../etc/passwd ./密码爆破防护:
# rsyncd.conf max connections = 10 lock file = /var/run/rsyncd.lock
34.2 SELinux策略
自定义策略模块:
checkmodule -M -m -o rsync.mod rsync.te semodule_package -o rsync.pp -m rsync.mod semodule -i rsync.pp35. 容器化最佳实践
35.1 Kubernetes Sidecar模式
rsync-sidecar.yaml:
containers: - name: app image: nginx volumeMounts: - name: data mountPath: /var/www - name: rsync image: rsync-daemon volumeMounts: - name: data mountPath: /data args: ["--daemon", "--config=/etc/rsyncd.conf"]35.2 持久化存储方案
使用CSI驱动:
volumes: - name: data csi: driver: rsync.csi.k8s.io volumeAttributes: source: "nfs-server:/export/path"36. 监控体系构建
36.1 关键告警规则
Prometheus告警示例:
- alert: RsyncTransferSlow expr: rate(rsync_transferred_bytes_total[5m]) < 102400 for: 15m labels: severity: warning annotations: summary: "Rsync throughput below 100KB/s"36.2 健康检查端点
HTTP健康检查脚本:
#!/bin/bash if pgrep -x rsync >/dev/null; then echo "HTTP/1.1 200 OK" else echo "HTTP/1.1 503 Service Unavailable" fi37. 备份验证策略
37.1 随机抽样检验
# 随机选择5%文件校验 find /backup -type f | shuf -n $(($(find /backup -type f | wc -l)/20)) | while read file; do cmp "$file" "/original/${file#/backup/}" done37.2 元数据完整性
验证关键属性:
rsync -avnc --checksum --itemize-changes \ /backup/ /original/ | grep -v '^\.'38. 文档自动同步
38.1 与Markdown集成
Git钩子示例:
#!/bin/sh # .git/hooks/post-commit rsync -a --delete \ --filter=':- .gitignore' \ . user@remote:/var/wiki/$(git rev-parse --abbrev-ref HEAD)/38.2 版本化备份
结合git annex:
git annex add largefile rsync -a --progress /source/ remote:/dest/ git annex sync --content39. 性能分析工具
39.1 使用strace跟踪
分析系统调用瓶颈:
strace -f -tt -T -o rsync.log rsync -av source/ dest/39.2 perf火焰图生成
perf record -F 99 -g -- rsync -av source/ dest/ perf script | stackcollapse-perf.pl | flamegraph.pl > rsync.svg40. 网络拓扑优化
40.1 多路径传输方案
结合mptcpd:
mptcpize run rsync -av source/ dest/40.2 智能路由选择
基于RTT检测:
if ping -c1 dc1 >/dev/null && [ $(ping -c1 dc1 | awk -F'/' '/rtt/ {print $5}') -lt 50 ]; then rsync -av source/ dc1:/dest/ else rsync -av source/ dc2:/dest/ fi41. 存储引擎适配
41.1 Ceph RBD集成
通过rbd-nbd映射:
rbd map pool/volume -n client.rsync rsync -av /source/ /mnt/rbd/41.2 GlusterFS优化
使用--rsync-options:
gluster volume set vol rsync-options "--bwlimit=10M --compress"42. 认证增强方案
42.1 OTP双因素认证
集成Google Authenticator:
# rsyncd.conf auth users = @otp-users secrets file = /etc/rsyncd.secrets42.2 证书双向验证
使用OpenSSL客户端证书:
[global] ssl cert = /etc/ssl/certs/rsync.crt ssl key = /etc/ssl/private/rsync.key ssl ca cert = /etc/ssl/certs/ca.crt43. 日志分析进阶
43.1 传输模式识别
分析日志中的模式特征:
grep -oP '\[sender\|receiver\]' /var/log/rsyncd.log | sort | uniq -c43.2 异常检测规则
使用Fluentd过滤:
<filter rsync.**> @type grep <regexp> key message pattern /error|failed|denied/ </regexp> </filter>44. 系统资源限制
44.1 内存控制方案
使用cgroups v2:
mkdir /sys/fs/cgroup/rsync/ echo "500M" > /sys/fs/cgroup/rsync/memory.max echo $$ > /sys/fs/cgroup/rsync/cgroup.procs rsync -av source/ dest/44.2 IO优先级调整
使用ionice:
ionice -c2 -n7 rsync -av source/ dest/45. 协议分析工具
45.1 抓包解码方法
使用Wireshark过滤器:
tcp.port == 873 && rsync45.2 流量可视化
GoAccess分析:
cat /var/log/rsyncd.log | goaccess --log-format='%d %t %v [%^]: %m %f %l' -o report.html46. 自动化测试框架
46.1 集成测试方案
使用BATS测试框架:
@test "incremental sync" { run rsync -av --dry-run src/ dst/ [ "$status" -eq 0 ] [[ "$output" =~ "sent.*bytes" ]] }46.2 模糊测试实施
使用AFL++:
afl-fuzz -i testcases/ -o findings/ \ -- ./rsync --server --daemon .