硬件迁移:从 RTX 5090 (32GB) 迁移到 RTX 3090 (24GB) 主要改动: - 所有启动脚本和配置文件中的 /home/xsl/ 路径替换为 /home/ubuntu/ - 适配新的 24GB VRAM 环境
77 lines
3.3 KiB
Bash
Executable File
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
|