Gå til innholdet

Sikkerhetskopi, eksport og import

Alt Control Center kan kopiere, overlevere eller ta i bruk, og den nøyaktige formen til hvert artefakt. For å faktisk ta en sikkerhetskopi, se Sikkerhetskopier og gjenopprett; for hvorfor lagringen er delt opp slik, se Arbeidsområder og isolasjon.

Det finnes tre artefakter for databaskopiering, med ulikt omfang og ulik slettepolicy.

Artefakt Skrevet av Form Dekker
Installasjonsøyeblikksbilde server.backupNow En tidsstemplet mappe Hver database i installasjonen
Workspace backup Workspace backup-pipelinen Tidsstemplet mappe med én .db Databasen til ett arbeidsområde
Arbeidsområdeeksport workspace.export Én enkelt .db-fil Databasen til ett arbeidsområde

Alle skrives med SQLite VACUUM INTO, som er trygt mot en aktiv WAL-database: det tar en lesetransaksjon, lager en defragmentert og transaksjonskonsistent kopi, og krever aldri at serveren stoppes.

<dataDir>/backups/2026-07-28T09-12-33-000Z/
manifest.json
global.db
<workspaceId>/workspace.db one directory per workspace

Oppsettet speiler den aktive datamappen nøyaktig, og det er dette som gjør at gjenoppretting av en installasjon er en tilbakekopiering i stedet for en oversettelse. Mappenavnet er UTC-tidsstempelet med : og . erstattet av -, så det er filsystemtrygt på Windows og sorterer kronologisk som en vanlig streng.

Planlagte arbeidsområdesikkerhetskopier ligger separat på <dataDir>/backups/workspace-backups/<workspaceId>/<timestamp>/workspace.db. De inneholder ikke noe manifest eller global.db og er ikke installasjonsøyeblikksbilder. Oppbevaringstrinnet i den ukentlige pipelinen fjerner bare sikkerhetskopier av sitt eget arbeidsområde som er eldre enn den konfigurerte alderen (30 dager som standard); manuelt opprettede installasjonsøyeblikksbilder roteres aldri av det trinnet. server.listBackups lister bare installasjonsøyeblikksbilder, inkludert ufullstendige.

Felt Type Betydning
version heltall Manifestformatets versjon. For tiden 1
created_at ISO-8601 UTC Når øyeblikksbildet ble tatt
global.file streng Alltid global.db
global.schema_version heltall Skjemaversjonen til GlobalDatabase på fangsttidspunktet
global.bytes heltall Størrelsen på den skrevne global.db
workspace_schema_version heltall Skjemaversjonen til WorkspaceDatabase, som deles av hver arbeidsområdefil
workspaces[] array Én oppføring per fangede arbeidsområde
workspaces[].workspace_id streng Arbeidsområdet denne filen tilhører
workspaces[].file streng Sti relativ til øyeblikksbildets rot, <workspaceId>/workspace.db
workspaces[].bytes heltall Størrelsen på den filen
skipped_workspaces[] array med strenger Arbeidsområder sikkerhetskopien ikke kunne fange

Et arbeidsområde hoppes over når det er registrert, men aldri er blitt skrevet til (så det finnes ingen fil ennå), eller når dets VACUUM INTO mislyktes. Uansett fullføres øyeblikksbildet, og manifestet navngir det som mangler.

server.listBackups rapporterer et complete-flagg per øyeblikksbilde. Det er usant når manifestet mangler eller ikke lar seg tolke, når global.db mangler, eller når manifestet navngir en arbeidsområdefil som ikke ligger på disken.

Et ufullstendig øyeblikksbilde listes likevel, fordi et øyeblikksbilde en operatør ikke kan se, er et øyeblikksbilde de tror de har. Når manifestet ikke kan leses, faller listen tilbake på selve oppsettet og rapporterer de <workspaceId>/workspace.db-filene den finner — de kan fortsatt tas i bruk én og én gjennom workspace.import, selv om øyeblikksbildet som helhet ikke kan gjenopprette en installasjon.

Begge artefaktene er bare databaser. En arbeidsområdemappe inneholder mer enn databasen sin, og ingenting av resten blir med:

