CLI commands

สำรองข้อมูล

openclaw backup

สร้างไฟล์เก็บถาวรสำรองในเครื่องสำหรับสถานะ การกำหนดค่า โปรไฟล์การยืนยันตัวตน ข้อมูลประจำตัวของช่องทาง/ผู้ให้บริการ เซสชัน และพื้นที่ทำงานของ OpenClaw (ไม่บังคับ)

bash
openclaw backup createopenclaw backup create --output ~/Backupsopenclaw backup create --dry-run --jsonopenclaw backup create --verifyopenclaw backup create --no-include-workspaceopenclaw backup create --only-configopenclaw backup verify ./2026-03-09T08-00-00.000+08-00-openclaw-backup.tar.gzopenclaw backup sqlite create --global --repository ~/Backups/openclaw-sqliteopenclaw backup sqlite create --agent main --repository ~/Backups/openclaw-sqliteopenclaw backup sqlite list --repository ~/Backups/openclaw-sqliteopenclaw backup sqlite verify ~/Backups/openclaw-sqlite/<snapshot-id>openclaw backup sqlite verify ~/Backups/openclaw-sqlite/<snapshot-id> --scratch ~/Private/openclaw-scratchopenclaw backup sqlite restore ~/Backups/openclaw-sqlite/<snapshot-id> --target ./restored/openclaw.sqlite

หมายเหตุ

  • ไฟล์เก็บถาวรฝัง manifest.json ซึ่งระบุพาธต้นทางที่ผ่านการแก้ไขค่าแล้วและโครงสร้างไฟล์เก็บถาวร
  • เอาต์พุตเริ่มต้นคือไฟล์เก็บถาวร .tar.gz ที่มีการประทับเวลาในไดเรกทอรีทำงานปัจจุบัน ชื่อไฟล์ที่ประทับเวลาใช้เขตเวลาท้องถิ่นของเครื่องและรวมออฟเซ็ต UTC หากไดเรกทอรีทำงานปัจจุบันอยู่ภายในโครงสร้างต้นทางที่กำลังสำรองข้อมูล OpenClaw จะใช้ไดเรกทอรีหลักของคุณเป็นตำแหน่งเริ่มต้นของไฟล์เก็บถาวรแทน
  • ไฟล์เก็บถาวรที่มีอยู่จะไม่ถูกเขียนทับ พาธเอาต์พุตภายในโครงสร้างสถานะ/พื้นที่ทำงานต้นทางจะถูกปฏิเสธเพื่อหลีกเลี่ยงการรวมตัวเอง
  • openclaw backup verify <archive> ตรวจสอบว่าไฟล์เก็บถาวรมีไฟล์รายการรากเพียงหนึ่งไฟล์ ปฏิเสธพาธในไฟล์เก็บถาวรที่มีลักษณะเป็นการข้ามไดเรกทอรีและไฟล์ข้างเคียงของ SQLite ยืนยันว่าเพย์โหลดทุกรายการที่ประกาศในไฟล์รายการมีอยู่ ตรวจสอบรูปแบบไฟล์ของสแนปช็อต SQLite ทุกไฟล์ และเรียกใช้การตรวจสอบความสมบูรณ์แบบเต็มรูปแบบรวมถึงบทบาทกับฐานข้อมูลมาตรฐานของ OpenClaw สคีมาเฉพาะของ Plugin จะยังคงไม่ถูกตรวจสอบภายใน เนื่องจากอาจต้องใช้ความสามารถ SQLite ที่เจ้าของกำหนด openclaw backup create --verify เรียกใช้การตรวจสอบนี้ทันทีหลังจากเขียนไฟล์เก็บถาวร
  • openclaw backup create --only-config สำรองเฉพาะไฟล์การกำหนดค่า JSON ที่ใช้งานอยู่

สแนปช็อต SQLite

