ทุกสิ่งที่ฉันอ่านทำให้ฉันคิดว่าสแน็ปช็อต lvm เป็นสำเนาโดยตรงของโลจิคัลวอลุ่มที่เป็นสแน็ปช็อต (ed) แต่จะเป็นไปได้อย่างไรเมื่อใช้เวลา 10 วินาทีในสแนปชอตโลจิคัลวอลุ่ม 90 กิ๊ก หากฉันมีดิสก์อิมเมจ KVM qcow2 บน /var และ /var คือ 90 GB ที่ /dev/volgroup1/lv_var ฉันทำ lvcreate -L 90G -n var_snapped -s /dev/volgroup1/lv_var หมายความว่าฉันสามารถลบอิมเมจ qcow2 บน var จากนั้นเพียงเมานต์โลจิคัลวอลุ่ม var_snapped และคัดลอกอันบนนั้นและฉันจะเป็น ก็ได้? ฉันไม่เข้าใจว่าสำเนา 1:1 สามารถเกิดขึ้นได้เร็วขนาดนั้นได้อย่างไร

answer

เพื่อตอบคำถามนี้ เราจำเป็นต้องสร้างวิธีการทำงานของ LVM นี่คือส่วนสำคัญของมัน

กลุ่มวอลุ่มประกอบด้วยฟิสิคัลวอลุ่มหลายตัว หรือpvs. พวกเขาจะแบ่งออกเป็นขอบเขตอีกครั้ง แต่ละขอบเขตใช้พื้นที่จำนวนคงที่บนฟิสิคัลวอลุ่ม - ซึ่งระบุไว้เมื่อสร้างกลุ่มวอลุ่ม (หรือใช้ค่าเริ่มต้น)

เมื่อคุณสร้าง Logical Volume คุณต้องระบุขนาดที่ต้องการ สิ่งนี้จะจัดสรรจำนวนขอบเขตในกลุ่มวอลุ่มที่จำเป็นเพื่อให้สามารถเข้าถึงพื้นที่ดิสก์ตามจำนวนที่ระบุ

ตอนนี้ คุณอาจเริ่มใช้โวลุ่มนั้นเพื่ออะไรบางอย่าง เมื่อคุณสร้างสแน็ปช็อตของโวลุ่ม คุณสามารถระบุได้ว่าสแนปชอตมีขนาดเล็กกว่าโวลุ่มที่คุณ 'คัดลอก' วิธีนี้ใช้ได้ผลเนื่องจากปริมาณสแน็ปช็อตอ้างอิงถึงขอบเขตทั้งหมดของโวลุ่มแรก และใช้ขอบเขตที่จัดสรรใหม่เท่านั้นเพื่อเก็บความแตกต่างระหว่างทั้งสอง คุณสามารถบอกได้ว่าสแน็ปช็อตถูกใช้ไปมากน้อยเพียงใดด้วยlvsคำสั่ง -

ดังนั้น การถ่ายภาพสแนปชอตจึงใช้เวลาสั้นมาก เนื่องจาก LVM จะสร้างการอ้างอิงถึงขอบเขตของวอลุ่มแรกเท่านั้น และจะไม่คัดลอกข้อมูลใดๆ เลย

จากผลข้างเคียงของสิ่งนี้ หากความแตกต่างมากกว่าขอบเขตที่จัดสรรไว้ - สแนปชอตจะถือเป็นโมฆะ - และคุณจะเห็นข้อความแสดงข้อผิดพลาดจำนวนมากใน dmesg (ซึ่งไม่เป็นอันตรายต่อโวลุ่มแรก)

ฉันหวังว่านี่จะช่วยได้.

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

ใช่ หากคุณสร้างสแนปชอต จากนั้นลบไฟล์จากจุดเริ่มต้น ไฟล์นั้นจะยังคงอยู่ในสแนปชอต (หรือในทางกลับกัน )

In LVM2, snapshots are read/write by default. Read/write snapshots work like read-only snapshots, with the additional feature that if data is written to the snapshot, that block is marked in the exception table as used, and never gets copied from the original volume. This opens up many new possibilities that were not possible with LVM1's read-only snapshots. One example is to snapshot a volume, mount the snapshot, and try an experimental program that change files on that volume. If you don't like what it did, you can unmount the snapshot, remove it, and mount the original filesystem in its place. It is also useful for creating volumes for use with Xen. You can create a disk image, then snapshot it and modify the snapshot for a particular domU instance. You can then create another snapshot of the original volume, and modify that one for a different domU instance. Since the only storage used by a snapshot is blocks that were changed on the origin or the snapshot, the majority of the volume is shared by the domU's.

http://tldp.org/HOWTO/LVM-HOWTO/snapshotintro.html

คู่มือ LVM เป็นสิ่งที่ยอดเยี่ยม:

http://tldp.org/HOWTO/LVM-HOWTO/snapshotintro.html