Μετάβαση στο περιεχόμενο

Αντίγραφο ασφαλείας, εξαγωγή και εισαγωγή

Όλα όσα μπορεί να αντιγράψει, να παραδώσει ή να υιοθετήσει το Control Center, και η ακριβής μορφή κάθε τεχνουργήματος. Για να πάρετε πραγματικά ένα αντίγραφο ασφαλείας, δείτε το Αντίγραφο ασφαλείας και επαναφορά; για τον λόγο που η αποθήκευση είναι χωρισμένη κατ’ αυτόν τον τρόπο, δείτε τους Χώρους εργασίας και απομόνωση.

Υπάρχουν τρία τεχνουργήματα αντιγραφής βάσεων δεδομένων, με διαφορετική εμβέλεια και πολιτική διαγραφής.

Τεχνούργημα Γράφεται από Μορφή Καλύπτει
Στιγμιότυπο εγκατάστασης server.backupNow Ένας κατάλογος με χρονοσήμανση Κάθε βάση δεδομένων της εγκατάστασης
Workspace backup pipeline Workspace backup Κατάλογος με χρονοσήμανση που περιέχει ένα .db Τη βάση δεδομένων ενός χώρου εργασίας
Εξαγωγή χώρου εργασίας workspace.export Ένα μεμονωμένο .db αρχείο Τη βάση δεδομένων ενός χώρου εργασίας

Όλα γράφονται με SQLite VACUUM INTO, το οποίο είναι ασφαλές απέναντι σε μια ενεργή βάση δεδομένων WAL: λαμβάνει μια συναλλαγή ανάγνωσης, παράγει ένα αποσυμπιεσμένο και συναλλακτικά συνεπές αντίγραφο, και δεν απαιτεί ποτέ τη διακοπή του διακομιστή.

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

Η διάταξη καθρεφτίζει ακριβώς τον ενεργό κατάλογο δεδομένων, και αυτό είναι που κάνει την επαναφορά μιας εγκατάστασης απλή αντιγραφή πίσω αντί για μετάφραση. Το όνομα του καταλόγου είναι η χρονοσήμανση UTC με τα : και . αντικατεστημένα από -, οπότε είναι ασφαλές για το σύστημα αρχείων στα Windows και ταξινομείται χρονολογικά ως απλή συμβολοσειρά.

Τα προγραμματισμένα αντίγραφα ασφαλείας χώρων εργασίας βρίσκονται ξεχωριστά στη διαδρομή <dataDir>/backups/workspace-backups/<workspaceId>/<timestamp>/workspace.db. Δεν περιλαμβάνουν μανιφέστο ούτε global.db και δεν είναι στιγμιότυπα εγκατάστασης. Το βήμα διατήρησης του εβδομαδιαίου pipeline αφαιρεί μόνο αντίγραφα ασφαλείας του δικού του χώρου εργασίας που είναι παλαιότερα από τη διαμορφωμένη ηλικία του (30 ημέρες από προεπιλογή)· τα χειροκίνητα στιγμιότυπα εγκατάστασης δεν εκκαθαρίζονται ποτέ από αυτό το βήμα. Το server.listBackups απαριθμεί μόνο στιγμιότυπα εγκατάστασης, μαζί και τα ημιτελή.

Πεδίο Τύπος Σημασία
version ακέραιος Έκδοση μορφής του μανιφέστου. Αυτή τη στιγμή 1
created_at ISO-8601 UTC Πότε λήφθηκε το στιγμιότυπο
global.file συμβολοσειρά Πάντα global.db
global.schema_version ακέραιος Έκδοση σχήματος του GlobalDatabase τη στιγμή της καταγραφής
global.bytes ακέραιος Μέγεθος του γραμμένου global.db
workspace_schema_version ακέραιος Έκδοση σχήματος του WorkspaceDatabase που μοιράζονται όλα τα αρχεία χώρων εργασίας
workspaces[] πίνακας Μία εγγραφή ανά καταγεγραμμένο χώρο εργασίας
workspaces[].workspace_id συμβολοσειρά Ο χώρος εργασίας που κατέχει αυτό το αρχείο
workspaces[].file συμβολοσειρά Διαδρομή σχετική με τη ρίζα του στιγμιότυπου, <workspaceId>/workspace.db
workspaces[].bytes ακέραιος Μέγεθος αυτού του αρχείου
skipped_workspaces[] πίνακας συμβολοσειρών Χώροι εργασίας που το αντίγραφο ασφαλείας δεν μπόρεσε να καταγράψει

