KVM và VirtualBox được cho là không thể cùng tồn tại, hay đúng hơn là VirtualBox sẽ không chạy trong khi các mô-đun KVM được tải trong bộ nhớ. KVM có thể hoạt động tốt cùng với VirtualBox, vì vậy đây thực sự là vấn đề một chiều. Giải quyết nó cũng dễ dàng. Thật không may, tôi đã bắt gặp nhiều hướng dẫn khủng khiếp khuyên bạn nên gỡ cài đặt sản phẩm này hoặc sản phẩm kia. Và trong số các hướng dẫn lành mạnh hơn tìm kiếm một giải pháp ít nghiêm ngặt hơn, hầu hết chỉ đơn giản là cho bạn biết cách sửa đổi cái này hoặc cái kia, nhưng họ không cho bạn biết cách để mọi thứ hoạt động trở lại.
Tôi sẽ chỉ cho bạn cách sử dụng song song KVM và VirtualBox mà không cần gỡ cài đặt bất kỳ cái nào hoặc khởi động lại giữa các lần sử dụng. Bạn sẽ tìm hiểu cách tắt và bật sản phẩm để đối tác xung đột có thể chạy. In vivo, không khởi động lại. Làm thôi nào.
Triệu chứng - VirtualBox không chạy
Bạn có thể gặp loại lỗi này khi khởi chạy VirtualBox:
Nó nói, VirtualBox không thể hoạt động ở chế độ gốc VMX. Vui lòng tắt phần mở rộng nhân KVM, biên dịch lại nhân của bạn và khởi động lại. Chà, chà, chậm lại. Đây là một tin nhắn rất táo bạo và đáng sợ. Không cần phải biên dịch lại bất cứ điều gì. Quá trình khắc phục mất năm giây và hoàn toàn không phá hủy.
Giải thích vấn đề
VirtualBox và KVM không thể hoạt động cùng nhau. Điều này có nghĩa là KVM cần phải được tắt nếu chúng tôi muốn chạy VirtualBox. Câu hỏi là làm thế nào chúng ta làm điều này. Câu trả lời là:bằng cách chèn và xóa các mô-đun hạt nhân.
Hệ điều hành Linux hỗ trợ chèn và loại bỏ các mô-đun hạt nhân một cách nhanh chóng mà không cần khởi động lại. Điều này có nghĩa là bạn có thể tải và dỡ các mô-đun hạt nhân đến và từ bộ nhớ trong vivo. Thêm chi tiết trong bài viết về lệnh Linux của tôi và Sổ sự cố.
Để đạt được những gì chúng ta cần, chúng ta sẽ sử dụng các lệnh insmod và rmmod.
Xóa mô-đun
Hãy kiểm tra không gian hạt nhân. Trước tiên, chúng tôi sẽ đưa ra lệnh lsmod để xem những mô-đun nào được tải vào bộ nhớ:
Như bạn có thể thấy, VirtualBox sử dụng trình điều khiển vboxdrv và vboxnetflt, trong khi KVM sử dụng trình điều khiển kvm và kvm_intel. Lưu ý:kvm_intel dành riêng cho kiến trúc Intel. Có kvm_amd cho nền tảng AMD. Chúng ta cần dỡ các mô-đun KVM.
/sbin/rmmod kvm_intel
/sbin/rmmod kvm
Câu hỏi lớn:Nhưng bây giờ, KVM đã biến mất. Làm thế nào tôi có thể lấy lại nó, xin vui lòng?
A, tốt lắm! Hãy xem làm thế nào chúng ta có thể phục hồi.
Chèn mô-đun
Giống như chúng tôi đã xóa các mô-đun, chúng tôi có thể chèn chúng. Bạn sẽ cần xác định vị trí các mô-đun trên đĩa của mình rồi chèn chúng vào. Bạn cũng có thể sử dụng lệnh modprobe, lệnh này luôn hữu ích nếu có các phụ thuộc.
Hãy tìm các mô-đun (giả sử sudo trong các lệnh, nhưng cũng có thể chạy với quyền root):
cập nhậtb
xác định vị trí kvm
Sẽ có nhiều kết quả, vì vậy bạn có thể giới hạn tìm kiếm trong kvm.ko và kvm-intel.ko.
Bây giờ, hãy chèn cái phù hợp với kernel đang chạy của bạn. Bạn có thể kiểm tra bằng 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
Đây là một ảnh chụp màn hình. Đầu tiên, chúng tôi kiểm tra mô-đun kvm. lệnh lsmod cho thấy nó không được tải. Sau đó, chúng tôi tải các mô-đun kvm và đưa ra lệnh lsmod một lần nữa.
Xin lưu ý rằng các lệnh chụp màn hình hơi khác so với các lệnh được viết trong hộp mã ở trên. Tôi cho rằng /sbin nằm trong PATH, vì vậy tôi đã sử dụng lệnh insmod rút gọn cho ngắn gọn. Đồng thời, tôi cũng sử dụng đường dẫn mô-đun đầy đủ để cho bạn thấy nó trông như thế nào. Nếu bạn định viết kịch bản cho quy trình, điều mà bạn nên làm, thì các đường dẫn đầy đủ là điều bắt buộc và việc thay thế lệnh bằng cách sử dụng backticks được khuyến nghị để có tính mô đun cao hơn.
Tập lệnh
Bây giờ, thời gian để tự động hóa điều này. Bạn cần hai tập lệnh. Một để dỡ các mô-đun KVM và một để tải chúng. Nếu bạn thực sự muốn nghiêm ngặt, thì bạn cũng có thể dừng dịch vụ VirtualBox khi sử dụng KVM và khởi động nó sau khi sử dụng KVM. Ví dụ, đang loay hoay với trình điều khiển VirtualBox:
Do đó, tập lệnh mẫu để bật VirtualBox và tắt KVM sẽ là:
#!/bin/bash
/sbin/rmmod kvm_intel
/sbin/rmmod kvm
/etc/init.d/vboxdrv bắt đầu
Và một để tải KVM và dừng VirtualBox sẽ là:
#!/bin/bash
/etc/init.d/vboxdrv dừng lại
/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
Đối với máy AMD, thay thế kvm-intel.ko bằng kvm-amd.ko. Xin lưu ý rằng cần phải kiểm tra độ chính xác để đảm bảo rằng bạn không cố bắt đầu một dịch vụ đã bắt đầu. Tôi đã không thêm những thứ này; coi chúng như bài tập về nhà.
Tương tự như vậy, xin lưu ý kiến trúc bộ xử lý. Đối với hầu hết mọi người, x86 (và x86_64) sẽ hoạt động, nhưng bạn có thể có kiến trúc khác, như SPARC, ARM, Itanium hoặc các kiến trúc khác, vì vậy hãy thay đổi cho phù hợp.
Bây giờ, hãy đặt các lối tắt trên màn hình liên kết đến các tập lệnh này và Bob là chú của bạn. Sử dụng uname thay vì các phiên bản kernel cụ thể đảm bảo rằng tập lệnh của bạn sẽ hoạt động ngay cả sau khi nâng cấp kernel.
Kết luận
Như bạn có thể thấy, thực tế không khắc nghiệt như bạn mong đợi. Hướng dẫn này tiết lộ những cách đơn giản để VirtualBox và KVM hợp tác với nhau mà không cần gỡ cài đặt cái này hay cái kia hoặc liên tục khởi động lại. Kiến trúc Linux cho phép chèn trực tiếp các mô-đun, vì vậy điều duy nhất bạn thực sự phải khởi động lại là nâng cấp kernel.
Hướng dẫn này dạy cho bạn một số điều, bao gồm cách thông minh để kết hợp sự thoải mái với khả năng sử dụng, cách chèn và xóa mô-đun hạt nhân, cách viết kịch bản công việc của bạn và cách đạt được mục tiêu mong muốn là có KVM và VirtualBox cạnh nhau.
Tôi hy vọng bạn thích cái này.
Chúc mừng.