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 เคียงข้างกัน
ฉันหวังว่าคุณจะชอบอันนี้
ไชโย