ใช้ openclaw backup sqlite เมื่อต้องการอาร์ติแฟกต์แบบพกพาสำหรับฐานข้อมูล SQLite ที่ OpenClaw เป็นเจ้าของหนึ่งฐาน แทนไฟล์เก็บถาวรสถานะแบบครอบคลุม

การสร้างสแนปช็อตรับต้นทางที่ระบุชื่อไว้เพียงหนึ่งรายการเท่านั้น:

คำสั่ง ฐานข้อมูล
openclaw backup sqlite create --global --repository <dir> สถานะ OpenClaw ที่ใช้ร่วมกัน
openclaw backup sqlite create --agent <id> --repository <dir> ฐานข้อมูลหนึ่งรายการต่อเอเจนต์

ที่เก็บมีหนึ่งไดเรกทอรีต่อสแนปช็อตที่ยืนยันแล้ว แต่ละไดเรกทอรีสแนปช็อตประกอบด้วยรายการต่อไปนี้เท่านั้น:

  • manifest.json
  • database.sqlite

การสร้างสแนปช็อตจะตรวจสอบฐานข้อมูลที่ใช้งานอยู่ก่อนอ่าน ใช้ VACUUM INTO ของ SQLite เพื่อบันทึกสถานะ WAL ที่คอมมิตแล้วลงในฐานข้อมูลขนาดกะทัดรัด ตรวจสอบฐานข้อมูลที่สร้างขึ้นอีกครั้ง และเผยแพร่ไดเรกทอรีที่เสร็จสมบูรณ์โดยไม่เขียนทับพาธที่มีอยู่ สแนปช็อตส่วนกลางจะลบแถวคิวการส่งแบบชั่วคราวและกระชับข้อมูลอีกครั้ง เพื่อไม่ให้เพย์โหลดคิวที่ลบแล้วคงอยู่ในเพจว่าง

อย่าคัดลอกไฟล์ .sqlite, -wal, -shm หรือ -journal ที่ใช้งานอยู่เป็นอาร์ติแฟกต์สำหรับการพกพา ให้คัดลอกเฉพาะไดเรกทอรีสแนปช็อตที่เสร็จสมบูรณ์แล้วเท่านั้น

สแนปช็อต SQLite อาจมีโปรไฟล์การยืนยันตัวตน สถานะเซสชัน สถานะ Plugin และระเบียนสำคัญอื่น ๆ ปกป้องที่เก็บด้วยสิทธิ์ การเข้ารหัส นโยบายการเก็บรักษา และข้อจำกัดปลายทางเดียวกันกับไดเรกทอรีสถานะ OpenClaw ที่ใช้งานอยู่

ตรวจสอบและกู้คืน

bash
openclaw backup sqlite verify <snapshot-directory>openclaw backup sqlite restore <snapshot-directory> --target <new-database-path>

การตรวจสอบจะตรวจรูปแบบไฟล์รายการอย่างเคร่งครัด ขนาดอาร์ติแฟกต์และ SHA-256 ความสมบูรณ์ของ SQLite คีย์ต่างประเทศ เวอร์ชันสคีมา บทบาทและเจ้าของฐานข้อมูล รวมถึงข้อกำหนดดัชนีที่ OpenClaw เป็นเจ้าของ

