Gå til innholdet

Sikkerhetskopier og gjenopprett

Denne guiden dekker de fem tingene folk faktisk gjør med sikkerhetskopier: tar én, henter den ut, flytter et arbeidsområde, legger én tilbake og oppbevarer kopier utenfor maskinen. Den nøyaktige formen på hver artefakt og operasjon står i sikkerhetskopireferansen.

Alt her ligger under Innstillinger → Server → Sikkerhetskopi og gjenoppretting.

  • En full klient — skrivebords- eller nettappen. En telefon som er paret, kan ikke utløse noe av dette, og det er med vilje.
  • Å ta, liste opp, laste ned eller slette et installasjonsøyeblikksbilde: eieren av installasjonen.
  • For handlinger per arbeidsområde: admin i det arbeidsområdet for å eksportere, eier for å importere eller slette det.
  • For ned- og opplastinger: en direkte tilkobling til serveren. Det formidlede reléet bærer RPC-rammer, ikke filoverføringer, og overføringskontrollene slår seg av med et varsel når du er på ett.

Begge artefaktene er bare databaser:

  • Et installasjonsøyeblikksbilde er en katalog med tidsstempel: manifest.json, global.db og én <workspaceId>/workspace.db per arbeidsområde.
  • En arbeidsområdeeksport er den ene filen workspace.db.

Ingen av dem tar med resten av datakatalogen: secrets.json (paringsnøkler, leverandørpåloggingsinformasjon, SSO), et arbeidsområdes blobs/ (bilder limt inn i meldinger), skills/, agents/, chat_credentials/, opptak av møtelyd eller bilder fra stasjoner. Noe av dette er unødvendig å ta vare på, og noe er det ikke — den fulle tabellen står i referansen, og det å dekke det er nettopp hensikten med avsnittet om å kopiere ut av maskinen.

  1. Åpne Innstillinger → Server → Sikkerhetskopi og gjenoppretting.
  2. Under Installasjonsøyeblikksbilder trykker du Sikkerhetskopier nå.
  3. Varselet oppgir katalogen som ble skrevet, på verten som kjører serveren. Det nye øyeblikksbildet vises øverst i listen.

Serveren kjører videre hele tiden. Hver fil skrives med VACUUM INTO, som er konsistent mot en aktiv database, så det trengs ingen vedlikeholdsstopp og ingen grunn til å stanse agenter.

Hver rad i listen viser tidsstempelet, størrelsen på disken, hvor mange arbeidsområder som ble fanget opp, og om øyeblikksbildet er Fullstendig eller Ufullstendig. Ufullstendig betyr at manifestet mangler eller navngir filer som ikke finnes — en sikkerhetskopi som ble avbrutt av et krasj eller en full disk. De listes fortsatt opp med vilje: et øyeblikksbilde du ikke ser, er ett du tror du har. Et ufullstendig øyeblikksbilde kan ikke gjenopprette en hel installasjon, men arbeidsområdefilene det faktisk inneholder, kan fortsatt tas i bruk ett om gangen.

En rad kan også si n arbeidsområder ikke fanget opp. Det er et arbeidsområde som er registrert, men aldri skrevet til (det finnes ingen fil ennå), eller ett der kopien mislyktes — sjekk serverloggen.

Planlegg sikkerhetskopier av arbeidsområder og oppbevaring

Seksjon med tittelen «Planlegg sikkerhetskopier av arbeidsområder og oppbevaring»

Åpne Innstillinger → Pipelines → Pipeline-maler for arbeidsområdet og finn Workspace backup. Den aktiverte planen kjører hver søndag kl. 03:00 UTC: Back up workspace, etterfulgt av Delete backups older than (30 dager som standard). Den andre noden kjører bare etter at sikkerhetskopien er vellykket. Du kan endre oppbevaringsdagene på noden eller slå av planen. Hvis serveren er frakoblet på det planlagte tidspunktet, tar planen igjen én gang når den kommer tilbake, i stedet for å spille av hver uke som ble hoppet over.

Sikkerhetskopier av arbeidsområder ligger på serveren under backups/workspace-backups/<workspaceId>/<timestamp>/workspace.db. Oppbevaringsnoden sletter bare gamle sikkerhetskopier for dette arbeidsområdet; den sletter aldri installasjonsøyeblikksbilder eller sikkerhetskopier for andre arbeidsområder. Disse filene er bare databasen. For oppbevaring utenfor maskinen kopierer du dem uavhengig.

