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

การใช้ KVM และ VirtualBox เคียงข้างกัน

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

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

อาการ - VirtualBox ไม่ทำงาน

คุณอาจเห็นข้อผิดพลาดประเภทนี้เมื่อคุณเปิด VirtualBox:

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

อธิบายปัญหา

VirtualBox และ KVM ไม่สามารถทำงานร่วมกันได้ ซึ่งหมายความว่าจำเป็นต้องปิดการใช้งาน KVM หากเราต้องการเรียกใช้ VirtualBox คำถามคือเราจะทำสิ่งนี้ได้อย่างไร คำตอบคือ:โดยการแทรกและลบโมดูลเคอร์เนล

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

เพื่อให้ได้สิ่งที่เราต้องการ เราจะใช้คำสั่ง insmod และ rmmod

ลบโมดูล

ตรวจสอบพื้นที่เคอร์เนลกัน เราจะออกคำสั่ง lsmod ก่อนเพื่อดูว่าโมดูลใดถูกโหลดลงในหน่วยความจำ:

อย่างที่คุณเห็น VirtualBox ใช้ไดรเวอร์ vboxdrv และ vboxnetflt ในขณะที่ KVM ใช้ไดรเวอร์ kvm และ kvm_intel หมายเหตุ:kvm_intel เป็นสถาปัตยกรรมเฉพาะของ Intel มี kvm_amd สำหรับแพลตฟอร์ม AMD เราจำเป็นต้องยกเลิกการโหลดโมดูล KVM

/sbin/rmmod kvm_intel
/sbin/rmmod kvm

คำถามใหญ่:แต่ตอนนี้ KVM หายไปแล้ว ฉันจะขอคืนได้อย่างไร

อา ดีมาก! มาดูกันว่าเราจะฟื้นตัวได้อย่างไร

แทรกโมดูล

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

มาหาโมดูลกัน (สมมติว่า sudo ในคำสั่ง แต่สามารถเรียกใช้ในฐานะรูทได้เช่นกัน):

อัพเดทb
ค้นหา kvm

จะมีผลลัพธ์มากมาย ดังนั้นคุณสามารถจำกัดการค้นหาไว้ที่ kvm.ko และ kvm-intel.ko

ตอนนี้ใส่อันที่ตรงกับเคอร์เนลที่กำลังทำงานอยู่ของคุณ คุณสามารถตรวจสอบโดยใช้ uname -r

/sbin/insmod /lib/modules/`uname -r`/kernel/arch/x86/kvm/kvm.ko
/sbin/insmod /lib/modules/`uname -r`/kernel/arch/x86/kvm/kvm-intel.ko

นี่คือภาพหน้าจอ ก่อนอื่น เราตรวจสอบโมดูล kvm คำสั่ง lsmod แสดงว่ายังไม่ได้โหลด จากนั้น เราโหลดโมดูล kvm และออกคำสั่ง lsmod อีกครั้ง

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

สคริปต์

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

ดังนั้น สคริปต์ตัวอย่างเพื่อเปิดใช้งาน VirtualBox และปิดใช้งาน KVM จะเป็น:

#!/bin/bash
/sbin/rmmod kvm_intel
/sbin/rmmod kvm
/etc/init.d/vboxdrv เริ่มต้น

และสิ่งที่ต้องโหลด KVM และหยุด VirtualBox คือ:

#!/bin/bash
/etc/init.d/vboxdrv หยุด
/sbin/insmod /lib/modules/`uname -r`/kernel/arch/x86/kvm/kvm.ko
/sbin/insmod /lib/modules/`uname -r`/kernel/arch/x86/kvm/kvm-intel.ko

สำหรับเครื่อง AMD ให้แทนที่ kvm-intel.ko ด้วย kvm-amd.ko โปรดทราบว่าจำเป็นต้องมีการตรวจสุขภาพเพื่อให้แน่ใจว่าคุณไม่ได้พยายามเริ่มบริการที่เริ่มต้น ฉันยังไม่ได้เพิ่มสิ่งเหล่านี้ ถือว่าเป็นการบ้าน

ในทำนองเดียวกัน โปรดสังเกตสถาปัตยกรรมโปรเซสเซอร์ สำหรับคนส่วนใหญ่ x86 (และ x86_64) จะใช้งานได้ แต่คุณอาจมีสถาปัตยกรรมอื่น เช่น SPARC, ARM, Itanium หรืออื่นๆ ดังนั้นให้เปลี่ยนตามนั้น

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

สรุป

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

บทช่วยสอนนี้จะสอนคุณหลายอย่าง รวมถึงวิธีที่ชาญฉลาดในการรวมความสะดวกสบายเข้ากับการใช้งาน วิธีแทรกและลบโมดูลเคอร์เนล วิธีเขียนสคริปต์งานของคุณ และวิธีบรรลุเป้าหมายที่ต้องการโดยมี KVM และ VirtualBox เคียงข้างกัน

ฉันหวังว่าคุณจะชอบอันนี้

ไชโย