LINUX.ORG.RU
ФорумAdmin

Пара вопросов о QEMU перед началом работы

 


1

1

Первое знакомство с QEMU было в бородатые нулевые, когда запуск на одноядерном пентиуме приводил к невероятным тормозам. С тех пор как-то скептически относился к виртуализации, но теперь (уже 10 лет как, хех) добавили VT-d в консьюмерские процессоры и стало возможным работать с виртуализацией на аппаратном уровне.

Я впечатлён! Одна опция -snapshot чего стоит! Система работает в штатном режиме, но на самом деле находится в read-only, и никакие вообще изменения не сохраняются! Это же чудо! Это делает систему «unhackable». Теперь только успевай делать снапшоты данных, а в системе исправлять дыры и перезапускать пофикшенные виртуалки. Но знакомство с QEMU только началось и есть ряд вопросов.

1) MBR или GPT? UEFI или классический BIOS? Из коробки QEMU не умеет загружаться в UEFI, нужно отдельно скачивать OVMF прошивку. Стоит ли оно того? С одной стороны классический BIOS пережиток прошлого, вендоры вообще обещают зарезать legacy-режим в материнских платах к 2021 году, так что, чтобы в будущем образы систем стали легко переносимы, следует ли сразу ориентироваться на загрузку в UEFI? И забыть про lilo/syslinux?

2) Началась виртуализация головного мозга, так вот, возможно ли запустить qemu так, чтобы она напрямую общалась с устройством, а конкретно — сетевой картой? Хочу чтобы хост-система оставалась без IP-адреса, физический сетевой интерфейс был разве что в режиме UP, но при этом получение IP-адреса по маку осуществлялось прямиком на запущенную виртуалку, которая в дальнешем будет корневым шлюзом в сети. Возможно ли так пробросить сетевую карту в qemu?

И да, с разморозкой меня.

★★★★★

стало возможным работать с виртуализацией на аппаратном уровне.

То есть виртуалка с qemu работает без потерь производительности по сравнению с хостом?

Deleted ()

1. Смысла мало в UEFI. Но, вроде, с ним можно через qemu задавать загрузочные записи, и отображать внутрь папки с ядрами и прочим.

2. Всё как с видео и USB. Хочешь - эмулируй, хочешь - паравиртуализируй, или пробрасывай целиком. Тут ещё недавно задевалась тема энтерпрайзной виртуализации с расшариванием, но нужна поддержка в железе и драйверах.

boowai ★★★ ()
Ответ на: комментарий от Deleted

Вообще, да. Если не эмулировать или паравиртуализировать. Сначала добавили виртуализацию памяти и CPU, потом ввода-вывода. Но второе само по себе в виртуализации для проброса устройства целиком используется, разве что. Для расшаривания ещё отдельные стандарты, но железо не десктопное.

boowai ★★★ ()

MBR или GPT?

Так же как и на реальном железе. По вкусу/необходимости.

UEFI или классический BIOS?..... чтобы в будущем образы систем стали легко переносимы

Эм вы в будущем собираетесь переносить образ виртуалки на реальное железо? Таще-то сейчас обратная тенденция, с реального железа в виртуалки переносят.

возможно ли запустить qemu так, чтобы она напрямую общалась с устройством, а конкретно — сетевой картой?

В целом можно, но вот вопрос зачем? Понятно когда пробрасывают видяху или usb устройство. Продолжаем...

Хочу чтобы хост-система оставалась без IP-адреса, физический сетевой интерфейс был разве что в режиме UP, но при этом получение IP-адреса по маку осуществлялось прямиком на запущенную виртуалку, которая в дальнешем будет корневым шлюзом в сети.

Поднимите бридж.
Только есть нюанс, вы с хостом через физическую-консоль/ilo/etc собираетесь работать?

anc ★★★★★ ()
Ответ на: комментарий от anc

Поднимите бридж.

Вот смотрите, я втыкаю кабель провайдера в ПК, провайдер через IPoE авторизует меня в сети и по мак-адресу сетевой карточки сразу выдаёт мне IP'шник. Мой ПК доступен в интернетах по этому IP.

Теперь хочу, чтобы вместо физического ПК это стала виртуальная машина. Просто задам сетевой карте на виртуальной машине тот-же мак-адрес, что и на физической.

Нужно для этого пробрасывать физическую сетевую карту в виртуалку или это действительно делается более упрощённым бриджем? Такая вот хотелка, но пока ещё не пытался ничего делать, занимаюсь немного другим.

