持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第 2 天,点击查看活动详情
我怎么会错呢,我错了我会知道的 ...
-- 张三如是说
1. 事件始末
在 #JFrog Artifactory 存储迁移方案踩坑指南文中,介绍了同时挂载两个 S3 存储的方案,在此基础上,底层 S3 做增量文件同步。
Artifactory 底层采用哈希值命名文件,所有文件分布在 00,01,02,...,fe,ff
这些文件夹中,为实现同步加速,我们采用多台服务器分段同步的方式进行。
下面是最初的同步脚本,target.txt
每行一个目录名称,00,01,02...
。
#!/bin/bash
for line in $(cat target.txt); do
rsync -auvrt --progress --ignore-existing --ignore-errors /artifactory/filestore/${line} /eds-artifactory/filestore/${line} > ${line}.log
done
十一假期里,三台服务器开足马力的同步,结果刚上班,就一群人报障: Artifactory 无法下载制品
。经过各种排查,最后发现同步导致的,竟然在目标目录中又创建了新的目录
。目标路径变成了 00/00/*
。
紧急修复,就是挪路径,又跑了一天一夜。😭
2. 寻找真相
构建如下试验环境:
$ tree -L 3 .
.
├── abc
│ └── a
│ ├── a.txt
│ └── b.txt
└── bcd
执行与生产环境类似的命令:
$ rsync -auvt --progress --ignore-existing --ignore-errors ./abc/a ./bcd
sending incremental file list
a/ <--- 看到没,这里新增了目录
a/a.txt
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=1/3)
a/b.txt
0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=0/3)
sent 179 bytes received 58 bytes 474.00 bytes/sec
total size is 0 speedup is 0.00
根据经验判断,极有可能是斜杠导致的。执行修改后的命令:
$ rsync -auvt --progress --ignore-existing --ignore-errors ./abc/a/ ./bcd
sending incremental file list
./ <--- 看到没,不再新增路径
a.txt
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=1/3)
b.txt
0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=0/3)
sent 168 bytes received 57 bytes 450.00 bytes/sec
total size is 0 speedup is 0.00
3. 结论
到此,如果你还没有发现问题在哪,我们来对比下:
# 异常
rsync -auvt --progress --ignore-existing --ignore-errors ./abc/a ./bcd
# 正常
rsync -auvt --progress --ignore-existing --ignore-errors ./abc/a/ ./bcd
也就是说,源地址中,最后少了个斜杠
。看来想做个 斜杠好少年
并没有那么容易,一不小心掉坑里,真是几天爬不出来。