Computer >> คอมพิวเตอร์ >  >> ซอฟต์แวร์ >> เครื่องเสมือน

วิธีโคลนเครื่องเสมือนใน KVM - บทช่วยสอน

หมายเหตุ:บทช่วยสอนนี้จะถือว่าคุณไม่มี virt-sysprep; ดูด้านล่าง!

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

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

หมายเหตุ:ภาพนี้นำมาจาก Wikimedia ซึ่งได้รับอนุญาตภายใต้ CC BY 2.0

วิธีที่มีประสิทธิภาพน้อยกว่า

เรามาคุยกันสั้น ๆ เกี่ยวกับ virt-clone สักครู่ ไม่ใช่ยูทิลิตี้ที่ไม่ดี แต่การใช้งานนั้นไม่ได้มาตรฐานในการแจกจ่าย บางตัวจัดส่งทั้งคอมโพเนนต์ GUI ซึ่งเป็นส่วนหนึ่งของ Virtual Machine Manager บางตัวยังมีเครื่องมือบรรทัดคำสั่งอีกด้วย ในทั้งสองกรณี การโคลนจะได้รับเพียง ID เฉพาะใหม่และที่อยู่ MAC เท่านั้น แต่ไม่มีข้อมูลอื่น ไฟล์การกำหนดค่าจะถูกเก็บไว้ภายใต้ /etc/libvirt/qemu

นี่คือตัวอย่าง:

ตอนนี้เราไม่ต้องการสิ่งนี้ ไม่สมบูรณ์แบบ

การโคลนนิ่ง + เครื่องมือการค้า

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

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

cp <ไฟล์ดิสก์เก่า> <ไฟล์ดิสก์ใหม่>

ตอนนี้ตารางพาร์ติชัน:

kpartx -a <ไฟล์ดิสก์เสมือน>

สิ่งนี้จะสร้างผลลัพธ์บางอย่าง ในความเป็นจริง คุณจะเห็น mapper แยกต่างหากสำหรับแต่ละพาร์ติชันที่อยู่ภายในเครื่องเสมือน ตัวอย่างเช่น ถ้าคุณมี / และ /บ้าน คุณจะมีผู้ทำแผนที่สองคน

kpartx -av /kvm/disk.raw
เพิ่มแผนที่ loop0p1 (253:0):0 4206592 เชิงเส้น /dev/loop0 2048
เพิ่มแผนที่ loop0p2 (253:1):0 79677440 เชิงเส้น /dev/loop0 4208640

ตอนนี้เป็นเรื่องของการติดตั้งอุปกรณ์ที่เกี่ยวข้องและทำการเปลี่ยนแปลงต่อโฮสต์:

เมานต์ /dev/mapper/<วนกลับพาร์ติชันที่เกี่ยวข้อง> /mountpoint

ตัวอย่างเช่น:

เมานต์ /dev/mapper/loop0p1 /mnt

การเปลี่ยนแปลงโฮสต์ที่ไม่ซ้ำกัน

ตอนนี้เครื่องเสมือนของคุณต้องการการเปลี่ยนแปลงดังต่อไปนี้:

/ etc / โฮสต์
/etc/ชื่อโฮสต์

และขึ้นอยู่กับว่าคุณใช้ Debian หรือ RedHat/SUSE การกำหนดค่าเครือข่าย แม้ว่าสิ่งเหล่านี้อาจไม่จำเป็นหากคุณใช้ DHCP อย่างไรก็ตาม หากคุณกำลังใช้ที่อยู่ IP แบบคงที่ คุณต้อง:

/etc/sysconfig/network/ifcfg-<อุปกรณ์>

หรือ

/etc/network/อินเทอร์เฟซ

การเปลี่ยนแปลงอื่น ๆ อาจจำเป็น แต่มีการเปลี่ยนแปลงพื้นฐาน เมื่อคุณบันทึกการเปลี่ยนแปลงแล้ว ให้ต่อเชื่อม ขั้นตอนต่อไปคือแก้ไขไฟล์การกำหนดค่า KVM สำหรับโคลนใหม่ ไฟล์ XML จะถูกเก็บไว้ในไดเร็กทอรี /etc/kvm/vm หรือ /etc/libvirt/qemu หากเครื่องถูกสร้างขึ้นโดยอัตโนมัติโดยใช้ Virtual Machine Manager

การเปลี่ยนแปลงไฟล์ XML

ขั้นแรก สร้างสำเนาของการกำหนดค่าเทมเพลต

ตอนนี้ คุณจะต้องแก้ไข ID ชื่อ และที่อยู่ MAC เฉพาะของโดเมนของคุณ เช่นเดียวกับก่อนหน้านี้ คุณจะต้องใช้ตรรกะเอกลักษณ์บางประเภท อาจใช้ grep, awk และการค้นหาแบบอินไลน์ &แทนที่ด้วย sed รวมถึงนิพจน์ทั่วไปที่เหมาะสมเมื่อจำเป็น เพื่อให้คุณสามารถเขียนสคริปต์ขั้นตอนของคุณได้อย่างเต็มที่ โดยปกติคุณจะต้องชี้คำสั่งของฮาร์ดดิสก์ไปยังไฟล์ที่ถูกต้อง

ตัวอย่างเช่น นี่คือชุดคำสั่งที่คุณอาจต้องใช้:

sed -i -e 's/\.*/\<\/uuid\>/uuid\>dedoimedo\<\/uuid/'
ไฟล์.xml