Disse sikkerhetskopiene er atskilt fra listen Installasjonsøyeblikksbilder. For å gjenopprette én bruker du Arbeidsområdedata → Importer med sikkerhetskopiens workspace.db-sti på serversiden. Import erstatter arbeidsområdets gjeldende database, så eksporter den først hvis du kan komme til å angre gjenopprettingen.

Under Installasjonsøyeblikksbilder utvider du øyeblikksbildet, også et ufullstendig ett, og bruker Slett øyeblikksbilde i faresonen. Bekreft navnet. Hele øyeblikksbildekatalogen fjernes permanent fra serveren; last den ned først hvis du trenger en kopi. En pipeline for arbeidsområdesikkerhetskopi sletter aldri disse øyeblikksbildene.

Stiene siden viser, ligger på maskinen som kjører cc_server. Når det ikke er maskinen du sitter ved, bruker du Last ned-knappene:

  • Ved siden av hvert arbeidsområde under Arbeidsområdedata → Last ned, for én .db-fil.
  • Ved siden av hvert øyeblikksbilde under Installasjonsøyeblikksbilder → Last ned, for hele øyeblikksbildet som en .zip.

På skrivebordet velger du hvor filen havner, og varselet oppgir den; på nett går den til nettleserens nedlastinger. Uansett rapporterer begge framdrift i bytes, fordi dette er de to nyttelastene som kan bli flere gigabyte.

Begge lager en fersk kopi i det du trykker på knappen, strømmer den og sletter serverens kopi etterpå — en nedlasting er ikke «hent filen eksportknappen lagde tidligere».

Å pakke ut et arkiv med et øyeblikksbilde gjenskaper oppsettet nøyaktig, og det er det som gjør gjenopprettingen til en tilbakekopiering.

Ett arbeidsområde er én databasefil, så overleveringen er en filoperasjon.

  1. På kildeserveren: Innstillinger → Server → Sikkerhetskopi og gjenoppretting → Arbeidsområdedata, utvid arbeidsområdet og trykk Last ned.
  2. På målserveren oppretter du (eller velger) arbeidsområdet som skal ta imot det.
  3. Utvid det arbeidsområdet, og trykk Velg en fil og last opp under Gjenopprett fra denne enheten. Velg .db-filen du lastet ned.

Hvis begge serverne er maskinen du sitter ved, gjør Lagre på server pluss Importer → Velg fil det samme uten rundturen; stiene i importdialogen løses opp på serververten.

To ting er tillatt og loggføres i stedet for å avvises: å importere en fil der den registrerte arbeidsområde-id-en avviker fra målet (slik dupliserer du et arbeidsområde eller gjenoppretter det under en ny id), og å importere en fil fra en annen installasjon. I det andre tilfellet tilhører filens parede enheter og bruker-id-er installasjonen den kom fra, og de løses ikke opp på denne — arbeidsområdets egne data er intakte, men sjekk medlemskapet på nytt etter at du har tatt det i bruk.

Chatbot-tokener ligger ved siden av databasen, ikke inni den, så et arbeidsområde du gir til noen andre, inneholder ingen aktive påloggingsdata. Installasjonen som mottar det, kobler til sine egne.

Gjenopprett ett arbeidsområde fra et øyeblikksbilde

Seksjon med tittelen «Gjenopprett ett arbeidsområde fra et øyeblikksbilde»
  1. Under Installasjonsøyeblikksbilder utvider du øyeblikksbildet du vil bruke.
  2. Finn raden til arbeidsområdet og trykk Gjenopprett.
  3. Bekreft. Alt arbeidsområdet har gjort siden øyeblikksbildet ble tatt, er tapt.

Dette er samme operasjon som en import, rettet mot øyeblikksbildets kopi av arbeidsområdets fil — med vilje, slik at det ikke finnes en andre mekanisme som kan behandle den samme filen annerledes.

En rad kan si Ikke lenger på denne serveren, med Gjenopprett deaktivert: øyeblikksbildet inneholder et arbeidsområde denne installasjonen ikke lenger har. Hent det tilbake manuelt — opprett et arbeidsområde, og importer deretter til det fra <snapshot path>/<old workspace id>/workspace.db under Arbeidsområdedata. Det utvidede øyeblikksbildet viser sin egen Sti på serveren i et kopifelt, og radens tittel er den gamle arbeidsområde-id-en, så du har begge halvdelene av stien foran deg.

