Docs · อ้างอิง

VM bundle

เครื่องคือโฟลเดอร์ ข้างในมีอะไร อะไรคัดลอกได้ปลอดภัย และอะไรควร commit

เครื่อง 1VMTool ไม่ใช่แถวฐานข้อมูลหรือ blob ที่มองไม่เห็น — เป็นไดเรกทอรีที่มีนามสกุล .vm ที่คุณตรวจ คัดลอก และย้ายได้

dev.vm/
  config.json         the definition — commit it
  disk.asif           primary disk, sparse
  snapshots/
    index.json
    a1c2/disk.asif

เครื่องอยู่ในโฟลเดอร์ไลบรารีใน home โดยค่าเริ่มต้น ชี้ ONEVM_HOME ที่อื่น — SSD ภายนอก เช่น — และไลบรารีทั้งก้อนย้ายตาม

config.json

นิยามเครื่อง: ประเภท guest เอนจิ้น CPU หน่วยความจำ ดิสก์ เครือข่าย โฟลเดอร์แชร์ อินพุต และการตั้งค่ากราฟิก เป็น JSON ธรรมดาและเป็นไฟล์ที่ควร commit ถ้าต้องการนิยามเครื่องใน version control คู่กับโปรเจกต์ที่มันรองรับ

1vm config dev          # print it
1vm get dev             # list every dotted key

เพราะนิยามแยกจากดิสก์ การแชร์ รูปร่าง เครื่องกับเพื่อนร่วมงานใช้ไม่กี่ kilobyte พวกเขารัน 1vm create กับมันและติดตั้ง guest ของตัวเอง

ดิสก์

เป็น sparse จึงโตเมื่อ guest เขียน แทนการจัดสรรล่วงหน้า — ดิสก์ 256 GiB บนเครื่องที่เขียน 9 GiB ใช้พื้นที่ประมาณ 9 GiB ชื่อไฟล์ต่างกันต่อเอนจิ้นเพราะสองเอนจิ้นใช้รูปแบบดิสก์ต่างกัน 1vm du รายงานตัวเลขตรงๆ ทั่วไลบรารี

Snapshots

snapshots/ เก็บต้นไม้ แต่ละ snapshot เป็น APFS clone ที่แชร์บล็อกกับดิสก์สดจนกว่าฝ่ายหนึ่งจะ diverge นั่นคือเหตุผลที่ snapshot ใหม่เพิ่มแทบไม่มีอะไร และ du แยก allocated จาก on disk จาก reclaimable

การคัดลอกเครื่อง

เพราะเป็นโฟลเดอร์ การคัดลอกใช้ได้ — แต่ชอบ 1vm clone ซึ่งใช้ primitive โคลนเดียวกันและเสร็จทันที แทนการ duplicate ไบต์:

1vm clone dev test              # linked, shares blocks
1vm clone dev test --full       # independent copy
1vm archive dev                 # compress a stopped machine; run again to restore

อย่าแก้ไฟล์เครื่องที่กำลังรัน

การเปลี่ยนการตั้งค่าผ่าน 1vm set ซึ่งตรวจและใช้สดเมื่อเอนจิ้นรองรับ การแก้ config.json ใต้เครื่องที่กำลังรันคือวิธีเดียวที่ทำให้โฮสต์และ guest ไม่ตรงกันว่าเครื่องคืออะไร