Linux KVM: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 125: Строка 125:
 
==Натройка сети на хост-системе и виртуальных машинах==
 
==Натройка сети на хост-системе и виртуальных машинах==
 
<pre> HOST KVM Гостевая система 1 (WinXP)
 
<pre> HOST KVM Гостевая система 1 (WinXP)
+------------------+ +-----------------+
+
+-----------------------+ +-----------------+
| 95.69.хх.xx | | |
+
| 95.69.хх.xx | | |
LAN ---+---- eth0 | | |
+
LAN ---+---- eth0 | | |
| | | | KVM Гостевая система 2 (FreeBSD 7.2)
+
| | | | KVM Гостевая система 2 (FreeBSD 7.2)
| +------+ +--+---+---- nic0 | +--------------+
+
| +------+ +--+---+---- nic0 | +--------------+
| |kvm_tap0----+ | |192.168.100.1 | | |
+
| |kvm_tap0---------+ | |172.16.254.5 | | |
| |kvm_tap0----+ | +-----------------+ | |
+
| | 172.16.254.5 |
| +------+ | | | |
+
| |kvm_tap0---------+ | +-----------------+ | |
| +--+-------------------------+---- nic0 |
+
| +------+ | | | |
| | |192.168.100.2 |
+
| +--+-------------------------+---- nic0 |
+------------------+ +--------------+</pre>
+
| | |192.168.100.2 |
  +
+-----------------------+ +--------------+</pre>
   
 
==Ссылки==
 
==Ссылки==

Версия 12:47, 15 мая 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 | egrep flags.*'svm|vmx'

В моем случае это

#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

kvm-img create -f qcow2 test1.img 10G
Note: "qcow2": KVM image format, the most versatile format. Use it to have smaller images (useful if your filesystem does not supports holes, for example on Windows), optional AES encryption, zlib based compression and support of multiple VM snapshots.

Что бы посмотретьинформацию о диске можно воспользоваться следующей коммандой

# kvm-img info ./test1.img

image: ./test1.img file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 1.4G cluster_size: 4096

Далее пробую установить WinXP с образа установочного диска:

kvm -hda /var/virt/test1.img -cdrom /var/virt/XP_BOOTCD.iso -boot d

Т.к. все эксперементы я провожу на удаленном сервере, где нет ничего связанного с Х, то получаю следующее сообщение

Could not initialize SDL - exiting

Очевидно, что kvm попробовал вывести на экран какую-то графику и у него это не получилось. Отмечу, что я не сразу нашел решение, наиболее простое и правильное - перенаправить вывод графики на vnc. Соответвенно, комманда приобретает вид

kvm -hda /var/virt/test1.img -cdrom /var/virt/XP_BOOTCD.iso -boot d -vnc :10
# netstat -ntpl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:5910 0.0.0.0:* LISTEN 18328/kvm
Note: Здесь :10 - номер порта, :1 заставило бы kvm слушать соединения vnc на порту 5901

Теперь можно подключиться к серверу на порт 5910 по vnc и пронаблюдать загрузку виртуальной машины.

Note: При переключении разрешения внутри виртуальной машины на этапе загрузки у меня отваливался vnc из пакета net-misc/vnc. Лучше работает net-misc/tightvnc но и с ним работа с виртуальной машиной - мучение. Решение проблемы я не искал т.к. использовал vnc только до того момента как настроил сеть

Натройка сети на хост-системе и виртуальных машинах

              HOST            KVM Гостевая система 1 (WinXP)
        +-----------------------+   +-----------------+
        | 95.69.хх.xx           |   |                 |
 LAN ---+---- eth0              |   |                 |
        |                       |   |                 |    KVM Гостевая система 2 (FreeBSD 7.2)
        |  +------+          +--+---+---- nic0        |   +--------------+
        |  |kvm_tap0---------+  |   |172.16.254.5     |   |              |
        |  | 172.16.254.5       |
        |  |kvm_tap0---------+       |   +-----------------+   |              |
        |  +------+          |  |                         |              |
        |                    +--+-------------------------+---- nic0     |
        |                       |                         |192.168.100.2 |
        +-----------------------+                         +--------------+

Ссылки

Есть некоторая доля вероятности, что какую-то из ссылок которой я воспользовался я забыл указать. Потому, если такое вдруг случиться - укажите мне на ошибку. Я исправлю.