Files
change_hair/sync_all.sh
T
xsl 6f34e8876c feat: 适配 RTX 3090 (24GB) 环境优化
硬件迁移:从 RTX 5090 (32GB) 迁移到 RTX 3090 (24GB)

主要改动:
- 所有启动脚本和配置文件中的 /home/xsl/ 路径替换为 /home/ubuntu/
- 适配新的 24GB VRAM 环境
2026-07-18 19:00:15 +08:00

77 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
# 全自动串行 rsync 同步脚本
# 策略:单链路串行传输,避免并行抢带宽;按依赖优先级排序
# 已传数据自动续传(--partial)
set -u
LOGDIR="/home/ubuntu/change_hair/project/logs"
DONE_MARKER="$LOGDIR/sync_all.done"
mkdir -p "$LOGDIR"
# 如果已全部完成,直接退出
[ -f "$DONE_MARKER" ] && { echo "所有同步任务已完成,跳过"; exit 0; }
# 任务定义:名称|源|目标
# 优先级排序:换发色关键链路优先 → 换发型 → 训练相关 → 大数据最后
TASKS=(
"photo_service|szlc@192.168.101.63:/home/szlc/project/photo_service/|/home/ubuntu/change_hair/project/photo_service/"
"project_data|szlc@192.168.101.63:/home/szlc/project/data/|/home/ubuntu/change_hair/project/data/"
"hair_service_sd|szlc@192.168.101.63:/home/szlc/project/hair_service_sd/|/home/ubuntu/change_hair/project/hair_service_sd/"
"conda_py310|szlc@192.168.101.63:/home/szlc/miniconda3/envs/py310/|/home/ubuntu/miniconda3/envs/py310/"
"conda_my_hair|szlc@192.168.101.63:/home/szlc/miniconda3/envs/my_hair/|/home/ubuntu/miniconda3/envs/my_hair/"
"conda_sdwebui|szlc@192.168.101.63:/home/szlc/miniconda3/envs/sdwebui/|/home/ubuntu/miniconda3/envs/sdwebui/"
"kohya_ss_home|szlc@192.168.101.63:/home/szlc/project/kohya_ss_home/|/home/ubuntu/change_hair/project/kohya_ss_home/"
"onediff|szlc@192.168.101.63:/home/szlc/project/onediff/|/home/ubuntu/change_hair/project/onediff/"
"train_material|szlc@192.168.101.63:/data/train_material/|/home/ubuntu/change_hair/data/train_material/"
)
echo "========================================" | tee -a "$LOGDIR/sync_main.log"
echo "串行同步开始: $(date '+%Y-%m-%d %H:%M:%S')" | tee -a "$LOGDIR/sync_main.log"
echo "========================================" | tee -a "$LOGDIR/sync_main.log"
FAIL=0
for task in "${TASKS[@]}"; do
NAME="${task%%|*}"; rest="${task#*|}"
SRC="${rest%%|*}"; DST="${rest#*|}"
TLOG="$LOGDIR/sync_${NAME}.log"
# 已完成的任务跳过(用标记文件判断)
if [ -f "$LOGDIR/sync_${NAME}.ok" ]; then
echo "[$(date '+%H:%M:%S')] [$NAME] 已完成,跳过" | tee -a "$LOGDIR/sync_main.log"
continue
fi
echo "[$(date '+%H:%M:%S')] [$NAME] 开始: $SRC -> $DST" | tee -a "$LOGDIR/sync_main.log"
mkdir -p "$DST"
# rsync 串行传输,最多重试3次
RETRY=0
while [ $RETRY -lt 3 ]; do
if rsync -a --partial --inplace --info=progress2,NAME0 \
-e "ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=15" \
"$SRC" "$DST" >>"$TLOG" 2>&1; then
touch "$LOGDIR/sync_${NAME}.ok"
echo "[$(date '+%H:%M:%S')] [$NAME] 完成 ✓" | tee -a "$LOGDIR/sync_main.log"
break
else
RETRY=$((RETRY+1))
echo "[$(date '+%H:%M:%S')] [$NAME] 第${RETRY}次失败,重试中..." | tee -a "$LOGDIR/sync_main.log"
sleep 5
fi
done
if [ $RETRY -ge 3 ]; then
echo "[$(date '+%H:%M:%S')] [$NAME] 失败 ✗ (重试3次)" | tee -a "$LOGDIR/sync_main.log"
FAIL=$((FAIL+1))
fi
done
echo "========================================" | tee -a "$LOGDIR/sync_main.log"
echo "同步全部结束: $(date '+%Y-%m-%d %H:%M:%S'), 失败任务数: $FAIL" | tee -a "$LOGDIR/sync_main.log"
echo "========================================" | tee -a "$LOGDIR/sync_main.log"
if [ $FAIL -eq 0 ]; then
touch "$DONE_MARKER"
echo "全部成功完成" | tee -a "$LOGDIR/sync_main.log"
fi