跳转到主要内容
本指南涵盖使用快照和状态同步快速同步 Stable 节点的各种方法。

同步方法概览

方法同步时间存储需求用例
修剪快照~10 分钟< 5 GiB常规全节点
存档快照~1 小时~500 GB存档节点,区块浏览器

官方快照

Stable 提供每日更新的官方快照(00:00 UTC)。

快照信息

类型更新频率压缩方式大小URL
修剪每日LZ4< 5 GiB下载
存档每日ZSTD~200 GB下载

使用修剪快照

修剪快照包含最近的区块链状态(最后 100-1000 个区块)。

步骤 1:设置环境变量

# 设置服务名称(默认:stable)
export SERVICE_NAME=stable

步骤 2:停止节点服务

# 停止运行中的节点
sudo systemctl stop ${SERVICE_NAME}

# 验证已停止
sudo systemctl status ${SERVICE_NAME}

步骤 3:备份当前数据(可选)

# 创建备份目录
mkdir -p ~/stable-backup

# 备份当前状态(可选,需要大量空间)
cp -r ~/.stabled/data ~/stable-backup/

步骤 4:下载并解压修剪快照

# 安装依赖
sudo apt install -y wget lz4 pv

# 创建快照目录
mkdir -p ~/snapshot
cd ~/snapshot

# 带进度显示下载修剪快照
wget -c https://stable-snapshot.s3.eu-central-1.amazonaws.com/snapshot.tar.lz4

# 替代方案:支持断点续传的下载
curl -C - -o snapshot.tar.lz4 https://stable-snapshot.s3.eu-central-1.amazonaws.com/snapshot.tar.lz4

# 删除旧数据
rm -rf ~/.stabled/data/*

# 带进度指示器解压快照
pv snapshot.tar.lz4 | tar -I lz4 -xf - -C ~/.stabled/

# 不使用 pv 的替代解压方法
tar -I lz4 -xvf snapshot.tar.lz4 -C ~/.stabled/

# 清理
rm snapshot.tar.lz4

步骤 5:重启节点

# 启动节点
sudo systemctl start ${SERVICE_NAME}

# 检查状态
sudo systemctl status ${SERVICE_NAME}

# 监控日志
sudo journalctl -u stabled -f

使用存档快照

存档快照包含完整的区块链历史。

步骤 1:准备系统

# 停止节点
sudo systemctl stop ${SERVICE_NAME}

# 安装依赖
sudo apt install -y wget zstd pv

# 检查可用磁盘空间(需要快照大小的 2 倍)
df -h ~/.stabled

步骤 2:下载并解压存档快照

# 创建工作目录
mkdir -p ~/snapshot
cd ~/snapshot

# 下载存档快照
wget -c https://stable-snapshot.s3.eu-central-1.amazonaws.com/archive.tar.zst

# 清除旧数据
rm -rf ~/.stabled/data/*

# 高内存解压以获得更好性能
pv archive.tar.zst | zstd -d --long=31 --memory=2048MB -c - | tar -xf - -C ~/.stabled/

# 替代方案:标准解压
zstd -d --long=31 archive.tar.zst -c | tar -xvf - -C ~/.stabled/

# 清理
rm archive.tar.zst

步骤 3:启动节点

# 启动服务
sudo systemctl start ${SERVICE_NAME}

# 验证同步状态
curl -s localhost:26657/status | jq '.result.sync_info'

创建您自己的快照

手动快照创建

# 停止节点
sudo systemctl stop ${SERVICE_NAME}

# 创建快照归档
cd ~/.stabled
tar -cf - data/ | lz4 -9 > ~/stable-snapshot-$(date +%Y%m%d).tar.lz4

# 创建校验和
sha256sum ~/stable-snapshot-*.tar.lz4 > checksums.txt

# 重启节点
sudo systemctl start ${SERVICE_NAME}

自动快照脚本

#!/bin/bash
# snapshot.sh - 自动快照创建

# 配置
SNAPSHOT_DIR="/var/snapshots"
STABLED_HOME="$HOME/.stabled"
KEEP_DAYS=7

# 创建快照目录
mkdir -p $SNAPSHOT_DIR

# 停止节点
sudo systemctl stop ${SERVICE_NAME}

# 创建快照
SNAPSHOT_NAME="stable-snapshot-$(date +%Y%m%d-%H%M%S).tar.lz4"
tar -cf - -C $STABLED_HOME data/ | lz4 -9 > $SNAPSHOT_DIR/$SNAPSHOT_NAME

# 生成元数据
cat > $SNAPSHOT_DIR/latest.json <<EOF
{
  "filename": "$SNAPSHOT_NAME",
  "height": "$(cat $STABLED_HOME/data/cs.wal/wal | grep height | tail -1 | awk '{print $2}' | tr -d ',')",
  "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
  "size": "$(du -h $SNAPSHOT_DIR/$SNAPSHOT_NAME | awk '{print $1}')",
  "checksum": "$(sha256sum $SNAPSHOT_DIR/$SNAPSHOT_NAME | awk '{print $1}')"
}
EOF

# 清理旧快照
find $SNAPSHOT_DIR -name "stable-snapshot-*.tar.lz4" -mtime +$KEEP_DAYS -delete

# 重启节点
sudo systemctl start ${SERVICE_NAME}

echo "快照已创建:$SNAPSHOT_DIR/$SNAPSHOT_NAME"

安排自动快照

# 添加到 crontab(每周日凌晨 2 点)
(crontab -l ; echo "0 2 * * 0 /usr/local/bin/snapshot.sh") | crontab -

验证和故障排除

验证快照完整性

# 检查快照校验和
sha256sum -c checksums.txt

# 验证解压
tar -I lz4 -tvf snapshot.tar.lz4 | head -20

# 测试快照大小
tar -I lz4 -tvf snapshot.tar.lz4 | wc -l

常见问题

问题:快照解压失败

# 检查磁盘空间
df -h

# 验证文件完整性
lz4 -t snapshot.tar.lz4

# 尝试替代解压方法
lz4 -d snapshot.tar.lz4 snapshot.tar
tar -xvf snapshot.tar -C ~/.stabled/

问题:快照后节点无法启动

# 检查权限
ls -la ~/.stabled/data/

# 修复权限
sudo chown -R $USER:$USER ~/.stabled/

# 验证创世文件
sha256sum ~/.stabled/config/genesis.json

# 重置并重试
stabled comet unsafe-reset-all
# 然后恢复快照

性能优化

下载优化

# 使用 aria2 并行下载
aria2c -x 16 -s 16 https://stable-snapshot.s3.eu-central-1.amazonaws.com/snapshot.tar.lz4

# 使用 wget 压缩
wget --header="Accept-Encoding: gzip" -c URL

# 恢复中断的下载
curl -C - -o snapshot.tar.lz4 URL

解压优化

# 使用并行解压
pigz -d -c snapshot.tar.gz | tar -xf - -C ~/.stabled/

# 监控解压进度
pv snapshot.tar.lz4 | tar -I lz4 -xf - -C ~/.stabled/

# 为 zstd 使用更多内存
zstd -d --long=31 --memory=4096MB archive.tar.zst

最佳实践

  1. 在替换数据前始终备份验证者密钥
  2. 在解压快照前验证校验和
  3. 在解压期间监控磁盘空间(需要快照大小的 2 倍)
  4. 尽可能使用官方快照
  5. 在非生产环境中先测试快照
  6. 为存档节点安排定期快照
  7. 记录快照来源以便审计追踪

下一步