Получится так, как будто бы виртуалка находится внутри танка, и хост-система недоступна из вне. =)

Spoofing ★★★★★ ()
Ответ на: комментарий от anonymous

ппц, я не кручусь в айти, но живу дом-работа/работа-дом и могу себе позволить всё свободное время посвящать айти и чтению подобных этому ресурсов. но даже не смотря на это — я вообще не в теме! вы говорите такие слова, о которых я впервые слышу. не то, чтобы их там пощупать где-то можно было, я их попросту гуглю впервые...

и вот как с таким разнообразием технологий новичку вкатываться в айти? я не про себя, хотя я себя даже на уровне юзера считаю.

как быть в курсе всех этих технологий, и главное, как быть в «тренде»? как вы умудряетесь это делать =(

вот откуда мне было знать что бридж уже не модно, а какой-то там openvswitch есть. брр.

Spoofing ★★★★★ ()
Ответ на: комментарий от Spoofing

Все не могут быть в курсе всего. Может и не нужно «вкатываться в айти» по бразильской системе.. Лучше формализовывать перед собой, оценивать и решать конкретные задачи. А не пытаться заранее оптимизировать те вещи, которые не факт, что будут неоптимальными. Возможно, проще было бы задать вопрос о том, что вам нужно получить в результате (сценарии использования)...

allter149 ()

1) MBR или GPT? UEFI или классический BIOS?

У MBR в виртуалках есть одно большое преимущество, несущественное на физической системе: легко увеличить размер диска. Дописываешь в конец нули, или за тебя это может сделать qemu-img resize. Потом грузишь гостевую ОС, делаешь там fdisk на предмет удаления и пересоздания последнего раздела, reboot и resize2fs, и все. С GPT это не прокатывает, поскольку часть информации находится в хвосте диска, и fdisk обламывается при записи новой таблицы разделов.

У UEFI в виртуальных машинах до недавнего времени преимуществ не было. Сейчас появилось одно, а именно графический адаптер «bochs-display», который не поддерживает VGA-совместимый текстовый режим и поэтому в системах с обычным BIOS работает с рядом ограничений. Профит от нового адаптера - уменьшение размера кода, который может быть потенциально взломан из гостевой ОС.

2) Пробросить сетевку в виртуалку

В твоем случае рекомендуемым решением будет macvtap. Меняешь mac сетевки на произвольный левый, поднимаешь без IP-адреса, запускаешь qemu с правильным MAC-адресом с типом интерфейса macvtap.

AEP ★★★★★ ()
Ответ на: комментарий от AEP

fdisk обламывается при записи новой таблицы разделов

sfdisk работает, но все равно, сложно и некрасиво.

sfdisk --dump /dev/vda > vda.dump
sed -e '/^last-lba:/d' -e '$s/size=[^,]*,//' vda.dump > vda-fixed.dump
sfdisk --no-reread --no-tell-kernel -f --wipe never /dev/vda < vda-fixed.dump

Ну и потом как обычно reboot и resize2fs.

AEP ★★★★★ ()

Самое простое - читать гайды.
Мне на Win10 (hyper-v всё vt-x/vt-d зохавал, поэтому только эмуляция) не очень понравилась, особенно с обрезанным GUI, жабо-вариант которого наковырял на просторах гугла, да и тот уже окаменел.

Deleted ()

Грузи ядро напрямую, qemu это умеет. Но вообще все используют SeaBIOS в проде, наверное это показатель.

Да, можно. У меня на рабочем компе всё ходит через роутер, который вертится на самом же компе.

Deleted ()

Мне вот документации к этой штуке прям мало, например тот факт что проброшенные клавиатура и мышь релизятся по двойному контролу нашел в исходниках, но не в доках, при этом это захардкожено и тем у кого контрол один (на одной из моих клав так, например) остается разве что пересобирать qemu.

Dred ★★★★★ ()

возможно ли запустить qemu так, чтобы она напрямую общалась с устройством, а конкретно — сетевой картой

ну я вот с помощью VT-D/IOMMU пробрасываю видеокарту, хост ее по сути использовать не может, а гость работает как с реальной. Так можно делать с любым PCI устройством, но не уверен насчет сетевухи, если она встроена

Dred ★★★★★ ()
Ответ на: комментарий от anonymous

Докер зло. Его нахваливают погромисты неспособные написать софт которому не нужно воспроизводить точное положение звёзд и фаз луны для того, чтобы он не падал.

mogwai ★★★★ ()
Ответ на: комментарий от mogwai

Докер зло. Его нахваливают погромисты неспособные написать софт которому не нужно воспроизводить ...

