Files
dsh_ai1net_server/scripts/switch-B2b-push.sh
T

30 lines
1.6 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# B2' 步:47 → 106 直推生产 dataRoot(tar-over-ssh;只用命令执行,绕开 rsync 协议问题)
# · tar --numeric-owner 保 uid/gid(否则 106 上属主错 ⇒ 实例 EACCES)
# · 排除 dshs.db*(权威源=47 的 PG)与 secret.key(主密钥不外扩 —— R5 最小面)
set -uo pipefail
KEY=/root/.ssh/dshworker_ed25519
DST=[email protected]
SSHO="-i $KEY -o BatchMode=yes -o StrictHostKeyChecking=accept-new"
echo "=== 1) 目标端准备(ssh -n 防抢 stdin) ==="
ssh -n $SSHO "$DST" 'mkdir -p /var/lib/dshs && echo " ready: $(ls -ld /var/lib/dshs)"'
echo "=== 2) 推送(tar → ssh → tar --numeric-owner -x) ==="
cd /var/lib/dshs
tar --numeric-owner -cf - \
--exclude=./dshs.db --exclude=./dshs.db-shm --exclude=./dshs.db-wal --exclude=./secret.key \
. | ssh $SSHO "$DST" 'tar -C /var/lib/dshs --numeric-owner -xf -'
rc=$?
echo " 管道 rc=$rc"
echo "=== 3) 目标端核对 ==="
ssh -n $SSHO "$DST" 'bash -c "
echo \" 顶层: \$(ls /var/lib/dshs | tr \"\n\" \" \")\"
echo \" 总量: \$(du -sh /var/lib/dshs | cut -f1)\"
echo \" users 目录数: \$(ls /var/lib/dshs/users | wc -l)\"
echo \" --- 属主抽样(应与 47 的 uid 一致) ---\"
for d in /var/lib/dshs/users/*/; do printf \" %-38s uid=%s\n\" \"\$(basename \$d)\" \"\$(stat -c %u \$d)\"; done
echo \" bundled-skills=\$(ls /var/lib/dshs/bundled-skills | wc -l) business-plugins=\$(ls /var/lib/dshs/business-plugins | wc -l)\"
echo \" ⛔ 不该有 dshs.db/secret.key: \$(ls /var/lib/dshs/dshs.db /var/lib/dshs/secret.key 2>/dev/null | wc -l) 个(应 0)\"
"'