Ένας χώρος εργασίας παραλείπεται όταν είναι καταχωρισμένος αλλά δεν έχει γραφτεί ποτέ (άρα δεν υπάρχει ακόμη αρχείο), ή όταν το VACUUM INTO του απέτυχε. Όπως και να έχει, το στιγμιότυπο ολοκληρώνεται και το μανιφέστο ονομάζει τι λείπει.

Το server.listBackups αναφέρει μια σημαία complete ανά στιγμιότυπο. Είναι false όταν το μανιφέστο απουσιάζει ή δεν μπορεί να αναλυθεί, όταν λείπει το global.db, ή όταν το μανιφέστο ονομάζει ένα αρχείο χώρου εργασίας που δεν βρίσκεται στον δίσκο.

Ένα ημιτελές στιγμιότυπο εξακολουθεί να εμφανίζεται στη λίστα, επειδή ένα στιγμιότυπο που δεν βλέπει ένας διαχειριστής είναι ένα στιγμιότυπο που πιστεύει ότι έχει. Όταν το μανιφέστο δεν είναι αναγνώσιμο, η λίστα καταφεύγει στην ίδια τη διάταξη και αναφέρει όποια αρχεία <workspaceId>/workspace.db βρει — αυτά παραμένουν μεμονωμένα υιοθετήσιμα μέσω του workspace.import, ακόμη και αν το στιγμιότυπο στο σύνολό του δεν μπορεί να επαναφέρει μια εγκατάσταση.

Τι δεν περιέχει ένα αντίγραφο ασφαλείας

Ενότητα με τίτλο «Τι δεν περιέχει ένα αντίγραφο ασφαλείας»

Και τα δύο τεχνουργήματα είναι μόνο βάσεις δεδομένων. Ένας κατάλογος χώρου εργασίας περιέχει περισσότερα από τη βάση δεδομένων του, και τίποτα από τα υπόλοιπα δεν ταξιδεύει:

Διαδρομή Σε ένα στιγμιότυπο; Σε μια εξαγωγή χώρου εργασίας;
global.db Ναι Όχι
<workspaceId>/workspace.db Ναι Ναι (το είναι το αρχείο)
<workspaceId>/blobs/ Όχι Όχι
<workspaceId>/skills/ Όχι Όχι
<workspaceId>/agents/ Όχι Όχι
<workspaceId>/chat_credentials/ Όχι Όχι
<workspaceId>/spaces/<spaceId>/ Όχι Όχι
<workspaceId>/pr_clones/ Όχι Όχι
secrets.json Όχι Όχι
models/ Όχι Όχι
meetings/<meetingId>/ Όχι Όχι
rigs/ Όχι Όχι

Κάποια από αυτά είναι αναλώσιμα — το spaces/ περιέχει worktrees copy-on-write που παρέχονται εκ νέου από τα αποθετήρια, το pr_clones/ είναι προσωρινή αποθήκευση, το models/ κατεβαίνει ξανά με λήψη, το rigs/ είναι κατάσταση μηχανήματος. Κάποια άλλα δεν είναι: το blobs/ περιέχει επικολλημένες εικόνες στις οποίες δείχνουν γραμμές της βάσης δεδομένων, τα skills/ και agents/ περιέχουν τα αρχεία με τα οποία εκτελείται ένας πράκτορας, και το secrets.json περιέχει κάθε κλειδί σύζευξης, διαπιστευτήριο παρόχου και ρύθμιση SSO της εγκατάστασης. Δείτε το Αντίγραφο ασφαλείας και επαναφορά για την κάλυψη των υπολοίπων.

Τα RPC αντιγράφων ασφαλείας της εγκατάστασης και η εξαγωγή/εισαγωγή χώρου εργασίας είναι μόνο για fullClient: ένα συζευγμένο τηλέφωνο δεν μπορεί να τα ενεργοποιήσει. Όλα απουσιάζουν εντελώς — δεν απορρίπτονται, απουσιάζουν δομικά — σε έναν διακομιστή χωρίς συνδεδεμένη θύρα αντιγράφων ασφαλείας, όπως ο διακομιστής επίδειξης.

Λειτουργία Είδος Εμβέλεια Ελάχιστος ρόλος Ορίσματα Επιστρέφει
server.backupNow μετάλλαξη Εγκατάσταση ιδιοκτήτης της εγκατάστασης κανένα {ok, path}
server.listBackups ανάγνωση Εγκατάσταση ιδιοκτήτης της εγκατάστασης κανένα {backups: [...]}
server.deleteBackup μετάλλαξη Εγκατάσταση ιδιοκτήτης της εγκατάστασης name {ok}
workspace.export ανάγνωση Χώρος εργασίας admin κανένα {ok, path}
workspace.import μετάλλαξη Χώρος εργασίας owner source_path {ok, workspace_id}
workspace.delete μετάλλαξη Εγκατάσταση* owner id γραμμή μητρώου σημαδεμένη ως διαγραμμένη
  • Το workspace.delete δεν έχει εμβέλεια, επειδή η γραμμή που σημαδεύει ζει στο καθολικό μητρώο· ο χειριστής του ελέγχει την ιδιότητα μέλους του καλούντος στον επώνυμο χώρο εργασίας και απαιτεί owner.