Det finnes ingen knapp for dette, og det bør det ikke gjøre heller: den erstatter databasene den kjørende serveren har åpne.

  1. Stopp cc_server. Kjører du skrivebordsappen med den innebygde serveren, avslutter du appen.

  2. Kopier innholdet i øyeblikksbildet over datakatalogen. Oppsettet i øyeblikksbildet speiler det kjørende, så dette er en ren kopiering:

    Terminalvindu
    # macOS default; see the CLI reference for other platforms
    DATA_DIR="$HOME/Library/Application Support/control-center"
    SNAPSHOT="$DATA_DIR/backups/2026-07-28T09-12-33-000Z"
    cp "$SNAPSHOT/global.db" "$DATA_DIR/global.db"
    for d in "$SNAPSHOT"/*/; do
    id=$(basename "$d")
    mkdir -p "$DATA_DIR/$id"
    cp "$d/workspace.db" "$DATA_DIR/$id/workspace.db"
    done
  3. Slett alle -wal- og -shm-filer som ligger ved siden av databasene du erstattet. De tilhører de gamle filene, og en utdatert fil ved siden av en gjenopprettet database er en risiko for korrupsjon.

  4. Start serveren igjen.

Øyeblikksbildet inneholder ingen secrets.json, så en installasjon som gjenopprettes på en fersk vert, beholder dataene sine, men ikke påloggingsdataene: parede enheter, leverandørtokener og SSO-innstillinger må etableres på nytt, eller gjenopprettes fra stedet der du oppbevarte den filen. Gjenoppretter du på samme vert, der secrets.json aldri gikk tapt, bevares alt.

Et øyeblikksbilde på samme disk som databasen det kopierte, beskytter deg mot en dårlig import, ikke mot disken. Ingenting i Control Center sender en kopi noe sted av seg selv, så denne delen er ditt ansvar.

Øyeblikksbilder er uforanderlige når de er skrevet, og navngitt etter tidsstempel, så ethvert synkroniseringsverktøy håndterer dem godt. Utelat transfer/, som er en arbeidsbenk for pågående ned- og opplastinger:

Terminalvindu
DATA_DIR="$HOME/Library/Application Support/control-center"
# To another host over ssh
rsync -a --delete --exclude 'transfer/' \
"$DATA_DIR/backups/" backup-host:/srv/control-center-backups/
# To object storage
aws s3 sync --exclude 'transfer/*' \
"$DATA_DIR/backups/" s3://my-bucket/control-center/backups/
# Or with deduplication, encryption and its own retention
restic backup --exclude 'transfer' "$DATA_DIR/backups"

--delete speiler din lokale opprydding til målområdet. La den stå borte hvis du vil at målområdet skal beholde øyeblikksbilder lenger enn verten gjør.

For å kunne bygge opp installasjonen på nytt og ikke bare dataene, kopierer du også disse. De er vanlige filer og trygge å kopiere mens serveren kjører:

Terminalvindu
rsync -a \
"$DATA_DIR/secrets.json" \
backup-host:/srv/control-center-backups/config/
rsync -a --relative \
"$DATA_DIR"/./*/chat_credentials \
"$DATA_DIR"/./*/blobs \
"$DATA_DIR"/./*/skills \
"$DATA_DIR"/./*/agents \
backup-host:/srv/control-center-backups/workspace-files/

secrets.json har rettighetene 0600 og inneholder hver paringsnøkkel, hver leverandørpåloggingsinformasjon og hver SSO-innstilling i installasjonen. Stedet den havner, må være minst like beskyttet som serververten — kryptert i ro, og ikke en bøtte som andre kan lese.

Hopp over spaces/ (copy-on-write-worktrær, klargjort på nytt fra arkivene dine), pr_clones/ (en cache), models/ (lastes ned på nytt), media_cache/ og rigs/ (maskintilstand, og store). Opptak av møtelyd under meetings/ er verdt å ta med hvis du beholder møter.

Planlegg et øyeblikksbilde av hele installasjonen utenfor appen

Seksjon med tittelen «Planlegg et øyeblikksbilde av hele installasjonen utenfor appen»

Den innebygde pipelinen sikkerhetskopierer bare ett arbeidsområde. For et uovervåket øyeblikksbilde av hele installasjonen finnes det ingen CLI-underkommando, og RPC-en for øyeblikksbilder krever en paret full klient som er installasjonens eier. En timer på verten kan bruke VACUUM INTO mot de aktive databasene:

#!/usr/bin/env bash
set -euo pipefail
DATA_DIR="${CC_SERVER_DATA_DIR:-$HOME/.local/share/control-center}"
DEST="/srv/control-center-snapshots/$(date -u +%Y-%m-%dT%H-%M-%SZ)"
mkdir -p "$DEST"
sqlite3 "$DATA_DIR/global.db" "VACUUM INTO '$DEST/global.db'"
for db in "$DATA_DIR"/*/workspace.db; do
id=$(basename "$(dirname "$db")")
mkdir -p "$DEST/$id"
sqlite3 "$db" "VACUUM INTO '$DEST/$id/workspace.db'"
done