docker сильно помогает при разработке софта под другую архитектуру и у разработчика есть желание не превращать свою систему в помойку или подстраиваться под требования каждого вендора

imb ★★ ()
Ответ на: комментарий от imb

не превращать свою систему в помойку

# prt-get depinst --test docker
*** prt-get: test mode

-- Packages installed
go
libseccomp
cgroupfs-mount
zstd
btrfs-progs
containerd
runc
docker

-- installed packages with README files:
docker

prt-get: installed successfully

*** prt-get: test mode end

не превращать свою систему в помойку

кек

Spoofing ★★★★★ ()
Ответ на: комментарий от imb

у разработчика есть желание не превращать свою систему в помойку

CentOS 7

# yum install lxc
…
Installing:
 lxc                     x86_64          1.0.11-1.el7          epel          140 k
Installing for dependencies:
 lua-alt-getopt          noarch          0.7.0-4.el7           epel          7.4 k
 lua-filesystem          x86_64          1.6.2-2.el7           epel           28 k
 lua-lxc                 x86_64          1.0.11-1.el7          epel           17 k
 lxc-libs                x86_64          1.0.11-1.el7          epel          275 k
…
Total download size: 467 k
Installed size: 1.0 M
# yum install docker
…
Installing:
 docker                                  x86_64  2:1.13.1-88.git07f3374.el7.centos    extras    17 M
Installing for dependencies:
 PyYAML                                  x86_64  3.10-11.el7                          base     153 k
 atomic-registries                       x86_64  1:1.22.1-26.gitb507039.el7.centos    extras    35 k
 audit-libs-python                       x86_64  2.8.4-4.el7                          base      76 k
 checkpolicy                             x86_64  2.5-8.el7                            base     295 k
 container-selinux                       noarch  2:2.74-1.el7                         extras    38 k
 container-storage-setup                 noarch  0.11.0-2.git5eaf76c.el7              extras    35 k
 containers-common                       x86_64  1:0.1.31-7.gitb0b750d.el7.centos     extras    18 k
 device-mapper-event                     x86_64  7:1.02.149-10.el7_6.2                updates  188 k
 device-mapper-event-libs                x86_64  7:1.02.149-10.el7_6.2                updates  187 k
 device-mapper-persistent-data           x86_64  0.7.3-3.el7                          base     405 k
 docker-client                           x86_64  2:1.13.1-88.git07f3374.el7.centos    extras   3.8 M
 docker-common                           x86_64  2:1.13.1-88.git07f3374.el7.centos    extras    95 k
 libcgroup                               x86_64  0.41-20.el7                          base      66 k
 libsemanage-python                      x86_64  2.5-14.el7                           base     113 k
 libyaml                                 x86_64  0.1.4-11.el7_0                       base      55 k
 lvm2                                    x86_64  7:2.02.180-10.el7_6.2                updates  1.3 M
 lvm2-libs                               x86_64  7:2.02.180-10.el7_6.2                updates  1.1 M
 oci-register-machine                    x86_64  1:0-6.git2b44233.el7                 extras   1.1 M
 oci-systemd-hook                        x86_64  1:0.1.18-2.git3efe246.el7            extras    34 k
 oci-umount                              x86_64  2:2.3.4-2.git87f9237.el7             extras    32 k
 policycoreutils-python                  x86_64  2.5-29.el7                           base     456 k
 python-IPy                              noarch  0.75-6.el7                           base      32 k
 python-backports                        x86_64  1.0-8.el7                            base     5.8 k
 python-backports-ssl_match_hostname     noarch  3.5.0.1-1.el7                        base      13 k
 python-ipaddress                        noarch  1.0.16-2.el7                         base      34 k
 python-pytoml                           noarch  0.1.14-1.git7dea353.el7              extras    18 k
 python-setuptools                       noarch  0.9.8-7.el7                          base     397 k
 setools-libs                            x86_64  3.3.8-4.el7                          base     620 k
 subscription-manager-rhsm-certificates  x86_64  1.21.10-3.el7.centos                 updates  207 k
 yajl                                    x86_64  2.0.4-4.el7                          base      39 k
Updating for dependencies:
 device-mapper                           x86_64  7:1.02.149-10.el7_6.2                updates  292 k
 device-mapper-libs                      x86_64  7:1.02.149-10.el7_6.2                updates  320 k

…
Total download size: 29 M
Fedora 29
# dnf install docker
…
Installing:
 docker                                     x86_64     2:1.13.1-62.git9cb56fd.fc29           fedora       24 M
