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 ไม่ตรงกันว่าเครื่องคืออะไร