Kjør den som samme bruker som eier datakatalogen, fra cron eller en systemd-timer, og synkroniser DEST ut av verten etterpå. VACUUM INTO krever SQLite 3.27 eller nyere.

Skriv den utenfor <dataDir>/backups/. En håndlaget katalog der har ingen manifest.json, så appen ville listet den opp som et ufullstendig øyeblikksbilde, og listen ville slutte å være en ærlig oversikt over det serveren selv har laget.

Rydd bort gamle øyeblikksbilder av hele installasjonen

Seksjon med tittelen «Rydd bort gamle øyeblikksbilder av hele installasjonen»

Du kan slette enkelte installasjonsøyeblikksbilder i appen. For en oppbevaringspolicy på verten holder du katalogen for arbeidsområdesikkerhetskopier atskilt fra installasjonsøyeblikksbildene:

Terminalvindu
find "$DATA_DIR/backups" -mindepth 1 -maxdepth 1 -type d \
! -name exports ! -name transfer ! -name workspace-backups \
-mtime +30 -exec rm -rf {} +

Sjekk utdataene fra en kjøring med -print før du legger til -exec. Behold mer enn én: feilen du beskytter deg mot, er ofte «den siste sikkerhetskopien har også problemet».

En sikkerhetskopi ingen har gjenopprettet, er en hypotese.

Enkel sjekk — filen åpner seg og sidene er intakte:

Terminalvindu
sqlite3 "$SNAPSHOT/global.db" 'PRAGMA integrity_check;' # expects: ok

Ekte sjekk — ta den i bruk. Opprett et midlertidig arbeidsområde på en installasjon som ikke er i produksjon, importer en arbeidsområdefil til det, og se om områdene, sakene og meldingene du forventer, er der. Det går gjennom den samme veien som en ekte gjenoppretting, inkludert gjenoppbyggingen av FTS, og det er den eneste sjekken som forteller deg at sikkerhetskopien kan gjenopprettes og ikke bare leses.

Gjør dette én gang når du setter opp sikkerhetskopier, og igjen hver gang du endrer hvor de lagres.

Symptom Årsak og løsning
Ned- og opplastingskontrollene er deaktivert med et varsel om et relé Du er tilkoblet gjennom det formidlede reléet, som ikke bærer filoverføringer. Koble til direkte
«Serveren nektet» Rolle. Å ta eller liste opp et installasjonsøyeblikksbilde krever installasjonens operatør. Å laste ned et arbeidsområde krever admin, å gjenopprette ett krever eier, og en zip med et helt øyeblikksbilde krever installasjonens operatør
«Denne serveren har ingen sikkerhetskopiflate» Verten har ingen sikkerhetskopiport koblet opp — en demoserver. Operasjonene mangler i stedet for å bli avvist
«Filen er større enn serveren godtar» Opplastinger er begrenset til 8 GiB. Legg filen på serververten og bruk Importer → Velg fil i stedet
Import avvist: ikke en Control Center-arbeidsområdedatabase Filen har ingen workspace_meta-rad — den er ikke en arbeidsområdeeksport, eller den er avkortet. Ingenting ble erstattet
Et øyeblikksbilde står som Ufullstendig Manifestet mangler eller navngir filer som ikke finnes. Ta et nytt; ta i mellomtiden i bruk enkeltfiler for arbeidsområder fra det
Et øyeblikksbilde sier at arbeidsområder ikke ble fanget opp Disse arbeidsområdene har aldri blitt skrevet til, eller kopien deres mislyktes. Sjekk serverloggen
En gjenopprettet installasjon mangler kodevert- eller SSO-påloggingsinformasjon secrets.json ligger ikke i et øyeblikksbilde. Gjenopprett den fra stedet der du oppbevarte den, eller koble til leverandørene på nytt
Et gjenopprettet arbeidsområde mangler innlimte bilder Blobs ligger ved siden av databasen, ikke i den. Kopier <workspaceId>/blobs/ over også