老铁爱金衫 2025-10-28 04:20 采纳率: 98.9%
浏览 9
已采纳

SillyTavern本地备份如何避免数据丢失?

在使用 SillyTavern 进行本地部署时,用户常将角色设定、聊天记录和扩展插件等数据保存在本地目录中。一个常见问题是:**如何确保在升级 SillyTavern 或更换设备时避免配置和对话数据丢失?** 由于其数据默认存储于客户端浏览器或特定本地文件夹(如 userdata 目录),若未明确备份这些路径中的 JSON、PNG 和日志文件,系统重装或应用更新可能导致数据被覆盖或清除。此外,部分用户误以为浏览器同步功能可跨设备保留数据,但实际上 LocalStorage 不会自动同步。因此,如何建立可靠的本地+异地双备份机制,成为保障个性化数据完整性的关键挑战。
  • 写回答

1条回答 默认 最新

  • 白街山人 2025-10-28 09:21
    关注

    1. 数据存储机制解析:SillyTavern 的本地数据结构

    SillyTavern 作为一款基于 Web 技术栈的本地化角色对话平台,其核心数据主要依赖于两种存储方式:浏览器 LocalStorage 与本地文件系统中的 userdata 目录。前者用于保存轻量级配置(如界面偏好、最近访问角色),后者则承载角色设定(JSON)、头像图像(PNG)、聊天记录(JSONL 或 TXT)以及插件配置文件。

    
    ├── userdata/
    │   ├── characters/
    │   │   └── alice.json
    │   │   └── bob.png
    │   ├── chat/
    │   │   └── alice_chat.json
    │   ├── settings/
    │   │   └── default_settings.json
    │   └── extensions/
    │       └── tts_plugin_config.json
    

    理解这一目录结构是构建备份策略的基础。若未对上述路径进行监控和归档,系统重装或应用升级极易导致数据丢失。

    2. 常见数据丢失场景分析

    • 浏览器缓存清除:用户误操作清理浏览数据,导致 LocalStorage 中的角色缓存消失。
    • 应用更新覆盖:新版 SillyTavern 可能重新初始化 userdata 文件夹。
    • 设备更换无迁移:新设备未复制旧环境的数据目录。
    • LocalStorage 同步误解:Chrome Sync 等功能仅同步扩展、书签,不包含 LocalStorage。
    • 磁盘故障或误删:缺乏冗余备份时,单点故障即造成不可逆损失。

    3. 备份策略设计原则

    原则说明实现方式
    完整性覆盖所有关键数据类型JSON、PNG、TXT、配置文件全量纳入
    时效性支持增量与定时备份cron + rsync / robocopy
    可恢复性版本化归档便于回滚Git / Zstandard 压缩包命名规范
    安全性防止未授权访问加密压缩(7z AES-256)
    跨平台兼容适应不同操作系统路径差异使用相对路径或环境变量

    4. 实施双备份机制:本地 + 异地

    1. 定义主数据源路径:~/SillyTavern/userdata 及浏览器 LocalStorage 键前缀 st_user_*
    2. 本地备份采用每日快照脚本:
    
    #!/bin/bash
    TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
    BACKUP_DIR="$HOME/backup/sillytavern/local"
    SOURCE_DIR="$HOME/SillyTavern/userdata"
    
    mkdir -p "$BACKUP_DIR"
    tar -czf "$BACKUP_DIR/st_backup_$TIMESTAMP.tar.gz" -C "$SOURCE_DIR" .
    find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete
    
    1. 异地备份通过 RCLONE 同步至云存储(如 Backblaze B2、OneDrive):
    
    rclone sync "$BACKUP_DIR" remote:st-backup --exclude "*.tmp"
    

    5. 浏览器数据提取与持久化

    LocalStorage 数据虽不易导出,但可通过开发者工具手动导出,或编写自动化脚本注入页面执行提取:

    
    // 导出 LocalStorage 到 JSON 文件(需在控制台运行)
    const data = {};
    for (let i = 0; i < localStorage.length; i++) {
      const key = localStorage.key(i);
      if (key.startsWith('st_')) {
        data[key] = localStorage.getItem(key);
      }
    }
    copy(data); // 手动粘贴保存
    

    更高级方案可集成 Puppeteer 自动化流程,在每次会话结束时抓取并合并至主备份流。

    6. 灾难恢复流程图

    graph TD
        A[发生数据丢失] --> B{判断丢失类型}
        B -->|仅本地损坏| C[从异地云存储拉取最新备份]
        B -->|全盘崩溃| D[重建环境并挂载备份镜像]
        C --> E[解压 tar.gz 至 userdata 目录]
        D --> E
        E --> F[验证角色与聊天记录完整性]
        F --> G[启动 SillyTavern 测试加载]
        G --> H[恢复完成]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月29日
  • 创建了问题 10月28日