xen-create-image, которая в значительной мере автоматизирует задачу. Единственный обязательный параметр — --hostname, передающий имя domU; другие опции важны, но они могут быть сохранены в конфигурационном файле /etc/xen-tools/xen-tools.conf, и их отсутствие в командной строке не вызовет ошибки. Поэтому следует проверить содержимое этого файла перед созданием образов, или же использовать дополнительные параметры в вызове xen-create-image. Отметим следующие важные параметры:
--memory для указания количества ОЗУ, выделенного вновь создаваемой системе;
--size и --swap, чтобы задать размер «виртуальных дисков», доступных для domU;
--debootstrap-cmd, чтобы указать, какая команда debootstrap используется. Если установлены debootstrap и cdebootstrap, по умолчанию выбирается debootstrap. В этом случае также чаще всего используется опция --dist (с указанием имени дистрибутива, например bookworm).
--dhcp объявляет, что конфигурация сети domU должна быть получена по DHCP, в то время как --ip позволяет задать статический IP-адрес.
--dir, заключается в создании одного файла на dom0 для каждого устройства, которое будет передано domU. Для систем, использующих LVM, альтернативой является использование опции --lvm, за которой указывается имя группы томов; в таком случае xen-create-image создаст новый логический том в этой группе, и этот логический том станет доступным для domU как жёсткий диск.
#xen-create-image --hostname testxen --dhcp --dir /srv/testxen --size=4G --dist=bookworm --role=udevGeneral Information -------------------- Hostname : testxen Distribution : bookworm Mirror : http://deb.debian.org/debian Partitions : swap 512M (swap) / 4G (ext4) Image type : sparse Memory size : 256M Bootloader : pygrub Networking Information ---------------------- IP Address : DHCP [MAC: 00:16:3E:9F:55:BB] Creating partition image: /srv/testxen/domains/testxen/swap.img Done Creating swap on /srv/testxen/domains/testxen/swap.img Done Creating partition image: /srv/testxen/domains/testxen/disk.img Done Creating ext4 filesystem on /srv/testxen/domains/testxen/disk.img Done Installation method: debootstrap Done Running hooks Done Role: udev File: /etc/xen-tools/role.d/udev Role script completed. Creating Xen configuration file Done No role scripts were specified. Skipping Setting up root password Generating a password for the new guest. All done Logfile produced at: /var/log/xen-tools/testxen.log Installation Summary --------------------- Hostname : testxen Distribution : bookworm MAC Address : 00:16:3E:9F:55:BB IP Address(es) : dynamic SSH Fingerprint : SHA256:JsTNzWbiRoqTwZ60GAFFpl+s+/rmWf5GhQexQz1gCm8 (DSA) SSH Fingerprint : SHA256:iEuV3oFhRdDRoytTpxF4YMMgewTsQKYTU709kxCH+tk (ECDSA) SSH Fingerprint : SHA256:LSrc0bAIaeKI0neSEeT+Oun6uBbu47sKAo2agmq+jCI (ED25519) SSH Fingerprint : SHA256:/4OS5h74tkzSlk5/EU/tchvrar32vpoJoCudyDnw9W0 (RSA) Root Password : 3Bbnf5qFcEMDucK4sMYFJY7
vif*, veth*, peth* и xenbr0. Гипервизор Xen комбинирует их в соответствии с заданной схемой под контролем инструментов пространства пользователя. Поскольку NAT и маршрутизируемая модель приспособлены лишь для отдельных случаев, мы рассмотрим только модель моста.
xend настроен на подключение виртуальных сетевых интерфейсов к любому уже существующему сетевому мосту (при наличии нескольких таких мостов предпочтение отдаётся xenbr0). Поэтому нам надо настроить мост в /etc/network/interfaces (для этого требуется установить пакет bridge-utils, поэтому он рекомендуется пакетом xen-utils), заменив существующую запись eth0. Будьте осторожны и используйте правильное имя сетевого устройства:
auto xenbr0
iface xenbr0 inet dhcp
bridge_ports eth0
bridge_maxwait 0xl. Эта команда позволяет производить различные манипуляции с доменами, в частности выводить их список, запускать их и останавливать. Может понадобиться увеличить объём памяти по умолчанию, отредактировав значение переменной memory в конфигурационном файле (в данном случае — /etc/xen/testxen.cfg). Здесь мы установили его в 1024 (мегабайт).
#xl listName ID Mem VCPUs State Time(s) Domain-0 0 7973 4 r----- 13.6 #xl create /etc/xen/testxen.cfgParsing config from /etc/xen/testxen.cfg #xl listName ID Mem VCPUs State Time(s) Domain-0 0 7841 4 r----- 87.1 testxen 4 0 0 --p--- 0.0
testxen domU использует реальную память, взятую из оперативной памяти, которая иначе была бы доступна для dom0, а не виртуальную память. Поэтому при создании сервера, предназначенного для размещения экземпляров Xen, следует позаботиться о соответствующем выделении физической оперативной памяти.
hvc0 с помощью команды xl console:
#xl console testxen[...] Debian GNU/Linux 12 testxen hvc0 testxen login:
xl pause и xl unpause. Заметьте, что хотя приостановленный domU не использует ресурсы процессора, выделенная ему память по-прежнему занята. Может иметь смысл использовать команды xl save и xl restore: сохранение domU освобождает ресурсы, которые ранее использовались этим domU, в том числе и ОЗУ. После восстановления (или снятия с паузы) domU не замечает ничего кроме того, что прошло некоторое время. Если domU был запущен, когда dom0 выключается, сценарии из пакетов автоматически сохраняют domU и восстанавливают его при следующей загрузке. Отсюда, конечно, проистекает обычное неудобство, проявляющееся, например, при переводе ноутбука в спящий режим; в частности, если domU приостановлен слишком надолго, сетевые подключения могут завершиться. Заметьте также, что Xen на данный момент несовместим с большей частью системы управления питанием ACPI, что мешает приостановке dom0-системы.
shutdown), так и из dom0, с помощью xl shutdown или xl reboot.
xl требуют одного или более аргументов, часто — имени domU. Эти аргументы подробно описаны в странице руководства xl(1).
init, и получившийся набор будет выглядеть чрезвычайно похоже на виртуальную машину. Официальное название для такой схемы «контейнер» (отсюда и неофициальное название LXC: LinuX Containers), но весьма значительным отличием от «настоящих» виртуальных машин, таких как предоставляемые Xen или KVM, заключается в отсутствии второго ядра; контейнер использует то же самое ядро, что и хост-система. У этого есть как преимущества, так и недостатки: к преимуществам относится великолепная производительность благодаря полному отсутствию накладных расходов, а также тот факт, что ядро видит все процессы в системе, поэтому планировщик может работать более эффективно, чем если бы два независимых ядра занимались планированием выполнения разных наборов задач. Основное из неудобств — невозможность запустить другое ядро в контейнере (как другую версию Linux, так и другую операционную систему).
/sys/fs/cgroup. Так как Debian 8 перешел на systemd, который также зависит от control groups, это делается автоматически во время загрузки без дополнительной настройки.
/etc/network/interfaces, переноса конфигурации физического интерфейса (например, eth0 или enp1s0) на интерфейс моста (обычно br0) и настройки связи между ними. Например, если конфигурационный файл сетевых интерфейсов изначально содержит записи вроде таких:
auto eth0 iface eth0 inet dhcp
auto eth0
iface eth0 inet static
auto br0
iface br0 inet dhcp
bridge-ports eth0eth0, и интерфейсы, заданные для контейнеров.
/etc/network/interfaces тогда примет следующий вид:
# Интерфейс eth0 без изменений auto eth0 iface eth0 inet dhcp # Виртуальный интерфейс auto tap0 iface tap0 inet manual vde2-switch -t tap0 # Мост для контейнеров auto br0 iface br0 inet static bridge-ports tap0 address 10.0.0.1 netmask 255.255.255.0
br0.
#lxc-create -n testlxc -t debiandebootstrap is /usr/sbin/debootstrap Проверяю кэш, скачанный в /var/cache/lxc/debian/rootfs-stable-amd64 ... Загружаю debian minimal ... I: Перезапрашиваю Release I: Перезапрашиваю Release.gpg [...] Скачивание завершено. Копирую rootfs в /var/lib/lxc/testlxc/rootfs... [....] #
/var/cache/lxc, а затем перемещена в каталог назначения. Это позволяет создавать идентичные контейнеры намного быстрее, поскольку требуется лишь скопировать их.
--arch с указанием архитектуры системы для установки и опцию --release, если вы хотите установить что-то отличное от текущего стабильного релиза Debian. Вы можете также установить переменную окружения MIRROR, чтобы указать на локальное зеркало Debian.
lxcbr0, который по умолчанию используется всеми вновь создаваемыми контейнерами через /etc/lxc/default.conf и lxc-net сервис:
lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up
lxcbr0 на хост-системе. Эти настройки вы найдете в конфигурации созданного контейнера (/var/lib/lxc/testlxc/config), где также будет указан MAC-адрес устройства lxc.net.0.hwaddr. Если эта последняя запись отсутствует или отключена, будет сгенерирован случайный MAC-адрес.
lxc.uts.name = testlxc
lxc-start --daemon --name=testlxc.
lxc-attach -n testlxc passwd. Теперь можно войти в систему с указанным паролем:
#lxc-console -n testlxcConnected to tty 1 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself Debian GNU/Linux 12 testlxc tty1 testlxc login:rootPassword: Linux testlxc 6.1.0-23-amd64 #1 SMP Debian 6.1.99-1 (2024-07-15) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Wed Jun 7 18:39:37 UTC 2024 on console root@testlxc:~#ps auxwfUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 18964 11464 ? Ss 01:36 0:00 /sbin/init root 45 0.0 0.2 31940 10396 ? Ss 01:37 0:00 /lib/systemd/systemd-journald root 71 0.0 0.1 99800 5724 ? Ssl 01:37 0:00 /sbin/dhclient -4 -v -i -pf /run/dhclient.eth0.pid [..] root 97 0.0 0.1 13276 6980 ? Ss 01:37 0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups root 160 0.0 0.0 6276 3928 pts/0 Ss 01:46 0:00 /bin/login -p -- root 169 0.0 0.0 7100 3824 pts/0 S 01:51 0:00 \_ -bash root 172 0.0 0.0 9672 3348 pts/0 R+ 01:51 0:00 \_ ps auxwf root 164 0.0 0.0 5416 2128 pts/1 Ss+ 01:49 0:00 /sbin/agetty -o -p -- \u --noclear [...] root@testlxc:~#
/var/lib/lxc/testlxc/rootfs). Мы можем выйти из консоли с помощью Control+a q.
lxc-start с опцией --daemon по умолчанию. Контейнер можно прервать впоследствии с помощью команды lxc-stop --name=testlxc.
lxc-autostart, запускающую контейнеры, параметр lxc.start.auto которых установлен в значение 1). Более тонкий контроль порядка запуска возможен с помощью lxc.start.order и lxc.group: по умолчанию сценарий инициализации сначала запускает контейнеры, входящие в группу onboot, а затем — контейнеры, не входящие ни в какие группы. В обоих случаях порядок внутри группы определяется параметром lxc.start.order.
qemu-*: речь всё равно о KVM.
/proc/cpuinfo.
virtual-manager — это графический интерфейс, который использует libvirt для создания виртуальных машин и управления ими.
apt-get install libvirt-clients libvirt-daemon-system qemu-kvm virtinst virt-manager virt-viewer. libvirt-daemon-system предоставляет демон libvirtd, позволяющий (возможно удалённо) управлять виртуальными машинами, запущенными на хосте, и запускает необходимые виртуальные машины при загрузке хоста. libvirt-clients предоставляет утилиту командной строки virsh, которая позволяет контролировать виртуальные машины, управляемые libvirt.
virt-install, которая позволяет создавать виртуальные машины из командной строки. Наконец, virt-viewer позволяет получать доступ к графической консоли виртуальной машины.
eth0 и мост br0, и что первый присоединён к последнему.
libvirtd, где хранить образы дисков, если не устраивает расположение по умолчанию (/var/lib/libvirt/images/).
#mkdir /srv/kvm#virsh pool-create-as srv-kvm dir --target /srv/kvmPool srv-kvm created #
virt-install. Эта команда регистрирует виртуальную машину и её параметры в libvirtd, а затем запускает её, чтобы приступить к установке.
#virt-install --connect qemu:///system--virt-type kvm
--name testkvm
--memory 2048
--disk /srv/kvm/testkvm.qcow,format=qcow2,size=10
--cdrom /srv/isos/debian-12.6.0-amd64-netinst.iso
--network bridge=virbr0
--graphics vnc
--os-type linux
--os-variant debiantesting
Starting install... Allocating 'testkvm.qcow'
Опция --connect указывает, какой «гипервизор» использовать. Он указывается в виде URL, содержащего систему виртуализации(xen://, qemu://, lxc://, openvz://, vbox:// и т. п.) и машину, на которой должны размещаться виртуальные машины (это поле можно оставить пустым в случае локального узла). В дополнение к этому, в случае QEMU/KVM каждый пользователь может управлять виртуальными машинами, работающими с ограниченными правами, и путь URL позволяет дифференцировать «системные» машины (/system) от остальных (/session).
| |
Так как KVM управляется тем же образом, что и QEMU, в --virt-type kvm можно указать использование KVM, хотя URL и выглядит так же, как для QEMU.
| |
Опция --name задаёт (уникальное) имя виртуальной машины.
| |
Опция --memory позволяет указать объём ОЗУ (в МБ), который будет выделен виртуальной машине.
| |
--disk служит для указания местоположения файла образа, который будет представляться жёстким диском виртуальной машины; этот файл создаётся, если только ещё не существует, а его размер (в ГБ) указывается параметром size. Параметр format позволяет выбрать из нескольких способов хранения образа файла. Формат по умолчанию (qcow2) позволяет начать с небольшого файла, увеличивающегося только по мере того, как виртуальная машина использует пространство.
| |
Опция --cdrom используется, чтобы указать, где искать оптический диск для установки. Путь может быть либо локальным путём к ISO-файлу, либо URL, по которому можно получить файл, либо файлом устройства физического привода CD-ROM (то есть /dev/cdrom).
| |
С помощью опции --network указывается, каким образом виртуальная сетевая карта интегрируется в сетевую конфигурацию хоста. Поведением по умолчанию (которое мы задали явно в этом примере) является интеграция в любой существующий сетевой мост. Если ни одного моста нет, виртуальная машина сможет получить доступ к физической сети только через NAT, поэтому она получает адрес в подсети из частного диапазона (192.168.122.0/24).
Конфигурация сети по умолчанию, содержащая определение интерфейса моста virbr0 можно редактировать с помощью virsh net-edit default и начать с virsh net-start default если это ещё не было сделано автоматически во время запуска системы.
| |
--graphics vnc означает, что подключение к графической консоли нужно сделать доступным через VNC. По умолчанию соответствующий VNC-сервер слушает только на локальном интерфейсе; если VNC-клиент должен запускаться на другой системе, для подключения потребуется использовать SSH-туннель (см. Раздел 9.2.1.5, «Создание шифрованных туннелей»). Как вариант, можно использовать опцию --graphics vnc,listen=0.0.0.0, чтобы VNC-сервер стал доступен на всех интерфейсах; заметьте, что если вы сделаете так, вам серьёзно стоит заняться настройкой межсетевого экрана.
| |
Опции --os-type и --os-variant позволяют оптимизировать некоторые параметры виртуальной машины, исходя из известных особенностей указанной операционной системы.
Полный список типов ОС можно просмотреть с помощью команды osinfo-query os из пакета libosinfo-bin.
|
virt-viewer в любом графическом окружении (пароль root на удалённой машине запрашивается дважды, поскольку для работы требуется два SSH-соединения):
$virt-viewer --connect qemu+ssh://root@server/system testkvmroot@server's password: root@server's password:
libvirtd список управляемых им виртуальных машин:
#virsh -c qemu:///system list --all Id Name State ---------------------------------- 8 testkvm shut off
#virsh -c qemu:///system start testkvmDomain testkvm стартует
vncviewer):
#virsh -c qemu:///system vncdisplay testkvm127.0.0.1:0
virsh входят:
reboot для перезапуска виртуальной машины;
shutdown для корректного завершения работы;
destroy для грубого прерывания работы;
suspend для временной приостановки;
resume для продолжения работы после приостановки;
autostart для включения (или для выключения, с опцией --disable) автоматического запуска виртуальной машины при запуске хост-системы;
undefine для удаления всех следов виртуальной машины из libvirtd.