การตรวจสอบจะตรวจสำเนาส่วนตัวที่ตรึงตามเนื้อหา เพื่อไม่ให้สภาวะแข่งขันของชื่อพาธสลับไบต์ที่ SQLite ตรวจสอบได้ ตามค่าเริ่มต้น สำเนาชั่วคราวดังกล่าวจะถูกสร้างไว้ข้างที่เก็บสแนปช็อตและลบออกก่อนคำสั่งส่งคืนผล รากของพื้นที่พักและลำดับไดเรกทอรีบรรพบุรุษต้องป้องกันไม่ให้ผู้ใช้อื่นแทนที่ได้ ราก POSIX ต้องเป็นของผู้ใช้ปัจจุบันและห้ามกลุ่มหรือทุกคนเขียนได้ โดยยอมรับไดเรกทอรีบรรพบุรุษแบบ sticky เช่น /tmp สำหรับไดเรกทอรีลูกที่ผู้ใช้เป็นเจ้าของ สิทธิ์ ACL ของ macOS ที่เปิดเผยพื้นที่พักหรือทำให้แทนที่ได้จะถูกปฏิเสธ รากและไดเรกทอรีบรรพบุรุษของ Windows ต้องเป็นของผู้ใช้ปัจจุบันหรือเจ้าของระบบปฏิบัติการที่เชื่อถือได้ พร้อม ACL ที่ปฏิเสธการเข้าถึงพื้นที่พักจากผู้ที่ไม่น่าเชื่อถือ สำหรับการเมานต์แบบอ่านอย่างเดียวหรือการแชร์ผ่านเครือข่าย ให้ส่ง --scratch <existing-private-directory> บนพื้นที่จัดเก็บที่มีการเข้ารหัสและการควบคุมปลายทางเทียบเท่ากัน

การสร้างสแนปช็อตใช้การตรวจสอบเจ้าของ ACL ไดเรกทอรีบรรพบุรุษ และอัตลักษณ์พาธแบบเดียวกันกับที่เก็บ ก่อนพักหรือเผยแพร่ไบต์ของฐานข้อมูล

การกู้คืนจะตรวจสอบซ้ำและเขียนไปยังเป้าหมายใหม่เท่านั้น โดยปฏิเสธเป้าหมายที่มีอยู่ ไฟล์ข้างเคียง -wal, -shm หรือ -journal และจะไม่แทนที่ฐานข้อมูล OpenClaw ที่ใช้งานอยู่ภายในตำแหน่งเดิม ไดเรกทอรีแม่ของเป้าหมายมีข้อกำหนดด้านความปลอดภัยของพาธเช่นเดียวกับพื้นที่พักสำหรับการตรวจสอบ การเปิดใช้งานฐานข้อมูลที่กู้คืนแล้วยังคงเป็นขั้นตอนออฟไลน์ที่ผู้ดำเนินการต้องทำอย่างชัดเจน

ที่เก็บสแนปช็อตเป็นไดเรกทอรีในเครื่อง การตั้งเวลา การอัปโหลด การเก็บรักษา ชุด WAL แบบเพิ่มส่วน การสลับระบบเมื่อขัดข้อง และพฤติกรรมการกู้คืนเมื่อบูต ตั้งใจให้อยู่นอกขอบเขตของคำสั่งนี้

ข้อมูลที่ได้รับการสำรอง

openclaw backup create วางแผนต้นทางจากการติดตั้ง OpenClaw ในเครื่องของคุณ:

  • ไดเรกทอรีสถานะ (โดยปกติคือ ~/.openclaw)
  • พาธไฟล์การกำหนดค่าที่ใช้งานอยู่
  • ไดเรกทอรี credentials/ ที่ผ่านการแก้ไขค่าแล้ว เมื่ออยู่ภายนอกไดเรกทอรีสถานะ
  • ไดเรกทอรีพื้นที่ทำงานที่ค้นพบจากการกำหนดค่าปัจจุบัน เว้นแต่คุณจะส่ง --no-include-workspace

โปรไฟล์การยืนยันตัวตนและสถานะรันไทม์อื่น ๆ ของแต่ละเอเจนต์อยู่ใน SQLite ภายใต้ไดเรกทอรีสถานะ (agents/<agentId>/agent/openclaw-agent.sqlite) จึงรวมอยู่ในรายการสำรองสถานะโดยอัตโนมัติ

--only-config ข้ามการค้นหาสถานะ ไดเรกทอรีข้อมูลประจำตัว และพื้นที่ทำงาน และเก็บถาวรเฉพาะพาธไฟล์การกำหนดค่าที่ใช้งานอยู่

