Страница 6 из 7

Re: QEMU

Добавлено: 24 дек 2012, 00:23
cema
Как в консольной QEMU задать размер диска на который производится установка?

Re: QEMU

Добавлено: 24 дек 2012, 00:59
Olej
cema писал(а):Как в консольной QEMU задать размер диска на который производится установка?
Как я помню, команда запуска VM выглядит примерно так (по крайней мере команда 1-го запуска, когда предполагается загрузить с CD образа .iso и установить на виртуальный диск):

Код: Выделить всё

$ qemu -hda <img.file> -cdrom ....iso -boot d 
(сама утилита может быть и не qemu: qemu-system-i386, qemu-kvm и т.д. в зависимости и от версии QEMU).

<img.file> - это должен быть сырой неразмеченный образ диска, на котором дальше будет делаться разбивка на разделы, форматирование и т.д. Могут быть самые разные форматы, с образами, форматами и их преобразованием работает утилита: qemu-img. Наберите команду, и в последних строках вывода вы увидите то великое множество форматов, которое поддерживает QEMU:

Код: Выделить всё

bash-4.2$ qemu-img --help
qemu-img version 1.0,1, Copyright (c) 2004-2008 Fabrice Bellard
...
Supported formats: vvfat vpc vmdk vdi sheepdog rbd raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd dmg tftp ftps ftp https http cow cloop bochs blkverify blkdebug
В простейшем случае "сырой" образ диска вы можете создать утилитой dd:

Код: Выделить всё

$ dd if=/dev/zero of=<img.file> bs=1024 count=1000000

Так вы получите 1Gb диск. Но здесь у вас образ будет занимать место его заказанного размера.

Большинство других форматов - сжатые: 10Gb образ диска может занимать несколько десятков Kb пока этот диск пустой, а по мере заполнения файл будет расти. Создать образ диска сжатого формата можете:
1. разобравшись с утилитой qemu-img (команда create);
2. создать в VirtualBox заготовку образа в формате .vdi, .vmdk и др., а потом её использовать в QEMU (они совместимы).
Кроме того, qemu-img умеет изменять размер образа диска (команда resize).

Re: QEMU

Добавлено: 24 дек 2012, 01:06
Olej
cema писал(а):Как в консольной QEMU задать размер диска на который производится установка?
Для QEMU, кстати, есть много GUI обёрток, они очень приличного качества, я опробывал не менее 4-х в разное время, по мере того, как вспомню, может, допишу сюда:
1. AQemu
2. Qemu Launcher
...

Re: QEMU

Добавлено: 24 дек 2012, 01:12
cema
понял, буду разбираться

Re: QEMU

Добавлено: 24 дек 2012, 12:27
cema
Что-то у меня не взлетает. Насоздавал образов дисков и VM, и с помощью qemu-img, при запуске выходит назад в терминал:

Код: Выделить всё

$ qemu -hda qvd.img -L ./ /home/dmitry/Загрузки/debian-wheezy-i386-efi-test4.iso
qemu: -L ./: drive with bus=0, unit=0 (index=0) exists

Re: QEMU

Добавлено: 24 дек 2012, 12:53
cema
cema писал(а):Что-то у меня не взлетает. Насоздавал образов дисков и VM, и с помощью qemu-img, при запуске выходит назад в терминал:

Код: Выделить всё

$ qemu -hda qvd.img -L ./ /home/dmitry/Загрузки/debian-wheezy-i386-efi-test4.iso
qemu: -L ./: drive with bus=0, unit=0 (index=0) exists
Кажется взлетел :-)
Просто записал образ на диск, вставил в CD-ROM и запустил все командой:

Код: Выделить всё

$ qemu -hda qvd.img -L ./ -cdrom /dev/cdrom

Re: QEMU

Добавлено: 18 ноя 2013, 15:11
Olej
cema писал(а): Кажется взлетел :-)
Просто записал образ на диск, вставил в CD-ROM и запустил все командой:

Код: Выделить всё