Sti I et øyeblikksbilde? I en arbeidsområdeeksport?
global.db Ja Nei
<workspaceId>/workspace.db Ja Ja (den er filen)
<workspaceId>/blobs/ Nei Nei
<workspaceId>/skills/ Nei Nei
<workspaceId>/agents/ Nei Nei
<workspaceId>/chat_credentials/ Nei Nei
<workspaceId>/spaces/<spaceId>/ Nei Nei
<workspaceId>/pr_clones/ Nei Nei
secrets.json Nei Nei
models/ Nei Nei
meetings/<meetingId>/ Nei Nei
rigs/ Nei Nei

Noe av dette kan kastes — spaces/ inneholder copy-on-write-worktrees som provisjoneres på nytt fra repoene, pr_clones/ er en cache, models/ lastes ned på nytt, og rigs/ er maskintilstand. Annet kan ikke det: blobs/ inneholder innlimte bilder som rader i databasen peker på, skills/ og agents/ inneholder filene en agent kjører med, og secrets.json inneholder hver parringsnøkkel, hver leverandørlegitimasjon og hver SSO-innstilling i installasjonen. Se Sikkerhetskopier og gjenopprett for å dekke resten.

Sikkerhetskopi-RPC-ene for installasjonen og eksport/import av arbeidsområder er bare for fullClient: en paret telefon kan ikke utløse dem. Alle mangler helt — ikke avvist, men strukturelt fraværende — på en server der ingen sikkerhetskopiport er koblet til, for eksempel demoserveren.

Op Type Omfang Minste rolle Argumenter Returnerer
server.backupNow mutate Installasjon installasjonseier ingen {ok, path}
server.listBackups read Installasjon installasjonseier ingen {backups: [...]}
server.deleteBackup mutate Installasjon installasjonseier name {ok}
workspace.export read Arbeidsområde admin ingen {ok, path}
workspace.import mutate Arbeidsområde owner source_path {ok, workspace_id}
workspace.delete mutate Installasjon* owner id registerrad merket som slettet
  • workspace.delete er uten omfang fordi raden den markerer, ligger i det globale registeret; behandleren sjekker at den som kaller, er medlem av det navngitte arbeidsområdet, og krever owner.

path i hvert svar er en sti på serververten.

Nyeste først, sortert etter mappenavn (som er tidsstempelet, så rekkefølgen holder selv for et øyeblikksbilde der manifestet ikke kunne leses).

{
"backups": [
{
"path": "/…/backups/2026-07-28T09-12-33-000Z",
"name": "2026-07-28T09-12-33-000Z",
"created_at": "2026-07-28T09:12:33.000Z",
"bytes": 481203712,
"complete": true,
"workspaces": [
{
"workspace_id": "w_9f2c…",
"path": "/…/backups/2026-07-28T09-12-33-000Z/w_9f2c…/workspace.db",
"bytes": 190840832
}
],
"skipped_workspace_ids": []
}
]
}

created_at utelates når manifestet ikke kunne leses. bytes på toppnivå er den virkelige størrelsen på disken for hele mappen, ikke manifestets egen sum — spørsmålet en operatør som rydder i øyeblikksbilder stiller, er hva mappen koster, ikke hva sikkerhetskopien hadde tenkt å skrive.

Hver workspaces[].path er nøyaktig det workspace.import tar som source_path. Det er bevisst: «gjenopprett dette arbeidsområdet fra dette øyeblikksbildet» er importoperasjonen, så de to kan ikke gli fra hverandre til ulik behandling av samme fil.

Før noe erstattes, åpnes kandidatfilen skrivebeskyttet med en kortlivet rå SQLite-tilkobling, og raden workspace_meta leses.

Vilkår Resultat
Ikke en lesbar SQLite-database, eller ingen workspace_meta Avvist. Ingenting berøres
Registrert arbeidsområde-id ≠ målet Tillatt, loggført. Det er slik et arbeidsområde dupliseres eller gjenopprettes under en ny id
Registrert installasjons-id ≠ denne installasjonen Tillatt, loggført. De parede enhetene og bruker-id-ene tilhører den installasjonen og vil ikke la seg løse her
Ugyldig arbeidsområde-id, eller filen finnes ikke Avvist