Installing dependencies:
 container-selinux                          noarch     2:2.77-1.git2c57a17.fc29              updates      45 k
 containers-common                          x86_64     1:0.1.34-1.dev.gite96a9b0.fc29        updates      31 k
 subscription-manager-rhsm-certificates     x86_64     1.24.2-1.fc29                         updates      48 k
 atomic-registries                          x86_64     1.22.1-27.gitb507039.fc29             fedora       38 k
 container-storage-setup                    noarch     0.11.0-4.dev.git413b408.fc29          fedora       39 k
 docker-common                              x86_64     2:1.13.1-62.git9cb56fd.fc29           fedora       44 k
 docker-rhel-push-plugin                    x86_64     2:1.13.1-62.git9cb56fd.fc29           fedora      2.0 M
 gnupg                                      x86_64     1.4.23-2.fc29                         fedora      1.3 M
 libnet                                     x86_64     1.1.6-16.fc29                         fedora       62 k
 libusb                                     x86_64     1:0.1.5-13.fc29                       fedora       33 k
 oci-umount                                 x86_64     2:2.3.4-2.git87f9237.fc29             fedora       37 k
 protobuf-c                                 x86_64     1.3.0-5.fc29                          fedora       33 k
 python3-pytoml                             noarch     0.1.18-1.fc29                         fedora       24 k
 python3-pyyaml                             x86_64     4.2-0.1.b4.fc29                       fedora      188 k
Installing weak dependencies:
 criu                                       x86_64     3.11-1.fc29                           updates     487 k
 oci-systemd-hook                           x86_64     1:0.1.17-3.gitbd86a79.fc29            fedora       38 k
…
Total download size: 28 M
Installed size: 92 M
# dnf install lxc
…
Installing:
 lxc                      x86_64                 3.0.3-1.fc29                    updates                 293 k
Installing dependencies:
 lxc-libs                 x86_64                 3.0.3-1.fc29                    updates                 440 k
…
Total download size: 734 k
Installed size: 2.2 M

docker сильно помогает при разработке софта под другую архитектуру и у разработчика есть желание не подстраиваться под требования каждого вендора

Чем kvm для этого плох?

И да, ты путаешь. Докер не для «разрабатывать», докер для «деплоить». Чтобы погромисту не пришлось думать, как написать так, чтобы оно не сломалось, мы заставим заказчика тащить к себе копию системы погромиста, в которой софтина хоть как-то работает. И не дай Патрик, пользователь что-то в этой системе поменяет — если оно упадёт, мы с умным видом будем разглагольствовать об изоляции, мол «юзай наш образ и не лезь в него. Мы же тебе в докер оно завернули, жри как есть».

mogwai ★★★★ ()
Ответ на: комментарий от Spoofing

конечно docker по зависимостям что-то принесёт, но это куда меньше, чем если подбивать систему под требования, например SDK многих китайских вендоров обязывают использовать Ubuntu 10.04/12.04 и bash, а есть ещё старые SDK которые вендор уже не поддерживает так как перестал выпускать эти чипы, но устройств на этом чипе не одно и не два

imb ★★ ()
Ответ на: комментарий от mogwai

Чем kvm для этого плох?

мир разработки это не только linux

И да, ты путаешь. Докер не для «разрабатывать», докер для «деплоить».

одно не исключает другое, возможно в «мире x86» это только для «деплоить»

imb ★★ ()
Ответ на: комментарий от imb

мир разработки это не только linux

Тебе кто-то запрещает Windows гостём запустить? Кстати, да, а докер позволяет под онтопиком в контейнере запустить оффтопик?

одно не исключает другое

Ты говоришь об упрощении или о том, что и микроском в качестве молотка вполне годится? Забыли про деплой. Какие у докера преимущества для разработчика именно в процессе разработки?

возможно в «мире x86» это только для «деплоить»

А ещё расскажи о преимуществах докера относительно классической виртуализации там, где архитектура хоста и гостя различаются.

mogwai ★★★★ ()
Последнее исправление: mogwai (всего исправлений: 1)
Ответ на: комментарий от imb

но это куда меньше, чем если подбивать систему под требования…

Если и там, и там гостевые системы одинаковые, то каким образом это стало меньше, чем другой гипервизор, с которым приходит меньше хлама по зависимостям?

Или ты заказчику, у которого кругом одна гента предложишь докерфайл с бубунтой 18.10? Тогда ссаными тряпками тебя из профессии гнать надо.

mogwai ★★★★ ()