Linux KVM
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: Enable KVM |
Device Drivers ---> [*] Virtualization ---> --- Virtualization <M> Kernel-based Virtual Machine (KVM) support <M> KVM for Intel processors support <M> KVM for AMD processors support |
Запуск первой виртуальной машины
Добавляю в /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 и пронаблюдать загрузку виртуальной машины.
Натройка сети на хост-системе и виртуальных машинах
Вцелом схема сети выглядит так:
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>
- Добавляем соответвующие интерфейсы и именуем их как нравится.
# equery uses sys-apps/usermode-utilities [ 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]
#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)
Ссылки
Есть некоторая доля вероятности, что какую-то из ссылок которой я воспользовался я забыл указать. Потому, если такое вдруг случиться - укажите мне на ошибку. Я исправлю.