รูปแบบ qcow2 มีให้ ถาวร ที่เก็บข้อมูลภายในสำหรับหน่วยความจำเครื่องเสมือน เมื่อสแนปช็อตเครื่องเสมือนที่รันด้วย qcow2 สำรอง สถานะ RAM จะถูกดัมพ์ภายในไฟล์ qcow2 เดียวกันกับที่ใช้สำหรับการจัดเก็บ
จาก หน้า qcow2 อย่างเป็นทางการ:
แต่ละสแน็ปช็อตมีคำอธิบายโดยส่วนหัว:
typedef โครงสร้าง QCowSnapshotHeader {
/* ส่วนหัวอยู่ในแนวเดียวกัน 8 ไบต์ */
uint64_t l1_table_offset;
uint32_t l1_size;
uint16_t id_str_size;
uint16_t name_size;
uint32_t date_sec;
uint32_t date_nsec;
uint64_t vm_clock_nsec;
uint32_t vm_state_size;
uint32_t extra_data_size; /* สำหรับขยาย */
/* ข้อมูลเพิ่มเติมตามนี้ */
/* id_str ติดตาม */
/*ชื่อตามหลัง*/
} QCowSnapshotHeader;
ซึ่งอธิบายเพิ่มเติม:
vm_state_size
ให้ขนาดของสถานะเครื่องเสมือนที่เป็น
บันทึกเป็นส่วนหนึ่งของภาพรวมนี้ สถานะจะถูกบันทึกไว้ในตำแหน่งของ
ตาราง L1 ดั้งเดิม ต่อจากส่วนหัวของรูปภาพ
ในทางกลับกัน จะเกิดอะไรขึ้นเมื่อถ่ายภาพสแน็ปช็อตของไฟล์ภาพดิบ (เช่น: ไม่ได้ใช้ qcow2) Libvirt เรียกสแน็ปช็อตประเภทนี้ว่า ภาพรวมภายนอก (เปรียบเทียบกับ ภาพรวมภายใน ของไฟล์ qcow2) เนื่องจากไฟล์ qcow2 ใหม่ถูกสร้างขึ้นและเชื่อมโยงกับไฟล์ raw ดั้งเดิม (และตอนนี้เป็นแบบอ่านอย่างเดียว) จากนั้น Libvirt จะบันทึกสถานะเครื่องเสมือน (เช่น: เนื้อหา RAM) ในไฟล์เฉพาะ โดยทั่วไปจะอยู่ภายในส่วนย่อยของ /var/lib/libvirt/
. ในที่สุดไฟล์ XML ของข้อมูลเมตาจะถูกสร้างขึ้นเพื่อ "ติด" ไฟล์ดัมพ์เข้ากับสถานะของดิสก์ที่บันทึกไว้ในไฟล์โอเวอร์เลย์
การสนับสนุน Libvirt สำหรับสแน็ปช็อตภายนอกนั้นไม่แข็งแกร่งมากนัก ตัวอย่างเช่น (หากสิ่งต่างๆ ไม่เปลี่ยนแปลงเมื่อเร็วๆ นี้) คุณสามารถสร้างสแน็ปช็อตภายนอกด้วยคำสั่งเดียว แต่คุณต้องใช้คำสั่งที่ซับซ้อนหลายคำสั่งเพื่อลบ/ย้อนกลับ ในเวลาเดียวกัน สำหรับปริมาณงานการผลิต RedHat แนะนำอย่างเป็นทางการให้ใช้สแน็ปช็อตภายนอก เนื่องจากค่อนข้างมีประสิทธิภาพและเร็วกว่าสแน็ปช็อตภายในแบบสายยาว (และขาย RHEV ซึ่งซ่อนความซับซ้อนของสแน็ปช็อตภายนอกจากผู้ใช้)