และด้วย grep เพื่อให้แน่ใจว่าใช้งานได้:

sed -i -e 's/\.*/\<\/uuid\>/uuid\>dedoimedo\<\/uuid/'
ไฟล์.xml. | เกรป เดโดอิเมโด

เดโดเมโดะ

รวมทุกอย่างเข้าด้วยกัน

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

#!/bin/bash

# ระงับระบบปฏิบัติการเทมเพลตขณะทำการโคลน

virsh ระงับ <โดเมน>
cp <ดิสก์เก่า> <ดิสก์ใหม่>
virsh เรซูเม่ <โดเมน>

kpartx -a <ดิสก์ใหม่>

# ตรรกะบางอย่างในการอ่านพาร์ติชันที่เกี่ยวข้อง

เมานต์ <พาร์ติชันที่ต้องการ> <จุดเมานต์>

# ตรรกะบางอย่างในการแยกวิเคราะห์เนื้อหาของไฟล์เฉพาะของโฮสต์

sed -i -e 's/old hostname line/new hostname line/' /etc/HOSTNAME
sed -i -e 's/old hostname line/new hostname line/' /etc/hosts
sed -i -e 's/old IP config/new IP config/' /etc/sysconfig/network/ifcfg-eth0

umount <จุดเมานต์>

cp /etc/kvm/vm/old.xml /etc/kvm/vm/new.xml

# ตรรกะบางอย่างเพื่อสร้าง uuid, ชื่อ, mac, ฯลฯ ใหม่
# ตรรกะบางอย่างในการแยกวิเคราะห์ไฟล์ XML อย่างถูกต้อง

sed -i -e 's/old uuid/new uuid/' /etc/kvm/vm/new.xml
sed -i -e 's/ชื่อเก่า/ชื่อใหม่/' /etc/kvm/vm/new.xml
sed -i -e 's/old mac/new mac/' /etc/kvm/vm/new.xml
sed -i -e 's/old disk/new disk/' /etc/kvm/vm/new.xml

virsh สร้าง /etc/kvm/vm/new.xml

ทางออก 0

และเราทำเสร็จแล้ว บูตและสนุกได้เลย!

อนาคตที่เป็นไปได้มากที่สุด:virt-sysprep

บทช่วยสอนทั้งหมดนี้จะไร้ประโยชน์หากคุณมี virt-sysprep ในกล่องของคุณ ซึ่งอาจหมายความว่าคุณกำลังใช้ระบบปฏิบัติการโปรดรุ่นใดรุ่นหนึ่งในภายหลัง อย่างไรก็ตาม ในสภาพแวดล้อมทางธุรกิจ มักจะไม่เป็นเช่นนั้น ดังนั้นเครื่องมือนี้จะไม่พร้อมใช้งานสำหรับผู้ดูแลระบบส่วนใหญ่ หากคุณมีโอกาสใช้มัน มันจะมีการปรับปรุงเครื่องมือโคลนพื้นฐานที่มีประโยชน์มาก ๆ การอ้างอิงเอกสารต้นฉบับ:

Virt-sysprep รีเซ็ตหรือยกเลิกการกำหนดค่าเครื่องเสมือนเพื่อให้สามารถทำการโคลนได้ ขั้นตอนในกระบวนการนี้รวมถึงการลบคีย์โฮสต์ SSH การลบการกำหนดค่า MAC ของเครือข่ายถาวร และการลบบัญชีผู้ใช้ แต่ละขั้นตอนสามารถเปิดหรือปิดได้ตามต้องการ Virt-sysprep ปรับเปลี่ยนเกสต์หรือดิสก์อิมเมจ แขกต้องปิดตัวลง หากคุณต้องการรักษาเนื้อหาที่มีอยู่ของเกสต์ คุณต้องคัดลอกหรือโคลนดิสก์ก่อน

เราจะพูดถึงเครื่องมือที่มีประโยชน์นี้แยกกันในบทช่วยสอนอื่น

อ่านเพิ่มเติม

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความสนุกของ KVM:

KVM + VirtualBox อยู่ร่วมกันอย่างกลมกลืน

บทช่วยสอนเกี่ยวกับเครือข่ายบริดจ์ KVM

การจัดเก็บ KVM และการจัดการเครือข่าย

และนี่คือวิธีการโคลนเครื่อง ESXi ซึ่งมีแนวคิดคล้ายกัน

แหล่งข้อมูลอื่นสำหรับเครื่องมืออิมเมจดิสก์ของเครื่องเสมือน - libguestfs

สรุป

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

ในหมายเหตุที่ร้ายแรงกว่านั้น คุณได้เรียนรู้เพิ่มเติมเล็กน้อยเกี่ยวกับการกำหนดค่า KVM และตำแหน่งไฟล์ การใช้ virt-clone แบบพื้นฐาน วิธีติดตั้งดิสก์เครื่องเสมือนและแก้ไขข้อมูลในพาร์ติชันที่เกี่ยวข้องโดยใช้ partx รวมถึงการกำหนดค่าเครือข่ายและโฮสต์ และ วิธีกำหนดฟิลด์เฉพาะให้กับโดเมนเสมือนของคุณ และยังมี libguestfs ด้วย รวมถึงคำแนะนำที่เป็นประโยชน์อย่างยิ่งอื่นๆ สรุปไม่เลวสำหรับการทำงานห้านาที

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

ฉันเดาว่าจะเป็นทั้งหมด

ไชโย