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

รัน KVM และ VirtualBox พร้อมกัน: คู่มือขั้นตอน

KVM และ VirtualBox มันไม่สามารถ coexist ได้ หรือแทนจะเป็น VirtualBox จะไม่รันในขณะที่ KVM modules โหลดอยู่ใน memory KVM ทำงานได้ดีข้าง곁 VirtualBox ดังนั้นจึงเป็น one-way problem จริงๆ การแก้ไขมันง่ายด้วย น่าเสียดายที่ผมเจอ tutorials เยอะมากที่แนะนำให้ uninstall ไม่ว่าจะเป็นตัวนี้หรือตัวนั้น และใน guides ที่สมเหตุสมผลกว่าที่เลือก less stringent solution ส่วนใหญ่แค่บอกว่า rmmod นี้หรือนั่น แต่ไม่บอกว่าจะได้ things กลับมาทำงานอีกยังไง

ผมจะแสดงวิธีใช้ KVM และ VirtualBox side-by-side โดยไม่ต้อง uninstall อันไรอันหนึ่งหรือ reboot ระหว่างการใช้งาน คุณจะได้เรียนรู้วิธี disable และ enable products ให้ conflicting counterpart รันได้ In vivo, ไม่ต้อง reboot มาทำกันเลย

อาการ - VirtualBox รันไม่ได้

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

มันบอกว่า VirtualBox can't operate in VMX root mode Please disable the KVM kernel extension, recompile your kernel and reboot ว้าว ว้าว ช้าลง นี่เป็นข้อความ geeky และน่ากลัวมาก ไม่ต้อง recompile อะไรเลย วิธีแก้ใช้เวลา 5 วินาที และ non-destructive เลย

ปัญหาอธิบาย

VirtualBox และ KVM ทำงานร่วมกันไม่ได้ หมายความว่า KVM ต้องถูก disable หากเราอยากรัน VirtualBox คำถามคือ เราทำอย่างไร คำตอบคือ: โดยการ insert และ remove kernel modules

Linux operating system รองรับ insertion และ removal ของ kernel modules on-the-fly โดยไม่ต้อง reboot หมายความว่าคุณสามารถ load และ unload kernel modules เข้าและออกจาก memory ได้ in vivo รายละเอียดเพิ่มเติมในบทความ Linux commands และ Crash Book ของผม

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

Remove modules

มาตรวจสอบ kernel space เราจะสั่ง lsmod ก่อน เพื่อดูว่า modules ไหนโหลดอยู่ใน memory:

เห็นได้ว่า VirtualBox ใช้ vboxdrv และ vboxnetflt drivers ในขณะที่ KVM ใช้ kvm และ kvm_intel drivers หมายเหตุ: kvm_intel เฉพาะ Intel architecture มี kvm_amd สำหรับ AMD platforms เราต้อง unload KVM modules

/sbin/rmmod kvm_intel
/sbin/rmmod kvm

Big question: แต่ตอนนี้ KVM หายไปแล้ว ฉันจะได้มันกลับมายังไง?

Ah, ดีมาก! มาดูวิธี recover กัน

Insert modules

เช่นเดียวกับที่เรา remove modules เราสามารถ insert กลับได้ คุณต้อง locate modules บนดิสก์ของคุณ แล้ว insert พวกมัน คุณยังสามารถใช้คำสั่ง modprobe ซึ่งมีประโยชน์มากหากมี dependencies

มาหา modules (สมมติ sudo ในคำสั่ง แต่อาจรันเป็น root ได้):

updatedb
locate kvm

จะมีผลลัพธ์เยอะมาก ดังนั้นคุณสามารถจำกัดการค้นหาให้เป็น kvm.ko และ kvm-intel.ko

ตอนนี้ insert module ที่ตรงกับ running kernel ของคุณ คุณสามารถตรวจสอบได้ด้วย 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

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

โปรดสังเกต คำสั่งใน screenshot แตกต่างเล็กน้อยจากคำสั่งใน code box ข้างต้น ผมสมมติว่า /sbินอยู่ใน PATH ดังนั้นใช้ insmod สั้นๆ สำหรับความกระชับ พร้อมทั้งใช้ full module path เพื่อแสดงลักษณะ หากคุณตั้งใจจะ script ขั้นตอนนี้ ซึ่งคุณควรทำ full paths เป็น must และ command substitution ด้วย backticks แนะนำสำหรับ modularity ที่มากขึ้น

Scripts

ตอนนี้ เวลาทำ automation คุณต้องการสอง scripts หนึ่งสำหรับ unload KVM modules และหนึ่งสำหรับ load พวกมัน หากคุณอยากเข้มงวดจริงๆ คุณยังสามารถ stop VirtualBox service เมื่อใช้ KVM และ start หลังใช้ KVM ตัวอย่าง การปรับแต่ง VirtualBox drivers:

ดังนั้น script ตัวอย่างสำหรับ enable VirtualBox และ disable KVM จะเป็น:

#!/bin/bash
/sbin/rmmod kvm_intel
/sbin/rmmod kvm
/etc/init.d/vboxdrv start

และอีกอันสำหรับ load KVM และ stop VirtualBox จะเป็น:

#!/bin/bash
/etc/init.d/vboxdrv stop
/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 machines ให้แทนที่ kvm-intel.ko ด้วย kvm-amd.ko โปรดสังเกตว่า sanity checks จำเป็น เพื่อให้แน่ใจว่าคุณไม่ได้พยายาม start service ที่ started แล้ว ผมไม่ได้เพิ่มเหล่านี้ ถือว่าเป็น homework

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

ตอนนี้ วาง desktop shortcuts ที่ link ไปยัง scripts เหล่านี้ และ Bob's your uncle การใช้ uname แทน specific kernel versions รับรองว่า scripts ของคุณจะทำงานได้แม้หลัง kernel upgrades

Conclusion

เห็นได้ว่าความเป็นจริงไม่แย่เลยเหมือนที่คุณคาดหวัง บทช่วยสอนนี้เผยวิธีง่ายๆ ในการทำให้ VirtualBox และ KVM cooperate โดยไม่ uninstall อันไรอันหนึ่งหรือ reboot ตลอดเวลา สถาปัตยกรรม Linux อนุญาต live insertion ของ modules ดังนั้นสิ่งเดียวที่คุณต้อง reboot จริงๆ คือ kernel upgrade

บทช่วยสอนนี้สอนคุณหลายอย่าง รวมถึงวิธีชาญฉลาดในการรวม comfort กับ usability วิธี insert และ remove kernel modules วิธี script งานของคุณ และวิธีบรรลุเป้าหมายที่ต้องการคือมี KVM และ VirtualBox side by side

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

Cheers.