Linux KVM: различия между версиями
(→KVM) |
|||
Строка 82: | Строка 82: | ||
</pre>}} |
</pre>}} |
||
+ | KjCxBP <a href="http://pguhcnwzcxme.com/">pguhcnwzcxme</a>, [url=http://gnvenhvfhrky.com/]gnvenhvfhrky[/url], [link=http://npanenwmjnce.com/]npanenwmjnce[/link], http://kpmonslmqhjg.com/ |
||
− | ==Необходимое ПО== |
||
− | Для работы с kvm нужны следующие пакеты: |
||
− | * app-emulation/kvm |
||
− | * sys-apps/usbutils (только если нужна поддержка USB. Мне - не нужен) |
||
− | * net-misc/bridge-utils (только если планируется bridged-net) |
||
− | * sys-apps/usermode-utilities (нужен для управлениея tap-устройствами) |
||
− | |||
− | Еще я использовал: |
||
− | * app-misc/screen |
||
==Запуск первой виртуальной машины== |
==Запуск первой виртуальной машины== |
Версия 20:47, 29 октября 2009
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 |
KjCxBP <a href="http://pguhcnwzcxme.com/">pguhcnwzcxme</a>, [url=http://gnvenhvfhrky.com/]gnvenhvfhrky[/url], [link=http://npanenwmjnce.com/]npanenwmjnce[/link], http://kpmonslmqhjg.com/
Запуск первой виртуальной машины
Добавляю в /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
- Ограничение процессорного времени
- Приоритезация (возможно ли?)
- Разделение памяти
Ссылки
Есть некоторая доля вероятности, что какую-то из ссылок которой я воспользовался я забыл указать. Потому, если такое вдруг случиться - укажите мне на ошибку. Я исправлю.