$ qemu -hda qvd.img -L ./ -cdrom /dev/cdrom
Один из самых хлопотных моментов при запуске, установке, испытании и т.д. нового дистрибутива (Linux и не только) под QEMU - это раскрутка сети для VM (многие дистрибутивы потребуют сеть ещё на этапе инсталляции-запуска для доступа к репозитариям).
И нужно решать это в 2-х аспектах:
1. организовать связь VM с хост-машиной (без этого следующий пункт не решить);
2. организовать транзит трафика из VM сквозь хост-машину на дефаултный шлюз LAN и далее в интернет;

п.1. решается управлением таблицы маршрутизации (добавлением дефаултного маршрута на хост, route add ...).

п.2. имеет 2 варианта решения:

- Использованием TAP интерфейса для VM + NAT фильтрацией из TAP подсети в реальную LAN;

- Организацией бриджа (моста) на хосте для связи с LAN (взамен реального интерфейса eth0) + утилитой brctl добавить к этому бриджу а). реальный интерфейс в LAN (eth0) и TAP интерфейс к VM. Этот способ может потребовать дополнительно установить пакет bridge-utils:

Код: Выделить всё

olej@notebook:~$ apt-file find brctl
bash-completion: /usr/share/bash-completion/completions/brctl
bridge-utils: /sbin/brctl
bridge-utils: /usr/share/man/man8/brctl.8.gz
selinux-policy-default: /usr/share/selinux/default/brctl.pp
selinux-policy-dev: /usr/share/selinux/default/include/admin/brctl.if
selinux-policy-dev: /usr/share/selinux/mls/include/admin/brctl.if
selinux-policy-doc: /usr/share/doc/selinux-policy-doc/html/admin_brctl.html
selinux-policy-mls: /usr/share/selinux/mls/brctl.pp
zsh: /usr/share/zsh/functions/Completion/Linux/_brctl
zsh-beta: /usr/share/zsh-beta/functions/Completion/Linux/_brctl

Re: QEMU

Добавлено: 18 ноя 2013, 15:29
Olej
Olej писал(а): - Использованием TAP интерфейса для VM + NAT фильтрацией из TAP подсети в реальную LAN;
Например:

Есть LAN: 192.168.1.0/24, дефаултный шлюз 192.168.1.1, хост 192.168.1.20, на нём работает кэширующий DNS, DNS работает ещё на маршрутизаторе в WAN (ADSL 192.168.1.1) и резервный DNS Google 8.8.8.8

Требуется: запустить VM в QEMU с локальной виртуальной сетью 10.0.200.0/8 (любой, отличной от 192.168.1.0/24: 10.*, 172.*, 192.168.*) + настроить выход из сети VM в WAN.

1. запускать QEMU будем с созданием (автоматическим) интерфейса TAP...

2. для этого создаём скрипты запуска и останова TAP интерфейса (и устанавливаем этим файлам флаг исполнимости x):

Код: Выделить всё

olej@notebook:~/2013_WORK/HISTORY/11.2013/15$ cat /etc/qemu-ifup
#!/bin/sh
echo '---------------- IFUP -------------------'
/sbin/ifconfig $1 10.0.200.1
iptables -t nat -A POSTROUTING -s 10.0.200.0/24 -j MASQUERADE

Код: Выделить всё

olej@notebook:~/2013_WORK/HISTORY/11.2013/15$ cat /etc/qemu-ifdown
#!/bin/sh
echo '--------------- IFDOWN ------------------'
/sbin/ifconfig $1 down
iptables -t nat -D POSTROUTING -s 10.0.200.0/24 -j MASQUERADE


3. Проверяем (на всякий случай) включенность IP4 форвардинга на хосте ... и включаем его:

Код: Выделить всё

olej@notebook:~/2013_WORK/HISTORY/11.2013/15$ /sbin/sysctl -a | grep forward
...
Подправляем (на 1) 2 строки /etc/sysctl.conf:

Код: Выделить всё

olej@notebook:~/2013_WORK/HISTORY/11.2013/15$ cat /etc/sysctl.conf | grep forward
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
# Uncomment the next line to enable packet forwarding for IPv6
net.ipv6.conf.all.forwarding=1
Приводим их в действие (при следующих перезагрузках это будет происходить автоматом, если не правим /etc/sysctl.conf):

Код: Выделить всё

olej@notebook:~/2013_WORK/HISTORY/11.2013/15$ sudo /sbin/sysctl -p 
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
4. Теперь всё готово для запуска QEMU (обязательно с правами root) с поднятием TAP интерфейса и установкой NAT-фильтрации (всё в одном флаконе ;-) ):

