Устанавливаем гипервизор lguest
Материал из Gentoo Linux Wiki
- Вернуться в раздел советов
Содержание |
[править] Введение
Начиная с версии 2.6.23 в ядре появился новый гипервизор lguest. В отличие от KVM он не требует поддержки аппаратной виртуализации (VT от Intel или SVM от AMD). Установка производилась на системе с ядром 2.6.24-gentoo-r3. Подход, который использует lguest, состоит в том, чтобы превратить ядро Linux в гипервизор простой загрузкой модуля ядра. Модуль ядра экспортирует устройство, называемое /dev/lguest, которое делает возможным гостевой режим ядра (вдобавок к обычным режимам ядра и пользователей). С dev/lguest VM имеет свое собственное адресное пространство, отдельное от адресного пространства ядра или любых других работающих VM. lguest просто превращает ядро Linux в гипервизор (когда вы инсталлируете модуль ядра lg). Так как гипервизор является стандартным ядром Linux, он получает преимущества от изменений в стандартном ядре (поддержка памяти, планировщик и т.д.). Оптимизация этих компонент Linux дает преимущества как гипервизору (базовая операционная система), так и гостевой операционной системе Linux. Но lguest – не первая машина, которая делает это. UML уже ранее трансформировал ядро Linux в гипервизор.
[править] Настройка ядра
Проверяем опции загруженного ядра $ zgrep <опция> /proc/config.gz
| Code: Проверяем следующие опции |
CONFIG_EXPERIMENTAL=y CONFIG_PARAVIRT=y CONFIG_LGUEST_GUEST=y CONFIG_HIGHMEM64G=n CONFIG_PHYSICAL_ALIGN=0x100000 CONFIG_TUN=m или y CONFIG_LGUEST=m или y CONFIG_VIRTIO_BLK=y CONFIG_VIRTIO_NET=y CONFIG_EXT2_FS=y если ФС образа диска VM - ext2 |
Если результат отличается то вам придется пересобрать ядро.
[править] Собираем "lguest"
| Code: Сборка lguest |
cd /usr/src/linux/Documentation/lguest/ make ln -s /usr/src/linux/Documentation/lguest/lguest /bin/lguest |
| Linux Kernel Configuration: |
General setup: Prompt for development and/or incomplete code/drivers = Y |
| Linux Kernel Configuration: |
Processor type and features:
Paravirtualized guest support = Y
Lguest guest support = Y
High Memory Support = off/4GB
Alignment value to which kernel should be aligned = 0x100000
|
| Linux Kernel Configuration: |
Device Drivers: Network device support Universal TUN/TAP device driver support = M/Y Virtualization Linux hypervisor example code = M/Y |
[править] Запуск/останов lguest
Создаем файлы запуска/останова виртуальной машины далее VM.
File: /bin/lgueststart #!/bin/bash modprobe lg modprobe tun iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward /bin/lguest 64m /boot/vmlinuz --tunnet=192.168.19.1 \ --block=/home/<user>/rootfile root /dev/vda rw
Пдгружаем модули lg (гипервизор) и tun. Далее настраиваем маскарадинг. У VM будет доступ по сети к хост машине но не во внешнюю сеть. Параметры запуска lguest:
64m - выделяем VM 64M памяти /boot/vmlinuz - для VM используем то же ядро, что и для хост машины --tunnet=192.168.19.1 адрес интерфейса tun на хост машине --block=/home/<user>/rootfile образ диска VM root=/dev/vda rw устройство /dev/vda для VM соответствует образу диска rootfile на хост машине.
| Файл: /bin/lgueststop |
#!/bin/bash killall lguest ifconfig tap0 down tunctl -d tap0 modprobe -r tun iptables -t nat -F POSTROUTING echo 0 > /proc/sys/net/ipv4/ip_forward modprobe -r ipt_MASQUERADE modprobe -r iptable_nat modprobe -r nf_nat modprobe -r lg |
Убиваем процесс lguest, гасим интерфейс tap и отключаем маскарадинг.
[править] Создаем образ диска VM
[править] Использование готового образа
По адресу [1] забираем образ диска и сохраняем его под именем /home/<user>/rootfile. Монтируем образ диска:
# mount /home/<user>/rootfile /mnt/vm -o loop
и создаем устройство:
# mknod /mnt/vm/dev/hvc0 c 229 0
Этому устройству будет соответствовать первый терминал VM. Можно поправить /mnt/vm/etc/fstab, сказав, что корневое устройство у нас теперь /dev/vda. После размонтирования:
# umount /mnt/vm
можем запускать VM:
# lgueststart
+-----+ +----------------+ +---------------+ | LAN |--|eth0 HOST tap0|--|eth0 VM lguest| +-----+ +----------------+ +---------------+
К сожалению в версии 2.6.24 есть баг: tap0 и eth0 VM lguest имеют одинаковый MAC адрес и без рестарта tap0 не увидят друг друга. Поэтому на HOST:
# ifconfig tap0 down # ifconfig tap0 hw ether 00:FF:91:46:D5:EB 192.168.19.1 up
MAC адрес можно взять любой главное он должен отличаиться от eth0 VM lguest. Теперь на VM можем поднять eth0
# ifconfig eth0 192.168.19.5
[править] Создаем Gentoo VM
Теперь создадим образ диска на базе stage3. Создаем файл образа размером 300M
dd if=/dev/zero of=rootfile bs=1M count=300
Создаем файловую систему (использовал reiserfs у вас будет ext2)
# mkreiserfs -f -s 600 /home/<user>/rootfile
монтируем ее:
# mount /home/<user>/rootfile /mnt/vm -o loop # cd /mnt/vm
и распаковываем stage3
# tar xvjpf /home/<user>/stage3-x86-2007.0.tar.bz2
создаем hvc0
# mknod /mnt/vm/dev/hvc0 c 229 0
Добавляем hvc0 в файл /mnt/vm/etc/securetty Как и ранее правим /mnt/vm/etc/fstab В файле /mnt/vm/etc/inittab секцию
# TERMINALS c1:12345:respawn:/sbin/agetty 38400 tty1 linux c2:2345:respawn:/sbin/agetty 38400 tty2 linux c3:2345:respawn:/sbin/agetty 38400 tty3 linux c4:2345:respawn:/sbin/agetty 38400 tty4 linux c5:2345:respawn:/sbin/agetty 38400 tty5 linux c6:2345:respawn:/sbin/agetty 38400 tty6 linux
меняем на:
# TERMINALS c1:12345:respawn:/sbin/agetty 38400 hvc0 linux #c2:2345:respawn:/sbin/agetty 38400 tty2 linux #c3:2345:respawn:/sbin/agetty 38400 tty3 linux #c4:2345:respawn:/sbin/agetty 38400 tty4 linux #c5:2345:respawn:/sbin/agetty 38400 tty5 linux #c6:2345:respawn:/sbin/agetty 38400 tty6 linux
правим /mnt/vm/etc/conf.d/net. Как и ранее статический адрес 192.168.19.5 В файл /mnt/vm/etc/udev/rules.d/70-persistent-net.rules добавляем строку:
SUBSYSTEM=="net", DRIVERS=="?*", NAME="eth0"
Иначе при каждом следующем старте VM номер eth будет увеличиваться поскольку каждый раз MAC адрес новый. Копируем модули нашего ядра из /lib/modules в /mnt/vm/lib/modules. Меняем конфигурационные файлы в соответствии с Руководством по установке Gentoo. Не забываем сделать chroot и поменять пароль. Размонтируем образ:
# umount /mnt/vm
[править] Запуск VM
Запуск VM производим как описано выше:
1. lgueststart 2. Рестартуем tap на хосте 3. Поднимаем eth0 на VM 4. На VM по комбинации <Ctrl-o> доступно следующее меню управления:
SysRq : HELP : loglevel0-8 reBoot tErm Full kIll saK showMem Nice powerOff showPc show-all-timers(Q) unRaw Sync showTasks Unmount shoW-blocked-taskshardware virtualization extensions - Intel's
Например при нажатии <Ctrl-o> <m> получаем
SysRq : Show Memory Mem-info: DMA per-cpu: CPU 0: Hot: hi: 0, btch: 1 usd: 0 Cold: hi: 0, btch: 1 usd: 0 Normal per-cpu: CPU 0: Hot: hi: 6, btch: 1 usd: 4 Cold: hi: 2, btch: 1 usd: 0 Active:1556 inactive:1284 dirty:0 writeback:0 unstable:0 free:11604 slab:738 mapped:396 pagetables:9 bounce:0 DMA free:12856kB min:252kB low:312kB high:376kB active:0kB inactive:0kB present:16256kB pages_scanned:0 all_unreclaimable? no lowmem_reserve[]: 0 47 47 CPU 0: Hot: hi: 0, btch: 1 usd: 0 Cold: hi: 0, btch: 1 usd: 0 Normal per-cpu: CPU 0: Hot: hi: 6, btch: 1 usd: 4 Cold: hi: 2, btch: 1 usd: 0 Active:1556 inactive:1284 dirty:0 writeback:0 unstable:0 free:11604 slab:738 mapped:396 pagetables:9 bounce:0 DMA free:12856kB min:252kB low:312kB high:376kB active:0kB inactive:0kB present:16256kB pages_scanned:0 all_unreclaimable? no lowmem_reserve[]: 0 47 47 Normal free:33560kB min:760kB low:948kB high:1140kB active:6224kB inactive:5136kB present:48768kB pages_scanned:0 all_unreclaimable? no lowmem_reserve[]: 0 0 0 DMA: 4*4kB 3*8kB 5*16kB 2*32kB 2*64kB 4*128kB 3*256kB 0*512kB 1*1024kB 1*2048kB 2*4096kB = 12856kB Normal: 10*4kB 38*8kB 44*16kB 8*32kB 2*64kB 1*128kB 3*256kB 3*512kB 1*1024kB 2*2048kB 6*4096kB = 33560kB Swap cache: add 0, delete 0, find 0/0, race 0+0 Free swap = 0kB Total swap = 0kB Free swap: 0kB 16384 pages of RAM 0 pages of HIGHMEM 1026 reserved pages 1131 pages shared 0 pages swap cached 0 pages dirty 0 pages writeback
[править] Примечание
| Примечание: При использовании tap VM из внешней сети не видна. Если нужен доступ к VM из внешней сети используем --tunnet bridge:<bridgename>. Подробно о том как настроить bridge читаем Альтернативная настройка с помощью Bridge |
[править] Достоинства и недостатки
+ Не требует накладывать патчи на ядро. + Использует ядро как гипервизор. + Не требует поддержки аппаратной виртуализации. + Компактный код 5000 строк.
- ОС для VM только Linux. - Не использует аппаратные средства виртуализации. - Нет динамического распеределения ресурсов для VM. - Нет поддержки кластеров. - В коде пока много багов.
[править] Ссылки по теме
Домашняя страница lguest Здесь можно задать вопрос автору lguest Kernel hacking hacking on lguest media1 Kernel hacking hacking on lguest media2 lguest64 - a new breed of puppies
