Linux KVM: различия между версиями
Sirmax (обсуждение | вклад) (→Ссылки) |
Sirmax (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
| + | [[Категория:Linux]] |
||
| + | [[Категория:Virtual]] |
||
=KVM= |
=KVM= |
||
KVM - система виртуализации котороая включена в состав ядра linux начиная с 2.6.20. Вероятно, наиболее прогрессивная система, т.к. RedHat переключилась на нее с XEN. |
KVM - система виртуализации котороая включена в состав ядра linux начиная с 2.6.20. Вероятно, наиболее прогрессивная система, т.к. RedHat переключилась на нее с XEN. |
||
Версия 10:27, 24 июня 2010
KVM
KVM - система виртуализации котороая включена в состав ядра linux начиная с 2.6.20. Вероятно, наиболее прогрессивная система, т.к. RedHat переключилась на нее с XEN. Задача - запускать внутри виртуальных машин ОС отличную от хостовой (в моем случае - win32, FreeBSD, linux но другие версии ядра отличные от хостовых).
Сейчас использую VMWare, решил отказаться из-за следующих недостатков
- Неудобство управления (нужно держать под рукой vmware-console)
- Большие накладные расходы.
- VMWare не позволяет эмулировать более 2 процессоров (проверить!)
- Иногда - проблемы при обновлении ядра.
- Нет механизмов ограничения процессорного времени. (или я о них не знаю)
Hardware
KVM требует наличия x86-совместимого процессора с поддержкой одной из технологий аппаратной виртуализации — Intel VT либо AMD SVM. На данный момент KVM в состоянии запускать в качестве гостевых ОС GNU/Linux (32-битные и 64-битные), Windows (32-битные и 64-битные) и другие системы.
Для полноценной работы немодифицированных гостевых ОС потребуется процессор с поддержкой аппаратной виртуализации: Проверить наличие поддержки можно по наличию соответвующих флагов - комманда ниже должна дать непустой результат
В моем случае это
#cat /proc/cpuinfo processor : 0 vendor_id : AuthenticAMD cpu family : 15 model : 107 model name : AMD Athlon(tm) 64 X2 Dual Core Processor 4400+ stepping : 1 cpu MHz : 2310.439 cache size : 512 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch bogomips : 4620.87 TLB size : 1024 4K pages clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: ts fid vid ttp tm stc 100mhzsteps processor : 1 vendor_id : AuthenticAMD cpu family : 15 model : 107 model name : AMD Athlon(tm) 64 X2 Dual Core Processor 4400+ stepping : 1 cpu MHz : 2310.439 cache size : 512 KB physical id : 0 siblings : 2 core id : 1 cpu cores : 2 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch bogomips : 4621.05 TLB size : 1024 4K pages clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: ts fid vid ttp tm stc 100mhzsteps
Конфигурация ядра
Что бы включить поддержку KVM, следует включить следующие опции ядра (я использовал модули):
| Linux Kernel Configuration: Поддержка KVM |
Device Drivers --->
[*] Virtualization --->
--- Virtualization
<M> Kernel-based Virtual Machine (KVM) support
<M> KVM for Intel processors support
<M> KVM for AMD processors support
|
Необходимое ПО
Для работы с kvm нужны следующие пакеты:
- app-emulation/kvm
- sys-apps/usbutils (только если нужна поддержка USB. Мне - не нужен)
- net-misc/bridge-utils (только если планируется bridged-net)
- sys-apps/usermode-utilities (нужен для управлениея tap-устройствами)
Еще я использовал:
- app-misc/screen
Запуск первой виртуальной машины
Добавляю в /etc/modules.autoload.d/kernel-2.6:
kvm-amd tun
и загружаю модули (tun нужен для работы сети, на этапе запуска виртуальной машины и установки гостевой WinXP - не нужен)
Далее, создаю диск с именем test1 размером 10G
Что бы посмотретьинформацию о диске можно воспользоваться следующей коммандой
image: ./test1.img file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 1.4G cluster_size: 4096
Далее пробую установить WinXP с образа установочного диска:
Т.к. все эксперементы я провожу на удаленном сервере, где нет ничего связанного с Х, то получаю следующее сообщение
Could not initialize SDL - exiting
Очевидно, что kvm попробовал вывести на экран какую-то графику и у него это не получилось. Отмечу, что я не сразу нашел решение, наиболее простое и правильное - перенаправить вывод графики на vnc. Соответвенно, комманда приобретает вид
Теперь можно подключиться к серверу на порт 5910 по vnc и пронаблюдать загрузку виртуальной машины.
Далее, наблюдаю за установкой и жму "далее" через vnc.
Если ОС не использует графику совсем - то запускать с параметром -curses вместо -vnc. В этом случае вывод будет праямо на текущюю консоль, что в большенстве случаев достаточно удобно.
Натройка сети на хост-системе и виртуальных машинах
Вцелом схема сети выглядит так: (вторая гостевая система пока только в процессе подготовки)
HOST KVM Гостевая система 1 (WinXP)
+-----------------------+ +-----------------+
| 95.69.хх.xx | | |
INET---+---- eth0 | | |
| | | | KVM Гостевая система 2 (FreeBSD 7.2)
| +------+ +--+---+---- nic0 | +--------------+
| |kvm_tap0---------+ | |172.16.254.6 | | |
| | 172.16.254.5 | | | | |
| |kvm_tap0---------+ | +-----------------+ | |
| | 172.16.254.9 | | | |
| +------+ | | | |
| +--+-------------------------+---- nic0 |
| | |172.16.254.10 |
+-----------------------+ +--------------+
Конфигурация ядра для поддержки сети
Понадобиться поддержка в ядре TUN/TAP устройств и возможно VLAN (не уверен что это необходимо). Я в своей конфигурации предпочел использовать routed а не bridged соеднение, и поддержка birdge обязательной не является. Поддержка VLAN мне необходима в любом случае, выключить ее я не могу.
| Linux Kernel Configuration: Поддержка bridging, TUN и VLAN |
Device Drivers --->
[*] Network device support --->
<M> Universal TUN/TAP device driver support
Networking support --->
Networking options --->
<M> 802.1d Ethernet Bridging
<*> 802.1Q VLAN Support
|
Настройка сети в хост-системе
- Загружаем соответвующий модуль)
[433164.306111] tun: Universal TUN/TAP device driver, 1.6 [433164.306114] tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
- Добавляем соответвующие интерфейсы и именуем их как нравится.
[ Searching for packages matching sys-apps/usermode-utilities... ] [ Colour Code : set unset ] [ Legend : Left column (U) - USE flags from make.conf ] [ : Right column (I) - USE flags packages was installed with ] [ No USE flags found for sys-apps/usermode-utilities-20040406-r1]
В результате имеем 2 интерфейса в системе.
#ifconfig -a
kvm_tap0 Link encap:Ethernet HWaddr 1e:56:79:e2:41:eb
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
kvm_tap1 Link encap:Ethernet HWaddr 1e:56:79:e2:41:eb
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Настраиваем адреса на них:
Теперь нужно перезапустить виртуальную машину для того что бы включить в ней поддержку сети.
При запуске можно указать какая именно сетевая карта будет сэмулирована для гостевой ОС (по умолчанию - реалтек) и куда его подключить (в моем случае к kvm_tap0). Обязательно указать что никаких скриптов при старте выполнять не нужно (script=no,downscript=no)
Вторая виртуальная машина (FreeBSD 7.2)
Наcтроил dhcpd что бы не прописывать адрес руками
option domain-name "noname.com.ua";
option domain-name-servers 193.33.48.33, 193.33.49.160;
default-lease-time 36000;
max-lease-time 72000;
ddns-update-style none;
log-facility local7;
subnet 172.16.254.8 netmask 255.255.255.252 {
range 172.16.254.10 172.16.254.10;
option routers 172.16.254.9;
option domain-name "virtual.noname.com.ua";
option broadcast-address 172.16.254.9;
default-lease-time 60000;
max-lease-time 720000;
}
Запускаю на установку:
Windows 7 (тест)
Ну, есть и хорошая новость - она работает )
ToDo
- Ограничение процессорного времени
- Приоритезация (возможно ли?)
- Разделение памяти
Ссылки
Есть некоторая доля вероятности, что какую-то из ссылок которой я воспользовался я забыл указать. Потому, если такое вдруг случиться - укажите мне на ошибку. Я исправлю.