OpenClaw ทำให้พาธเป็นรูปแบบมาตรฐานก่อนสร้างไฟล์เก็บถาวร หากการกำหนดค่า ไดเรกทอรีข้อมูลประจำตัว หรือพื้นที่ทำงานอยู่ภายในไดเรกทอรีสถานะแล้ว รายการเหล่านี้จะไม่ถูกทำซ้ำเป็นต้นทางสำรองระดับบนสุดแยกต่างหาก พาธที่ไม่มีอยู่จะถูกข้าม

ระหว่างการสร้างไฟล์เก็บถาวร OpenClaw จะแยกพาธที่ทราบว่ามีการเปลี่ยนแปลงขณะใช้งานออก ก่อนที่ tar จะอ่านพาธเหล่านั้น วิธีนี้หลีกเลี่ยงสภาวะแข่งขันระหว่างขนาดไฟล์ที่บันทึกไว้กับการเขียนพร้อมกัน ตัวกรองใช้กฎต่อไปนี้ซึ่งอ้างอิงกับไดเรกทอรีสถานะภายใต้แต่ละไดเรกทอรีสถานะที่สำรอง:

ขอบเขตที่อ้างอิงกับไดเรกทอรีสถานะ ส่วนต่อท้ายไฟล์ที่ข้าม
sessions/** .jsonl, .log
agents/<agentId>/sessions/** .jsonl, .log
cron/runs/** .jsonl, .log
logs/** .jsonl, .log
delivery-queue/** .json, .delivered, .tmp
session-delivery-queue/** .json, .delivered, .tmp
พาธใด ๆ ภายใต้ไดเรกทอรีสถานะที่สำรอง .sock, .pid, .tmp

กฎเหล่านี้ไม่กรองไฟล์พื้นที่ทำงานที่อยู่นอกไดเรกทอรีสถานะ และยังละเว้นไฟล์บันทึกการสนทนาและไฟล์บันทึกเหตุการณ์ที่เสร็จสมบูรณ์ซึ่งตรงกับตาราง ดังนั้นควรเก็บรักษาระเบียนเหล่านั้นแยกต่างหากเมื่อจำเป็น ค่า skippedVolatileCount ในผลลัพธ์ JSON รายงานจำนวนไฟล์ที่ถูกละเว้นโดยเจตนา

ฐานข้อมูล SQLite ภายใต้ไดเรกทอรีสถานะจะถูกกระชับด้วย VACUUM INTO เพื่อไม่ให้ข้อมูลตกค้างจากเพจที่ลบแล้วเข้าสู่ไฟล์เก็บถาวร และจะไม่คัดลอกไฟล์ WAL/SHM ที่ใช้งานอยู่ ฐานข้อมูลที่ Plugin เป็นเจ้าของซึ่งต้องใช้ความสามารถ SQLite ที่เจ้าของกำหนดแต่ไม่มีอยู่ จะหยุดอย่างปลอดภัยแทนการย้อนกลับไปคัดลอกเพจดิบ ไฟล์ SQLite ที่รวมผ่านการสำรองพื้นที่ทำงานจะถูกคัดลอกในฐานะไฟล์พื้นที่ทำงานและไม่อยู่ภายใต้การรับประกันการกระชับข้อมูล

ไฟล์ต้นฉบับและไฟล์รายการของ Plugin ที่ติดตั้งภายใต้โครงสร้าง extensions/ ของไดเรกทอรีสถานะจะถูกรวมไว้ แต่โครงสร้างการขึ้นต่อกัน node_modules/ ที่ซ้อนอยู่จะถูกข้าม เนื่องจากเป็นอาร์ติแฟกต์การติดตั้งที่สร้างใหม่ได้ หลังจากกู้คืนไฟล์เก็บถาวร ให้ใช้ openclaw plugins update <id> หรือติดตั้งใหม่ด้วย openclaw plugins install <spec> --force หาก Plugin ที่กู้คืนรายงานว่าขาดการขึ้นต่อกัน

รากรันไทม์ที่ตัวติดตั้งจัดการและสร้างใหม่ได้ภายใต้ไดเรกทอรีสถานะจะถูกข้ามเช่นกัน ได้แก่ dev/, git/, npm/, npm-runtime/ แบบเดิม และ tools/ รายการเหล่านี้มีเช็กเอาต์ที่จัดการแล้ว โครงสร้างแพ็กเกจ และรันไทม์ที่ดาวน์โหลดมา แทนที่จะเป็นสถานะผู้ใช้อันเป็นแหล่งข้อมูลหลัก ให้ติดตั้งใหม่หรืออัปเดตรันไทม์หรือ Plugin ที่เกี่ยวข้องหลังจากกู้คืน ไฟล์การกำหนดค่า ไดเรกทอรีข้อมูลประจำตัว หรือพื้นที่ทำงานที่กำหนดค่าไว้อย่างชัดเจนภายในรากเหล่านี้จะยังคงถูกรวมไว้

พฤติกรรมเมื่อการกำหนดค่าไม่ถูกต้อง

openclaw backup ข้ามการตรวจสอบการกำหนดค่าล่วงหน้าตามปกติ เพื่อให้ยังช่วยได้ระหว่างการกู้คืน การค้นหาพื้นที่ทำงานต้องอาศัยการกำหนดค่าที่ถูกต้อง ดังนั้น openclaw backup create จะล้มเหลวทันทีเมื่อไฟล์การกำหนดค่ามีอยู่แต่ไม่ถูกต้อง และยังเปิดใช้การสำรองพื้นที่ทำงานอยู่

สำหรับการสำรองบางส่วนในสถานการณ์ดังกล่าว ให้เรียกใช้อีกครั้งด้วย --no-include-workspace: คำสั่งนี้ยังคงรวมสถานะ การกำหนดค่า และไดเรกทอรีข้อมูลประจำตัวภายนอกไว้ในขอบเขต พร้อมข้ามการค้นหาพื้นที่ทำงานทั้งหมด

--only-config ยังทำงานได้เมื่อการกำหนดค่ามีรูปแบบไม่ถูกต้อง เนื่องจากไม่ได้แยกวิเคราะห์การกำหนดค่าเพื่อค้นหาพื้นที่ทำงาน

ขนาดและประสิทธิภาพ

OpenClaw ไม่ได้บังคับใช้ขนาดสำรองสูงสุดหรือขีดจำกัดขนาดต่อไฟล์ในตัว การเขียนไฟล์เก็บถาวรที่ไม่มีข้อมูลถูกสร้างขึ้นเป็นเวลาห้านาทีจะล้มเหลวและลบไฟล์ชั่วคราวที่เขียนเพียงบางส่วน แทนที่จะค้างอย่างไม่มีกำหนด ส่วนข้อจำกัดในทางปฏิบัติมาจาก:

  • พื้นที่ว่างสำหรับการเขียนไฟล์เก็บถาวรชั่วคราวรวมถึงไฟล์เก็บถาวรสุดท้าย
  • เวลาที่ใช้สำรวจโครงสร้างพื้นที่ทำงานขนาดใหญ่และบีบอัดลงใน .tar.gz
  • เวลาที่ใช้สแกนไฟล์เก็บถาวรซ้ำด้วย --verify หรือ openclaw backup verify
  • พฤติกรรมของระบบไฟล์ปลายทาง: OpenClaw เลือกใช้ขั้นตอนเผยแพร่ด้วยฮาร์ดลิงก์ที่ไม่เขียนทับก่อน และเปลี่ยนไปใช้การคัดลอกแบบเอกสิทธิ์เมื่อไม่รองรับฮาร์ดลิงก์

พื้นที่ทำงานขนาดใหญ่มักเป็นปัจจัยหลักที่กำหนดขนาดไฟล์เก็บถาวร ใช้ --no-include-workspace เพื่อการสำรองที่เล็กลง/เร็วขึ้น หรือใช้ --only-config เพื่อให้ได้ไฟล์เก็บถาวรที่เล็กที่สุด

ที่เกี่ยวข้อง

Was this useful?
On this page

On this page