Το path σε κάθε απόκριση είναι μια διαδρομή στον κεντρικό υπολογιστή του διακομιστή.

Από το νεότερο προς το παλαιότερο, ταξινομημένα κατά όνομα καταλόγου (που είναι η χρονοσήμανση, οπότε η σειρά ισχύει ακόμη και για ένα στιγμιότυπο του οποίου το μανιφέστο δεν μπορούσε να διαβαστεί).

{
"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 παραλείπεται όταν το μανιφέστο δεν μπορούσε να διαβαστεί. Το bytes στο ανώτατο επίπεδο είναι το πραγματικό μέγεθος στον δίσκο ολόκληρου του καταλόγου, όχι το άθροισμα του ίδιου του μανιφέστου — η ερώτηση που θέτει ένας διαχειριστής που καθαρίζει στιγμιότυπα είναι πόσο κοστίζει ο κατάλογος, όχι τι σκόπευε να γράψει το αντίγραφο ασφαλείας.

Κάθε workspaces[].path είναι ακριβώς αυτό που δέχεται το workspace.import ως source_path. Αυτό είναι σκόπιμο: το «επαναφορά αυτού του χώρου εργασίας από αυτό το στιγμιότυπο» είναι η λειτουργία εισαγωγής, ώστε οι δύο να μην μπορούν να αποκλίνουν σε διαφορετικούς χειρισμούς του ίδιου αρχείου.

Πριν αντικατασταθεί οτιδήποτε, το υποψήφιο αρχείο ανοίγεται μόνο για ανάγνωση με μια βραχύβια απευθείας σύνδεση SQLite και διαβάζεται η γραμμή workspace_meta του.

Συνθήκη Αποτέλεσμα
Δεν είναι αναγνώσιμη βάση δεδομένων SQLite, ή δεν υπάρχει workspace_meta Απορρίπτεται. Δεν αγγίζεται τίποτα
Το καταγεγραμμένο αναγνωριστικό χώρου εργασίας ≠ του προορισμού Επιτρέπεται, καταγράφεται. Έτσι αντιγράφεται ένας χώρος εργασίας ή επαναφέρεται υπό νέο αναγνωριστικό
Το καταγεγραμμένο αναγνωριστικό εγκατάστασης ≠ αυτής της εγκατάστασης Επιτρέπεται, καταγράφεται. Οι συζευγμένες συσκευές και τα αναγνωριστικά χρηστών του ανήκουν σε εκείνη την εγκατάσταση και δεν θα επιλυθούν εδώ
Μη έγκυρο αναγνωριστικό χώρου εργασίας, ή το αρχείο δεν υπάρχει Απορρίπτεται

Κατά την αποδοχή, η βάση δεδομένων του χώρου εργασίας-στόχου κλείνει και αποσπάται από τον διαχειριστή πριν αντιγραφεί το αρχείο πάνω της (μια ανοιχτή σύνδεση drift κρατά το αρχείο και το -wal του), και μετά ανοίγει ξανά ώστε το beforeOpen να επανεγκαταστήσει τους ενεργοποιητές FTS και συγχρονισμού, και τα ευρετήρια FTS ξαναχτίζονται — οι πίνακες περιεχομένου ενός εισαγμένου αρχείου είναι συμπληρωμένοι, αλλά το ευρετήριό του μπορεί να είναι παρωχημένο.

Κάθε λειτουργία παραπάνω μιλά με διαδρομές στην πλευρά του διακομιστή, που είναι πλήρης απάντηση μόνο όταν ο διακομιστής είναι το δικό σας μηχάνημα. Αυτές οι τρεις μεταφέρουν τα byte, στην ίδια λωρίδα με υπογραφή PSK που χρησιμοποιούν ήδη ο μεσολαβητής πολυμέσων και η αποθήκη εικόνων. Ο καλών υπογράφει μια συμβολοσειρά προορισμού με το προκοινόχρηστο κλειδί της συσκευής του και περνά την υπογραφή ως s.

Διαδρομή Μέθοδος Παράμετροι Υπογεγραμμένος προορισμός Απαιτεί
/backup/workspace GET w, d, s backup-workspace:<workspaceId> διαχειριστής του χώρου εργασίας
/backup/snapshot GET n, d, s backup-snapshot:<name> ιδιοκτήτης της εγκατάστασης
/backup/restore POST w, d, s backup-restore:<workspaceId> ιδιοκτήτης του χώρου εργασίας

Το w είναι αναγνωριστικό χώρου εργασίας, το n όνομα καταλόγου στιγμιότυπου, το d το αναγνωριστικό της καλούσας συσκευής, το s η υπογραφή. Το n επιλύεται απέναντι στη λίστα αντιγράφων ασφαλείας αντί να συνενώνεται με τη ρίζα των αντιγράφων, οπότε η διαδρομή δεν μπορεί να στοχεύσει σε κατάλογο που η λίστα δεν θα είχε εμφανίσει.

Κατάσταση Αιτία
400 Λείπει μια απαιτούμενη παράμετρος, ή το σώμα μιας μεταφόρτωσης είναι κενό
403 Άγνωστη ή ανακλημένη συσκευή, κακή υπογραφή, ή ο καλών δεν έχει τον ρόλο
404 Δεν υπάρχει θύρα αντιγράφων ασφαλείας σε αυτόν τον κεντρικό υπολογιστή, ή το επώνυμο στιγμιότυπο/αρχείο χώρου εργασίας δεν υπάρχει
405 Κλήση του /backup/restore με οτιδήποτε άλλο εκτός από POST
413 Το σώμα της μεταφόρτωσης ξεπερνά τα 8 GiB, είτε κατά το δηλωμένο content-length είτε κατά τα byte που διαβάστηκαν στην πραγματικότητα
500 Η εξαγωγή ή το αρχείο συμπίεσης απέτυχε στην πλευρά του διακομιστή

Και οι δύο λήψεις απαντούν Cache-Control: no-store με Accept-Ranges: none. Κάθε αίτημα δημιουργεί ένα φρέσκο αντίγραφο και το διαγράφει μόλις μεταδοθεί με ροή, οπότε μια απόκριση από προσωρινή μνήμη ή μια συνεχισμένη απόκριση θα συνέραπτε byte από δύο διαφορετικές εξαγωγές σε ένα αρχείο που φαίνεται έγκυρο και δεν είναι.

Το /backup/snapshot επιστρέφει <name>.zip, με εγγραφές σχετικές με τη ρίζα του στιγμιότυπου, ώστε η αποσυμπίεση να αναπαράγει manifest.json + global.db + <workspaceId>/workspace.db. Οι εγγραφές γράφονται σε ταξινομημένη σειρά, οπότε δύο αρχεία συμπίεσης του ίδιου στιγμιότυπου είναι το ίδιο αρχείο συμπίεσης.

Το /backup/restore μεταδίδει το σώμα κατευθείαν σε ένα αρχείο προσωρινής αποθήκευσης αντί να το αποθηκεύσει ενδιάμεσα, το περιορίζει πριν και κατά τη διάρκεια της ανάγνωσης, και διαγράφει το αρχείο προσωρινής αποθήκευσης σε κάθε διαδρομή εξόδου, ακόμη και σε άρνηση.

Στοιχείο Τιμή
Στιγμιότυπα <dataDir>/backups/<timestamp>/
Προγραμματισμένα αντίγραφα ασφαλείας χώρων εργασίας <dataDir>/backups/workspace-backups/<workspaceId>/<timestamp>/workspace.db
Εξαγωγές χώρων εργασίας <dataDir>/backups/exports/<workspaceId>-<timestamp>.db
Προσωρινή αποθήκευση μεταφοράς <dataDir>/backups/transfer/ — ένας πάγκος εργασίας, που τον σαρώνει η διαδρομή που τον γράφει
Όνομα αρχείου συμπίεσης στιγμιότυπου <snapshot directory name>.zip
Όριο μεταφόρτωσης 8 GiB ανά POST /backup/restore
Διατήρηση Στιγμιότυπα εγκατάστασης: χειροκίνητη διαγραφή. Αντίγραφα ασφαλείας χώρων εργασίας: εβδομαδιαίο pipeline, προεπιλογή 30 ημερών

Οι κατάλογοι exports/, transfer/ και workspace-backups/ δεν είναι στιγμιότυπα εγκατάστασης και εξαιρούνται από το server.listBackups. Μόνο ο τελευταίος κατάλογος έχει προγραμματισμένη διατήρηση· η διαγραφή ενός στιγμιότυπου εγκατάστασης απαιτεί ρητή ενέργεια του ιδιοκτήτη της εγκατάστασης.