Часто по долгу службы приходится запускать в виртуальной машине различные ОС. В процессе посика решения перечитал множество документации по теме. Следует заметить, что информации — море. Виртуализация нынче «в моде». Тем не менее, не нашел ни в одной статье краткого описания готового решения, которое бы просто работало. Попытаюсь восполнить пробел. На ваш суд статья о том, как быстро и без лишних телодвижений запустить виртуальную машину в linux при помощи kvm.
Итак приступим.
Для debian-based дистрибутивов:
Для redhat-based дистрибутивов:
Допустим, у нас в системе один физический интерфейс, eth0, с IP 192.168.1.200.
Если вам безразлична работа сети в виртуальной машине, этот шаг можно пропустить. Бридж-интерфейс br0 послужит нам мостом между физическим интерфейсом системы eth0 и логическим tap-интерфейсом (пока еще не созданным) виртуальной машины.
Этой командой мы создаем виртуальный диск MyVirtualDrive.img. Как вы, наверное, успели заметить, последний параметр определяет максимальный размер виртуального диска. На момент создания файл будет занимать чуть больше 100k. Его размер будет расти по мере появления данных в файловой системе виртуальной машины.
Предварительно вставив установочный диск в CD-ROM, исполняем вышеприведенные команды (следует заменить MyUsername на реальное имя пользователя в системе). Первые три создадут логический tap-интерфейс и добавят его в мост br0. Последняя команда — собственно старт виртуальной машины.
Нетрудно заметить, что основные «танцы с бубном» — обеспечение работы сети. Если сеть виртуальной машине не нужна, вся конфигурация сводится к
В последней команде вместо /dev/cdrom можно указать путь к образу диска.
В последней команде параметр -m определяет, сколько памяти будет у виртуальной машины.
В последней команде параметр macaddr определяет MAC адрес сетевого интерфейса виртуальной машины. Нужно проследить, чтобы он был уникален для вашей сети.
Создание интерфейса br0 можно прописать в автозагрузку. Например, для debian и ubuntu нужно вписать в /etc/network/interfaces следующее:
Итак приступим.
Устанавливаем софт (kvm и bridge-utils)
Для debian-based дистрибутивов:
$sudo apt-get install kvm bridge-utlis
Для redhat-based дистрибутивов:
$sudo yum install kvm bridge-utils
Конфигурируем виртуальный бридж-интерфейс
Допустим, у нас в системе один физический интерфейс, eth0, с IP 192.168.1.200.
$sudo ifconfig eth0 0.0.0.0
$sudo brctl addbr br0
$sudo brctl addif br0 eth0
$sudo ifconfig br0 192.168.1.200/24
Если вам безразлична работа сети в виртуальной машине, этот шаг можно пропустить. Бридж-интерфейс br0 послужит нам мостом между физическим интерфейсом системы eth0 и логическим tap-интерфейсом (пока еще не созданным) виртуальной машины.
Создаем файл с виртуальным диском
$sudo kvm-img create MyVirtualDrive.img -f qcow2 30G
Этой командой мы создаем виртуальный диск MyVirtualDrive.img. Как вы, наверное, успели заметить, последний параметр определяет максимальный размер виртуального диска. На момент создания файл будет занимать чуть больше 100k. Его размер будет расти по мере появления данных в файловой системе виртуальной машины.
Стартуем виртуальную машину
$sudo tunctl -b -u MyUsername -t qtap0
$sudo ifconfig qtap0 up 0.0.0.0 promisc
$sudo brctl br0 qtap0
$sudo kvm -cdrom /dev/cdrom -m 512 -hda MyVirtualDrive.img -net nic,macaddr=00:07:e9:0f:84:f0 -net tap,ifname=qtap0,macaddr=00:07:e9:0f:84:f0
Предварительно вставив установочный диск в CD-ROM, исполняем вышеприведенные команды (следует заменить MyUsername на реальное имя пользователя в системе). Первые три создадут логический tap-интерфейс и добавят его в мост br0. Последняя команда — собственно старт виртуальной машины.
Несколько замечаний напоследок
Нетрудно заметить, что основные «танцы с бубном» — обеспечение работы сети. Если сеть виртуальной машине не нужна, вся конфигурация сводится к
$sudo kvm-img create MyVirtualDrive.img -f qcow2 30G
$sudo kvm -cdrom /dev/cdrom -m 512 -hda MyVirtualDrive.img
В последней команде вместо /dev/cdrom можно указать путь к образу диска.
В последней команде параметр -m определяет, сколько памяти будет у виртуальной машины.
В последней команде параметр macaddr определяет MAC адрес сетевого интерфейса виртуальной машины. Нужно проследить, чтобы он был уникален для вашей сети.
Создание интерфейса br0 можно прописать в автозагрузку. Например, для debian и ubuntu нужно вписать в /etc/network/interfaces следующее:
auto br0
auto eth0
iface eth0 inet manual
iface br0 inet static
address 192.168.1.200
netmask 255.255.255.0
gateway 192.168.1.1
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off