На загальну думку KVM і VirtualBox не можуть співіснувати на одній операційній системі. Точніше VirtualBox не зможе запуститися, якщо модулі KVM завантажені в оперативну пам'ять. У той же час KVM прекрасно працює при наявності встановленого VirtualBox, тому проблема ця одностороння. Рішення її також досить просте. На жаль, є величезна кількість посібників, які рекомендують видалити одну з програм. Деякі інші пропонують скористатися rmmod, однак вони нічого не говорять про те, як потім повернути все назад.
Я покажу вам, як спільно використовувати KVM і VirtualBox без видалення однієї з програм, або перезавантаження для перемикання між ними. Ви дізнаєтеся, як дезактивувати або активувати одну з програм без перезавантаження, щоб інша могла працювати.
Симптом - VirtualBox не працює
При спробі запуску VirtualBox ви можете побачити наступне повідомлення про помилку:
У ньому говориться наступне: "VirtualBox не може працювати в режимі VMX root. Будь ласка, деактивуйте KVM kernel extension, Перекомпілюйте ваше ядро і перезавантажити". Страшне повідомлення. Однак нічого не потрібно перекомпілювати. Рішення проблеми займе п'ять секунд і буде абсолютно безболісним.
Опис проблеми
Як вже говорилося, VirtualBox and KVM не можуть працювати разом. Це означає, що необхідно деактивувати KVM перед запуском VirtualBox. Питання в тому, як це зробити. Відповідь - шляхом завантаження та видалення модулів ядра. Операційна система Linux підтримує завантаження і видалення модулів ядра з оперативної пам'яті на льоту, без перезавантаження. Для цього ми будемо використовувати команди insmod і rmmod.
видалення модулів
Спочатку скористаємося командою lsmod, щоб подивитися, які модулі завантажені в пам'ять:
Як ви можете бачити, VirtualBox використовує драйвери vboxdrv і vboxnetflt, в той час як KVM використовує драйвери kvm і kvm_intel. Зверніть увагу: kvm_intel призначений спеціально для архітектури Intel. Для AMD є kvm_amd.
Нам необхідно вивантажити з пам'яті модулі KVM.
Виникає велике питання - тепер KVM деактивовано, як змусити її знову працювати?
Цим ми зараз і займемося.
Завантаження модулів
Ми можемо завантажити модулі так само легко, як вивантажили їх. Для цього необхідно визначити, де вони знаходяться на жорсткому диску (можна також спробувати команду modprobe).
Для пошуку модулів використовуємо наступні команди (updatedb потрібно запускати за допомогою sudo, або з-під root):
Як правило, знаходиться дуже багато файлів, тому пошук можна обмежити kvm.ko і kvm-intel.ko.
А тепер завантажимо модулі, відповідні вашої версії ядра. Її можна перевірити за допомогою команди uname -r.
Скріншот представлений нижче. По-перше, перевіряємо наявність модуля kvm. Команда lsmod показала, що він не завантажений. Тепер ми завантажуємо модулі kvm і знову перевіряємо їх наявність за допомогою команди lsmod.
Зверніть увагу, що команди на скріншоті дещо відрізняються від команд, представлених вище. Я припустив, що / sbin є у змінній PATH, тому використовував більш коротку форму команди. У той же час я використав повний шлях до модуля, щоб показати, як це може виглядати. Якщо ви маєте намір написати скрипт для автоматизації цих дій, то необхідно використовувати повні шляху, а для підстановки команд рекомендується використовувати зворотний штрих.
Прийшов час автоматизувати всі наші дії. Для цього нам потрібні два скрипта. Один вивантажує модулі KVM, інший завантажує їх. Якщо підходити до справи ґрунтовно, то потрібні також скрипти для зупинки служб VirtualBox при запуску KVM і для їх подальшого запуску.
Приклад роботи з драйверами VirtualBox:
Таким чином, скрипт для активації VirtualBox і відключення KVM виглядає наступним чином:
І скрипт для запуску KVM і відключення VirtualBox:
Для машин AMD замініть kvm-intel.ko на kvm-amd.ko. Зверніть увагу, що непогано було б передбачити в скрипті перевірку спроби запуску вже запущеної служби. Я цього не став зробив, нехай це буде вашим домашнім завданням.
Крім усього іншого, необхідно також звернути увагу на архітектуру процесора. У більшості користувачів, що використовують архітектуру x86 (x86_64) скрипти будуть працювати, але для інших архітектур, наприклад SPARC, ARM, Itanium, скрипти необхідно буде редагувати.
Тепер створіть ярлики для скриптів на робочому столі і все готово. Використання uname замість певної версії ядра гарантує, що ваші скрипти будуть працювати навіть після поновлення ядра.
висновок
Як ви могли бачити, реальність не така сувора, як уявлялося раніше. У цьому посібнику показані прості способи змусити мирно співіснувати VirtualBox і KVM, без видалення однієї з програм і постійних перезавантажень. Архітектура Linux дозволяє завантажувати модулі на льоту, тому єдина процедура, для якої дійсно необхідне перезавантаження - це оновлення ядра системи. У следущих посібниках ми продовжимо знайомство з можливостями KVM.