Код: Выделить всё

olej@notebook:~/Загрузки/ISO-Linux/Puppy$ sudo qemu -m 800M -hda /dev/sdb1 -cdrom precise-5.7.1-ru.iso -boot c -enable-kvm -net nic,vlan=0 -net tap,vlan=0 -localtime
---------------- IFUP -------------------
...

После такого старта должно быть (проверяем!!!):
- интерфейс tap0 поднят и ему присвоен IP:

Код: Выделить всё

root@notebook:/media# ip addr show dev tap0
15: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether 7a:97:a9:1c:18:db brd ff:ff:ff:ff:ff:ff
    inet 10.0.200.1/8 brd 10.255.255.255 scope global tap0
    inet6 fe80::7897:a9ff:fe1c:18db/64 scope link 
       valid_lft forever preferred_lft forever
- правило NAT-фильтра установлено:

Код: Выделить всё

root@notebook:/media# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  10.0.200.0/24        anywhere           
Всё!
Настройка и запуск со стороны хоста QEMU сделана.
Остаётся настройка встречной стороны на запущенной VM.

Re: QEMU

Добавлено: 18 ноя 2013, 15:44
Olej
Olej писал(а):Настройка и запуск со стороны хоста QEMU сделана.
Остаётся настройка встречной стороны на запущенной VM.
slacko02.png
5. Установить IP VM из той же подсети, что и tap0 хоста:

Код: Выделить всё

# ifconfig eth0 10.0.200.15 up
P.S. После этого маршрут 10.0.200.0/8 должен автоматически добавиться к таблице роутинга, если нет - добавьте вручную (по аналогии с п.6).

6. Установить маршрут по умолчанию на хост:

Код: Выделить всё

# route add -net default gw 10.0.200.1 
7. Добавить DNS-сервера для VM, например, прописав /etc/resolv.conf (если запрещён DHCP который будет файл портить при рестартах):

Код: Выделить всё

# cat /etc/resolv.conf
nameserver 10.0.200.1
nameserver 192.168.1.1
nameserver 8.8.8.8
Наслаждайтесь ;-)

Re: QEMU

Добавлено: 18 ноя 2013, 15:53
Olej
Olej писал(а):Наслаждайтесь ;-)
8. Контролировать всё ли правильно происходит, так как предполагали, и не напартачили ли с командами ;-) - можете на хосте командой по типу:

Код: Выделить всё

olej@notebook:~$ sudo /usr/sbin/tcpdump -n -i any ip proto \\icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
...
20:43:40.481733 IP 10.0.200.15 > 192.168.1.1: ICMP echo request, id 55878, seq 0, length 64
20:43:40.481798 IP 192.168.1.20 > 192.168.1.1: ICMP echo request, id 55878, seq 0, length 64
20:43:40.482726 IP 192.168.1.1 > 192.168.1.20: ICMP echo reply, id 55878, seq 0, length 64
20:43:40.487412 IP 192.168.1.1 > 10.0.200.15: ICMP echo reply, id 55878, seq 0, length 64
20:43:41.500391 IP 10.0.200.15 > 192.168.1.1: ICMP echo request, id 55878, seq 1, length 64
20:43:41.500432 IP 192.168.1.20 > 192.168.1.1: ICMP echo request, id 55878, seq 1, length 64
20:43:41.501260 IP 192.168.1.1 > 192.168.1.20: ICMP echo reply, id 55878, seq 1, length 64
20:43:41.501272 IP 192.168.1.1 > 10.0.200.15: ICMP echo reply, id 55878, seq 1, length 64
20:43:42.501750 IP 10.0.200.15 > 192.168.1.1: ICMP echo request, id 55878, seq 2, length 64
20:43:42.501793 IP 192.168.1.20 > 192.168.1.1: ICMP echo request, id 55878, seq 2, length 64
20:43:42.502618 IP 192.168.1.1 > 192.168.1.20: ICMP echo reply, id 55878, seq 2, length 64
20:43:42.502636 IP 192.168.1.1 > 10.0.200.15: ICMP echo reply, id 55878, seq 2, length 64
...
Этого достаточно для полного контроля происходящего.