Ved godkjenning lukkes databasen til mål-arbeidsområdet og slippes fra behandleren før filen kopieres over den (en åpen drift-tilkobling holder filen og -wal-en dens), og den åpnes deretter på nytt, slik at beforeOpen installerer FTS- og synkutløserne på nytt, og FTS-indeksene bygges på nytt — en importert fils innholdstabeller er fylt ut, men indeksen kan være utdatert.

Hver operasjon ovenfor snakker om stier på serversiden, noe som bare er et fullstendig svar når serveren er din egen maskin. Disse tre frakter bytene, på samme PSK-signerte bane som medieproxyen og bildelageret bruker. Den som kaller, signerer en målstreng med enhetens forhåndsdelt nøkkel og sender signaturen som s.

Rute Metode Spørring Signert mål Krever
/backup/workspace GET w, d, s backup-workspace:<workspaceId> Arbeidsområdeadmin
/backup/snapshot GET n, d, s backup-snapshot:<name> Installasjonseier
/backup/restore POST w, d, s backup-restore:<workspaceId> Arbeidsområdeeier

w er en arbeidsområde-id, n et mappenavn for et øyeblikksbilde, d id-en til enheten som kaller, og s signaturen. n løses mot sikkerhetskopilisten i stedet for å settes sammen med sikkerhetskopiroten, så ruten kan ikke rettes mot en mappe listen ikke ville ha vist.

Status Årsak
400 En påkrevd spørringsparameter mangler, eller en opplastingskropp er tom
403 Ukjent eller tilbakekalt enhet, dårlig signatur, eller den som kaller, mangler rollen
404 Ingen sikkerhetskopiport på denne verten, eller det navngitte øyeblikksbildet/arbeidsområdefilen finnes ikke
405 /backup/restore kalt med noe annet enn POST
413 Opplastingskroppen overskrider 8 GiB, enten etter oppgitt content-length eller etter byter som faktisk er lest
500 Eksporten eller arkiveringen mislyktes på serversiden

Begge nedlastingene svarer Cache-Control: no-store med Accept-Ranges: none. Hver forespørsel lager en fersk kopi og sletter den så snart den er strømmet ut, så et bufret eller gjenopptatt svar ville skjøte sammen byter fra to ulike eksporter til én fil som ser gyldig ut, men ikke er det.

/backup/snapshot returnerer <name>.zip, med oppføringer relative til øyeblikksbildets rot, slik at utpakking gjenskaper manifest.json + global.db + <workspaceId>/workspace.db. Oppføringene skrives i sortert rekkefølge, så to arkiver av samme øyeblikksbilde er det samme arkivet.

/backup/restore strømmer kroppen rett til en mellomlagerfil i stedet for å bufre den, begrenser den før og under lesingen, og sletter den mellomlagrede filen på enhver vei ut, også ved en avvisning.

Ting Verdi
Øyeblikksbilder <dataDir>/backups/<timestamp>/
Planlagte arbeidsområdesikkerhetskopier <dataDir>/backups/workspace-backups/<workspaceId>/<timestamp>/workspace.db
Arbeidsområdeeksporter <dataDir>/backups/exports/<workspaceId>-<timestamp>.db
Overføringsmellomlager <dataDir>/backups/transfer/ — en arbeidsbenk, feid av ruten som skriver den
Navn på øyeblikksbildearkiv <snapshot directory name>.zip
Opplastingsgrense 8 GiB per POST /backup/restore
Oppbevaring Installasjonsøyeblikksbilder: manuell sletting. Arbeidsområdesikkerhetskopier: ukentlig pipeline, 30 dager som standard

Mappene exports/, transfer/ og workspace-backups/ er ikke installasjonsøyeblikksbilder og holdes utenfor server.listBackups. Bare den siste mappen har planlagt oppbevaring; å slette et installasjonsøyeblikksbilde krever en uttrykkelig handling fra installasjonseieren.