M – тип машины, virt – абстрактно-виртуальный ARM
-machine указывает тип компьютера, который вы собрались эмулировать, можно выбрать ubuntu, pc, pc-q35 и другие варианты, смотрите подробнее командой -machine help
-cpu - тип процессора, можно передать непосредственно тип процессора, а также дополнительные флаги
-smp - включает симуляцию мультипроцессорной архитектуры, количество ядер
-boot - позволяет настроить порядок загрузки устройств, a,b - дискета, с - первый жесткий диск, d - CDROM, n-p - загрузка через сеть, по умолчанию виртуальная машина загружается из жесткого диска
-m - указывает количество оперативной памяти, доступной машине, объем памяти
-k - раскладка клавиатуры по умолчанию
-soundhw - подключить звуковую карту к системе
-device - подключить указанное устройство к машине, нужно указать драйвер и его опции
-name - имя гостевой системы, будет отображаться в верху окна
-uuid - установить UUID для системы
-fda, fdb - подключить дискету из файла
-hda, hdb - подключить жесткий диск из файла
-cdrom - подключить оптический диск
-usb - включить поддержку USB
-usbdevice - подключить USB устройство
-display - выбрать тип отображения, доступно sdl, curses, gtk, none, vga и другие
-full-screen - запустить в полный экран
-no-acpi - отключить поддержку ACPI
-net - создать сетевой интерфейс
-net nic
-net tap
-net user
-net nic user,model=virtio
-realtime включить режим реального времени, опции mclock нужно передать значение on
-gdb - ожидать подключения отладчика gdb
-enable-kvm - включить поддержку kvm
-loadvm - загрузить сохраненное состояние
-daemonize - сделать процесс фоновым
-snapshot - записывать изменения не в файл жесткого диска, а в отдельные файлы
-nographic - отключить графический вывод
-kernel - использовать указанный образ ядра linux
-append - командная строка для ядра
-initrd - файл initrd для загрузки Linux
-vnc :5 - VNC на :5905
-drive if=none,file=debian.img,format=qcow2 – образ жесткого диска
-soundhw ac97 - добавить звуковую карту
no-reboot – перезапуск системы приведет к остановке эмулятора
Немного о сетевых устройствах в qemu
Вариант первый:
qemu-system-x86_64
-m 1G
-device virtio-net-pci,netdev=lan
-netdev user,id=lan
-drive file=you.iso,media=cdrom
Виртуальная машина автоматически получит ip-адрес из подсети 10.0.2.0/24, шлюз - 10.0.2.2, dns-сервер - 10.0.2.3.
К физическому хосту можно обратиться по адресу 10.0.2.2.
ICMP пакеты через такой тип сети не проходят.
Вариант два:
Для такой сетевой карты требуется root
sudo qemu-system-x86_64
-m 1G
-device virtio-net-pci,netdev=lan
-netdev tap,id=lan,ifname=tap0
-drive file=/tmp/livecd.iso,media=cdrom
P.S. мне этот вариант не нравится так как у меня уже есть бридж на ovs
Вариант три:
Для такой сетевой карты требуется root
sudo qemu-system-x86_64
-m 1G
-device virtio-net-pci,netdev=lan
-netdev tap,id=lan,script=no,ifname=tap0
-drive file=/tmp/livecd.iso,media=cdrom
Почти тоже самое что но c очень важным параметром "script=no",
да и теперь нам надо выполнить одну команду для ovs для добавления tap0 в бридж ovs
ovs-vsctl add-port ovsbr0 tap0
ip link set up dev tap0
x86
Готовим диск:
cd new_dir
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso
qemu-img create -f qcow2 image_x86.qcow2 10G
Установка системы:
qemu-system-x86_64
-enable-kvm
-cpu host
-hda image_x86.qcow2
-drive file=debian-12.5.0-amd64-netinst.iso,media=cdrom
-boot d
-smp 4
-m 4G
-display gtk
-vga std
-device virtio-net-pci,netdev=lan
-netdev tap,id=lan,ifname=tap0,script=no
-vnc :5
-device AC97
-nographic
Дальнейший запуск и использование ВМ:
!!! Убираем строки отвечающие за загрузку с cd-cdrom
!!! -drive file=manjaro-xfce-21.0-210318-linux510.iso,media=cdrom
!!! -boot d
!!! Не забываем про сеть
!!! ovs-vsctl add-port ovsbr0 tap0
!!! ip link set up dev tap0
qemu-system-x86_64
-enable-kvm
-cpu host
-hda image_x86.qcow2
-smp 4
-m 4G
-display gtk
-vga std
-device virtio-net-pci,netdev=lan
-netdev tap,id=lan,ifname=tap0,script=no
-vnc :5
-device AC97
-nographic
arm
0. Готовим диск болванку:
qemu-img create -f qcow2 ebian12-arm.qcow2 8G
1. Нам нужны будут файлы:
Файло брать тут:
http://ftp.debian.org/debian/dists/bookworm/main/installer-armhf/current/images/netboot/
Нам потребуется:
wget http://ftp.debian.org/debian/dists/bookworm/main/installer-armhf/current/images/netboot/initrd.gz
wget http://ftp.debian.org/debian/dists/bookworm/main/installer-armhf/current/images/netboot/vmlinuz
2. Создаем диск:
qemu-img create -f qcow2 debian12-arm.qcow2 10G
!!! Заменил драйвер для сетевой карты так как при установки системы ее было не видно
!!! Вместо -device virtio-net-pci,netdev=lan
!!! На -device virtio-net-device,netdev=lan
3. Создаем виртуальный интерфейс tap0 и добавляем его в ovsbr0
ip tuntap add dev tap0 mode tap
ip link set up dev tap0
ovs-vsctl add-port ovsbr0 tap0
4. Пример первый запуск ВМ для установки ос:
qemu-system-arm -smp 4 -m 1024 -M virt
-kernel vmlinuz
-initrd initrd.gz
-append "root=/dev/ram"
-drive if=none,file=debian12-arm.qcow2,format=qcow2,id=hd
-device virtio-blk-device,drive=hd
-device virtio-net-device,netdev=lan
-netdev tap,id=lan,ifname=tap0,script=no
-vnc :5
-device AC97
-nographic
-no-reboot
5. Теперь нам нужно добыть загрузочные файлы из толькочто установленного образа
sudo modprobe nbd max_part=16
sudo qemu-nbd -c /dev/nbd0 debian12-arm.qcow2
mkdir mount-qemu
mount /dev/nbd0p1 mount-qemu
sudo mount /dev/nbd0p1 mount-qemu
mkdir after-copy
cp mount-qemu/ after-copy/
umount mount-qemu
sudo umount mount-qemu
sudo qemu-nbd -d /dev/nbd0
sudo killall qemu-nbd
6. Используем образ дальше:
!!! Перед использованием рекомендую файлы initrd,vmlinuz и debian12-arm.qcow2 в один каталог.
qemu-system-arm -smp 4 -m 1024 -M virt
-kernel vmlinuz-6.1.0-18-armmp-lpae
-initrd initrd.img
-drive if=none,file=debian12-arm.qcow2,format=qcow2,id=hd
-device virtio-blk-device,drive=hd
-device virtio-net-device,netdev=lan
-netdev tap,id=lan,ifname=tap0,script=no
-vnc :5
-device AC97
-nographic
-no-reboot
8. запуск образа и использовать бридж что потребует судо:
создаем бридж:
sudo ip link add name br0 type bridge
sudo ip link set br0 up
sudo ip link set eth0 master br0 # Замените eth0 на ваш интерфейс
запускаем вм:
sudo qemu-system-x86_64
-enable-kvm -cpu host
-machine type=q35
-m 2048
-smp sockets=1,cores=4
-drive file=./ system_img,if=none,id=hd0,format=raw
-device virtio-scsi-pci
-device scsi-hd,drive=hd0
-boot order=d
-netdev bridge,id=net0,br=br0
-device virtio-net-pci,netdev=net0
0. Добавляем на гостя железку
...
...
...
...
1. В госте монтируем каталог
mount -t virtiofs mount_tag /mnt/mount/path
guest windows
0. Устанавливаем драйверы, агента, службу WinFsp
https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
1. Если "общая папка" сама не появилась то можно выполнить вручную
cmd
cd "C:Program Files (x86)WinFspbin"
launchctl-x64.exe" start virtiofs viofsY mount_tag0 Y
где:
mount_tag0 - ваш так который вы указали в настройках гостя
Y - желаемая буква (тоже надо viofsY)
!!! настраиваем путем редактирования VM
!!! Обращаем внимание на следующие:
!!! ovsbr0 - настроенный bridge с помощью openvswitch
!!! vlan-4082 - имя нужного нужного vlan
!!! log-ens3 - желаемое имя сетевого адаптера на гипервизоре
Настройка OVS
!!! После включения ВМ у нас появится интерфейс с именем "log-ens3" на гипервизоре
ovs-vsctl set port log-ens3 tag=1234 - добавим vlan с тегом 1234 для интерфейса log-ens3
cat /proc/cpuinfo | grep -E '(vmx|svm)' -m 1 - проверить что процессор поддерживает Виртуализацию
apt install qemu-kvm libvirt-daemon-system ovmf virtinst - установка на debian
apt install qemu-kvm libvirt-bin ovmf virtinst - установка на ubuntu (до 20)
yum -y install kvm libvirt qemu-kvm virtinst - установка на CentOS
apt install virt-manager - установка virt-manager
qemu-kvm - гипервизор
libvirt-bin - по для управления гипервизором(virsh)
virt-manager - графическая утилита для управления гипервизором (не обязательная программа, для установки требуется x-windows)
ovmf - по для поддержки загрузки uefi для гостей
virtinst - программа для создания виртуальных машин в консоли
ip -a - посмотреть адаптеры
iptables -vnL - показать правила firewall
sudo iptables -nvL - показать правила firewall
virt-host-validate - проверка установленных компонентов
libvirtd - основной демон управления виртуализацией
systemctl status libvirtd - проверяем состояние демона
systemctl start libvirtd - запускаем демон
systemctl enable libvirtd - добавляем в автозагрузку
Установка OVS и настройка OVS
apt install openvswitch-switch - устанавливаем ovs
ovs-vsctl show - смотрим что у нас с сетью
ovs-vsctl add-br ovsbr0 - создаем свитч с именем ovsbr0
ovs-vsctl add-port ovsbr0 eno1 - добавляем в свитч с именем ovsbr0 интерфейс eno0
ovs-vsctl show - проверяем настройки
Настройка интерфейса хоста static:
nano /etc/network/interfaces
----------------------------------------
auto lo
iface lo inet loopback
auto eno1
iface eno1 inet manual
dns-nameservers 192.168.15.1
dns-nameservers 8.8.8.8
auto ovsbr0
iface br0 inet static
address 192.168.15.253/24
gateway 192.168.15.1
-------------------------------------
Настройка сети dhcp:
nano /etc/network/interfaces
----------------------------------------
auto lo
iface lo inet loopback
auto eno1
iface eno1 inet manual
dns-nameservers 192.168.15.1
dns-nameservers 8.8.8.8
auto ovsbr0
iface ovsbr0 inet dhcp
-------------------------------------
Применить настройки сети без перезагрузки:
/etc/init.d/networking restart - перезагрузка сети (пере читается конфигурация сети)
systemctl stop NetworkManager.service - остановить сеть
systemctl start NetworkManager.service - запустить (пере читается конфигурация сети)
systemctl restart networking - перезагрузка сети (пере читается конфигурация сети)
Настройка сети KVM и OVS
!!! можно просто отредактировать сеть по умолчанию default
!!! virsh net-edit default
0. Выполняем выгрузку сети по умолчанию
virsh net-list --all - показать все сети
virsh net-dumpxml default > /root/1.xml - этой командой мы можем сохранить настройки сети default
1. Редактируем файл 1.xml
1.1 пример простой сети (ovs) для добавления в KVM
-------------
ovsbr0
-------------
1.2 пример сложной сети с vlan (ovs) для добавления в KVM
-------------------
ovs-network
-------------------
2. Добавляем сеть ovsbr0 из файла 1.xml
virsh net-define --file /root/1.xml - этой командой мы можем создать сеть из файла (/root/1.xml)
virsh net-start --network ovsbr0 - запуск сети
virsh net-autostart --network ovsbr0 - включение автозапуска для сети
Команда миграции:
virsh migrate --live --copy-storage-all --persistent --abort-on-error --verbose linux6 qemu+ssh://hsrv1/system
Ошибка:
Live Migration Failure With Error "Unable to find security driver for model apparmor"
Должно было помочь:
Вариант 1:
sudo aa-status - смотрим состояние AppArmor
sudo aa-teardown - вырубаем AppArmor
Вариант 2:
sudo apt install apparmor-utils
sudo aa-complain /etc/apparmor.d/usr.sbin.libvirtd
sudo aa-enforce /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper
service libvirtd restart
0. Проверяем доступность между серверами kvm (iptables -L -n -v, ipset list kvm)
1. Проверяем соответствие конфигурации live и config по части сети и дисков
virsh dumpxml VM_NAME
cat /etc/libvirt/qemu/VM_NAME.xml
virsh net-dumpxml default
2. Проверяем конфиг VM_NAME
virsh dumpxml --inactive --security-info VM_NAME > /tmp/VM_NAME.xml
vim /tmp/VM_NAME.xml
В случае различия в процессорах можно их выровнять по младшему процессору, отключив некоторые фичи (потребуется перезагрузка):
3.
Проверяем лимит скорости при миграции
virsh migrate-getspeed VM_NAME
Ограничиваем скорость, если требуется
virsh migrate-setspeed VM_NAME Speed-in-B
virsh migrate-setspeed VM_NAME 20000000
Увеличиваем простой ВМ после миграции (фриз на время копирования памяти, дефолт: 500)
virsh migrate-setmaxdowntime VM_NAME milliseconds
Миграция без удаления (виртуальная машина не удаляется после перемещения):
!!! Рекомендуется к применению
virsh migrate --live --copy-storage-all --persistent --abort-on-error --verbose VM_NAME qemu+ssh://TO_KVM_SERVER/system
дополнительно можно указать --xml filename.xml для таргета
дополнительно можно указать --compressed для уменьшения передаваемых при миграции данных
** Не забываем, что после миграции создаётся файл текущей конфигурации, а не указанной в --xml, поэтому надо применять конфиг отдельно.
Миграция с удалением и созданием в новом KVM:
!!! Внимание лучше использовать вариант без удаления
!!! мигрировать надо с двумя важными опциями
!!! --undefinesource - удалить ВМ из того гипервизора откуда мигрируем(логично, да?)
!!! --persistent - добавить ВМ в список ВМ на новом месте
Миграция:
virsh migrate VM_NAME qemu_ssh://KVM_NAME/system --undefinesource --persistent
Проверка:
virsh dominfo VM_NAME | grep persistent
Пример переноса ВМ:
На хосте с которого копируем ВМ:
0) Копируем диск на новый хост (файл myserver.qcow2)
1) Выгружаем настройки ВМ
virsh dumpxml myserver > /mnt/data-1/myserver.xml - сохранить настройки ВМ
На хосте на котором разворачиваем бэкап:
0) Восстанавливаем ВМ
virsh define /home/user/myserver.xml
1) При необходимости правим (указываем месторасположение образа жесткого диска):
virsh edit myserver
virt-clone:
!!! Перед клонирование ВМ необходимо выключить или поставить на паузу.
!!! virsh shutdown
!!! vursh suspend
Первый вариант:
virt-clone --original {Domain-Vm-Name-Here} --auto-clone
Второй вариант:
virt-clone --original {Domain-Vm-Name-Here} --name {New-Domain-Vm-Name-Here} --auto-clone
Третий вариант:
virt-clone --original {Domain-Vm-Name-Here} --name {New-Domain-Vm-Name-Here} --file {/var/lib/libvirt/images/File.Name.here}
Пример:
virsh suspend Name_VM_1
virt-clone --original Name_VM_1 --name Name_VM_2 --file /var/lib/libvirt/images/Name_VM_2.qcow2
virsh resume Name_VM_1
virt-sysprep -d Name_VM_2 --hostname Name_VM_2 --enable user-account,ssh-hostkeys,net-hostname,net-hwaddr,machine-id --keep-user-accounts vivek --keep-user-accounts root --run 'sed -i "s/192.168.122.16/192.168.122.25/" /etc/network/interfaces'
обычное использование без vlan:
ovs-vsctl show - показывает информацию по свитчу, проверяем работу и заодно узнаем какая у нас версия ovs
ovs-vsctl add-br br0 - добавляем свитч с именем br0
ovs-vsctl add-port br0 eth0 - добавляем интерфейс eth0 в свитч br0
пример с vlan:
ovs-vsctl add-br ovs0 - добавляем свитч openvswitch с именем br0
ovs-vsctl add-port ovs0 eth0 - добавляем интерфейс eth0 в свитч ovs0
ovs-vsctl set port eth0 vlan_mode=native-untagged tag=2 trunks=2,3,4 - вешаем trunk на интерфейс eth0
ovs-vsctl add-port ovs0 ovs0-vlan2 tag=2 -- set Interface ovs0-vlan2 type=internal - добавляем порт и вешаем access (tag=2) на интерфейс ovs0-vlan2
ovs-vsctl add-port ovs0 ovs0-vlan4 tag=4 -- set Interface ovs0-vlan4 type=internal - добавляем порт и вешаем access (tag=4) на интерфейс ovs0-vlan2
ovs-vsctl add-port ovs0 ovs0-vlan3 tag=3 -- set Interface ovs0-vlan3 type=internal - добавляем порт и вешаем access (tag=3) на интерфейс ovs0-vlan2
ovs-vsctl set port ovsbr0 tag=29
удаление портов и коммутатора:
ovs-vsctl del-port ovs0-vlan2 - удалить порт (ovs0-vlan2) из коммутатора
ovs-vsctl del-br ovs0 - удалить коммутатор ovs0
Примеры настройки сети:
dhcp client:
dhclient ovs0-vlan3 - получить настройки по dhcp для интерфейса ovs0-vlan3
static ifconfig:
ifconfig ovs0-vlan2 inet 10.254.254.1/24 up - настраиваем ip 10.254.254.1/24 и запускаем интерфейс
ifconfig ovs0-vlan4 up - просто запускаем интерфейс без настройки ip
static ip:
ip a - показать доступные устройства
ip address add 192.168.66.10/24 dev eth0 - задаем адрес ipv4
ip link set up eth0 - запускаем интерфейс
Собственно пытаемся работать:
virsh --c lxc:// - подключаемся к консоли управления lxc контейнерами
create /root/lxc0.xml - создаем контейнер из шаблона lxc0.xml
create /root/lxc1.xml - создаем контейнер из шаблона lxc1.xml
list - показать доступные контейнеры
console lxc0 - подключаемся к контейнеру lxc0 (CTRL+] - отключится контейнера)
ip a - показать доступные устройства
ip address add 192.168.66.10/24 dev eth0 - задаем адрес ipv4
ip link set up eth0 - запускаем интерфейс
ip a - показать доступные устройства
ip address add 192.168.66.11/24 dev eth0 - задаем адрес ipv4
ip link set up eth0 - запускаем интерфейс
Шаблон для контейнера(lxc0.xml)
lxc0131072exe/sbin/init1
Шаблон для контейнера(lxc1.xml)
lxc1131072exe/sbin/init1
OpenFlow
По умолчанию openvswitch работает как обычный свитч (нету vlan)
ovs-vsctl set-fail-mode br0 secure - включаем режим работы умного свитча (Задействуем протокол OpenFlow)
Гоняем трафик между двумя портами
ovs-ofctl add-flow br0 in_port=1,action=output=2
ovs-ofctl add-flow br0 in_port=2,action=output=1
ovs-ofctl dump-flows br0 - проверяем что мы там настроили
ovs-vsctl set-fail-mode br0 standalone - вернуть настройки в обычный режим (br0 снова будет как обычный свитч)
# еще
ovs-ofctl -O OpenFlow13 dump-flows ovsbr0
ovs-ofctl -O OpenFlow13 dump-ports ovsbr0
https://ostechnix.com/how-to-enable-virsh-console-access-for-kvm-guests/
https://www.cyberciti.biz/faq/howto-exit-virsh-console-connection-on-centos-ubuntu-debian-linux/
https://gist.github.com/lukasnellen/fe9b61cb9add581ef0215bd40c09c7c2
https://ravada.readthedocs.io/en/latest/docs/config_console.html
https://unix.stackexchange.com/questions/288344/accessing-console-of-ubuntu-16-04-kvm-guest
Зачем нужен visrsh console?
Что бы с гипервизора подключатся на гостевые хосты.
общая настройка гостей
!!! по умолчанию оно обычно добавлено но на госте не запущен tty
!!! нас интересует последовательное подключение
!!! устройство pty
!!! /dev/pts/0
Должно быть добавлено оборудование:
для CentOS
!!! Подключаемся по ssh и выполняем от root
systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service
для Debian / Ubuntu
!!! Подключаемся по ssh и выполняем от root
sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service
!!! вроде больше не актуально (На debian 10 и ubuntu 20 работает после запуска serial-getty@ttyS0.service)
# В ubuntu ~14 был баг не консоль после активации не работала
# Была ошибка при подключении
0. Редактируем /etc/default/grub:
---------------------------------
...
###GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,115200n8 console=tty1"
GRUB_CMDLINE_LINUX=""
...
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
----------------------------------
1. Применяем изменения
update-grub2
!!! не забываем делать backup
qemu-img resize vmdisk.qcow2 +10G - добавим 10Гб диску vmdisk.img
Изменение диска online / blockresize
virsh blockresize
[--domain] <строка> имя домена, ID или UUID
[--path] <строка> Полный путь к блочному устройству
[--size] <число> Новый размер блочного устройства, кратный целому числу (по умолчанию в КиБ)
virsh domblklist name_VM - узнаем какие диски есть у ВМ
virsh blockresize name_VM /kvm/name_VM_disk.qcow2 100G - для ВМ (name_VM), изменим размер диска равный 100Гб
Необходимые действия для гостя, при изменении диска, MBR диск / один раздел / fdisk:
!!! Не забываем делать backup
!!! Внимание пример для одного диска с одним разделом
!!! fdisk -l - посмотреть доступные
fdsik /dev/sda - редактируем таблицу разделов
: p - показываем таблицу разделов
Устр-во Загрузочный Start Конец Секторы Size Id Тип
/dev/sda1 * 2048 14678015 14675968 7G 83 Linux
: d - удаляем таблицу разделов
: n - создаем таблицу разделов
Do you want to remove the signature? [Y]es/[N]o: N - не удаляем сигнатуры
: a - ставим ставим загрузочный бит
: w - применяем изменения
!!! после выхода из (fdisk) будет сказано что изменена таблица разделов и необходимо выполнить partprobe
(name_VM)# partprobe - выполняем просим систему перечитать таблицу разделов
(name_VM)# resize2fs /dev/sda1 - выполняем изменения FS
Необходимые действия для гостя, при изменении диска, MBR диск / несколько разделов / parted:
!!! Не забываем делать backup
!!! Внимание пример для одного диска и нескольких разделов
!!! fdisk -l - посмотреть доступные
Пример (parted)
(name_VM)# parted /dev/vda - открываем нужный диск
(parted) print free - покажем доступные разделы (диск /dev/vda)
Number Start End Size Type File system Flags
1 32.3kB 4295MB 4295MB primary ext4 boot
2 4295MB 8590MB 4295MB primary linux-swap(v1)
3 8590MB 107GB 98GB primary ext4
107GB 215GB 107GB Free Space
(parted) resizepart 3 - изменяем размер третьего раздела
End [107GB]? 215GB
(parted) quit - выходим из parted
(name_VM)#partprobe - выполняем просим систему перечитать таблицу разделов
(name_VM)#resize2fs /dev/vda3 - выполняем изменения FS
Необходимые действия для гостя, при изменении диска, GBT диск / несколько разделов / parted:
!!! GPT Рассматривается схема с одним разделом (/dev/vdb1) на весь диск
(name_VM)#partprobe
(name_VM)#gdisk /dev/vdb
переходим в расширенный режим x
смещаем запись в конец диска e
выходим из расширенного режима m
Command (? for help): d
Using 1
Command (? for help): n
Partition number (1-128, default 1): [Enter]
First sector (34-2147483614, default = 2048) or {+-}size{KMGTP}: [Enter]
Last sector (2048-2147483614, default = 2147483614) or {+-}size{KMGTP}: [Enter]
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): [Enter]
Changed type of partition to 'Linux filesystem'
выходим с сохранением w
(name_VM)#partprobe
(name_VM)#resize2fs /dev/vdb1
или
btrfs filesystem resize max /
https://www.youtube.com/watch?v=tLQ2PtSVr58 - достаточно толковое видео
https://b14esh.com/category/kvm - много всего
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ - драйверы для виртуального оборудования
https://b14esh.com/devops/cockpit.html - веб интерфейс управления KVM
Установка
cat /proc/cpuinfo | grep -E '(vmx|svm)' -m 1 - проверить что процессор поддерживает Виртуализацию
apt install qemu-kvm libvirt-daemon-system ovmf virtinst - установка на debian
apt install qemu-kvm libvirt-bin ovmf virtinst - установка на ubuntu (до 20)
yum -y install kvm libvirt qemu-kvm virtinst - установка на CentOS
apt install virt-manager - установка virt-manager
qemu-kvm - гипервизор
libvirt-bin - по для управления гипервизором(virsh)
virt-manager - графическая утилита для управления гипервизором (не обязательная программа, для установки требуется x-windows)
ovmf - по для поддержки загрузки uefi для гостей
virtinst - программа для создания виртуальных машин в консоли
ip -a - посмотреть адаптеры
iptables -vnL - показать правила firewall
sudo iptables -nvL - показать правила firewall
virt-host-validate - проверка установленных компонентов
libvirtd - основной демон управления виртуализацией
systemctl status libvirtd - проверяем состояние демона
systemctl start libvirtd - запускаем демон
systemctl enable libvirtd - добавляем в автозагрузку
virsh
virsh - программа для управления KVM
help - покажет все доступные команды
!!! Использование virsh работает TAB
virsh command \ KVM управление VM
osinfo-query os - список поддерживаемых ос
virsh list --all - показать все доступные ВМ
virsh start VM_name - запустить ВМ
virsh reboot VM_name - перезагрузка VM
virsh shutdown VM_NAME - выключить ВМ (нажать кнопку выкл)
virsh destroy VM_name - выключить насильно ВМ (как вытащить вилку из розетки)
virsh undefine VM_name - удалить ВМ
virsh autostart VM_name - включить автозагрузку для ВМ
virsh autostart --disable VM_name - отключить автозагрузку ВМ
virsh edit VM_name - отредактировать настройки ВМ
net-
!!! Сеть
!!! В данном примере все действия производятся из оболочки virsh
!!! сеть должна отличаться от вашей сети, иначе она не сможет запустится.
!!! тоесть у вас сеть 192.168.0.0/24, тогда виртуальная будет 192.168.100.0/24
!!! по умолчанию 192.168.122.0/24
!!! При создании сети создаются также правила в firewall
net-list - покажет все активные сети
net-list --all - показать все сети
net-info default - посмотреть информацию по сети default
net-edit default - редактировать параметры сети default
net-start default - запуск сети default
net-autostart default - включить авто запуск сети
net-destroy - остановка сети ( в некоторых случаях удаляет сеть)
net-dumpxml default - вывести на экран настройки сети
virsh net-dumpxml default > /root/default.xml - выйдя из virsh, вот так можно выгрузить настройки сети default в файл default
namelan0 ... можно удалить всю строку вместе с uuid, будет регенерировано при создании сети
!!! Существует две команды для создания сети из xml файла.
!!! Это net-create и net-define.
!!! Имеются отличия созданных сетей
!!! При net-define сеть создается, ее надо запустить, при net-destroy она останавливается, для удаления надо использовать команду net-undefine
!!! При net-create сеть создается и сразу запускается, при net-destroy сразу удаляется
net-define --file file.xml - создать сеть из файла file.xml
net-start --network namelan0 - запуск сети namelan0
net-destroy namelan0 - остановить сеть namelan0
net-undefine --network namelan0 - удалить сеть полностью
net-create --file /home/b14esh/file.xml - создание сети
net-destroy namelan0 - удалить сеть namelan0
LVM / parted
!!! подготовим диск для LVM
parted -l - все диски и их разметку
parted /dev/vdb - запустили партед и указали диск с которым будем работать
(parted)mklabel msdos - задали таблицу разделов MBR, если требуется поддержка диска более 2ТБ то необходимо таблицу разделов указывать GPT команда (parted)mklabel gpt
(parted) unit MiB - выбрали единицу измерения мегабайты
(parted) mkpart - запросили создать раздел
Partition type? primary/extended? p - сказали что он первичный
File system type? [ext2]? ext4 - попросили создать файловую систему ext4
Start? 0 - указали начало раздела
End? -1 - указали конец
y - применили изменения
(parted) q - выход из программы разметки
!!! Если диск будет использоваться не для LVM то надо создать на нем ФС
mkfs.ext4 /dev/vdb2 - для создания ФС на диске /dev/vdb2
LVM / создание
fdisk -l - показать диски и разделы
parted -lm - показать диски и разделы
ls /dev/vd* - показать диски и разделы
pvcreate /dev/vdb1 - создаем структуру LVM, пометим диск
vgcreate vg0 /dev/vdb1 - создадим группу vg0 и добавим туда помеченный диск vdb1
vgdisplay - показать используемое пространство
!!! Все этого достаточно что бы дальше KVM мог использовать данный раздел.
сеть на openvswitch
!!! сносим сеть на brctl !!!
brctl show - проверяем что у нас там настроено
brctl delif br0 eno1 - удаляем интерфейс (eno1) из (br0)
brctl delbr br0 - удаляем бридж (br0)
brctl show - проверяем что у нас там настроено
!!! настраиваем ovs
apt install openvswitch-switch - устанавливаем ovs
ovs-vsctl show - смотрим что у нас с сетью
ovs-vsctl add-br br0 - создаем свитч с именем br0
ovs-vsctl add-port br0 eno1 - добавляем в свитч с именем br0 интерфейс eno0
ovs-vsctl show - проверяем настройки
!!! далее настройка KVM
virsh net-list --all - показать все сети
virsh net-dumpxml default > /root/1.xml - этой командой мы можем сохранить настройки сети default
пример простой сети (ovs) для добавления в KVM
-------------
br0
-------------
virsh net-define --file /root/1.xml - этой командой мы можем создать сеть из файла (/root/1.xml)
virsh net-start --network br0 - запуск сети
virsh net-autostart --network br0 - включение автозапуска для сети
пример сложной сети с vlan (ovs) для добавления в KVM
-------------------
ovs-network
-------------------
пример настройки интерфейса ВМ
virsh list --all - показать доступные ВМ
virsh edit VM_name - редактируем файл настроек VM_name
----------------
----------------
LVM / pool — для каталога
!!! Хранилище образов, дисков
!!! RAW - сырой диск
!!! qcow2 - динамически расширяемый, предпочтительный формат, так как гостя можно будет бэкапить средствами kvm
!!! хз как по скорости по мне так они одинаковые
pool-list --all - показать все хранилища
!!! Для команд pool-create и pool-define требуется конфигурационные файлы xml
!!! При pool-define хранилище создается, его надо запустить, при pool-destroy останавливается, для удаления надо использовать команду pool-undefine
!!! При pool-create создается и сразу запускается, при pool-destroy сразу удаляется, подходит для временного использования
!!! Так как у нас нет конфиг файла хранилища xml можно воспользоваться командами pool-create-as и pool-define-as
pool-create-as --name local-tmp --type dir --target /tmp/ - создать хранилище с именем local-temp в каталоге /tmp и оно сразу будет запущенно
pool-destroy local-tmp - удалить хранилище
pool-define-as --name local-tmp --type dir --target /tmp/ - создать хранилище с именем local-temp в каталоге /tmp
pool-autostart local-tmp - включить авто запуск хранилища local-tmp
pool-start local-tmp - запустить хранилище local-tmp
vol-create-as --pool local-tmp --capacity 1G --name test.qcow2 --format qcow2 - вот так можно создать диск test.qcow2 на локальном хранилище local-tmp
pool-destroy local-tmp - останавливаем хранилище local-tmp
pool-undefine --pool local-tmp - удаляем хранилище local-tmp
pool-define-as --name vg0 --type logical --source-name vg0 - добавить хранилище на LVM (почему --type logical ХЗ)
pool-autostart --pool vg0 - добавили в авто запуск хранилище vg0
pool-start --pool vg0 - запустили хранилище
vol-create-as --pool vg0 --name test --capacity 1G - создать диск с именем test размером 1Gb
vol-list --pool vg0 - показать диски на хранилище vg0
vol-delete test --pool vg0 - удалить диск test из пула vg0
pool-undefine vg0 - удалить хранилище vg0
pool-define-as --name zp1 --type zfs --target zp1 - подключить хранилище ZFS с именем zp1 и назвать его zp1
pool-autostart --pool zp1- добавили в авто запуск хранилище vg0
pool-start --pool zp1 - запустили хранилище
vol-create-as --pool zp1 --name test1 --capacity 10G - создать диск с именем test1 размером 10Gb на хранилище zp1
TRIM в VM
!!! Уменьшение диска qcow2 средствами ВМ
!!! Освобождается пустое место
!!! Выделенный размер остается прежним
Настройка TRIM
1. Выставить диск как SCSI
2. Выставить контроллер как VirtIO SCSI
3. Добавить discard='unmap'
4. Настроить TRIM в VM (напр: fstrim -a -v)
5. Запуск TRIM гостя из гипервизора
virsh domfstrim VM-NAME
virt-install — help
Общие параметры:
-n NAME, --name NAME Имя экземпляра гостя
--memory MEMORY Configure guest memory allocation. Ex:
--memory 1024 (in MiB)
--memory 512,maxmemory=1024
--memory 512,maxmemory=1024,hotplugmemorymax=2048,hotplugmemoryslots=2
--vcpus VCPUS Число виртуальных процессоров, например:
--vcpus 5
--vcpus 5,maxcpus=10,cpuset=1-4,6,8
--vcpus sockets=2,cores=4,threads=2,
--cpu CPU CPU model and features. Ex:
--cpu coreduo,+x2apic
--cpu host-passthrough
--cpu host
--metadata METADATA Конфигурация метаданных гостя, например:
--metadata name=foo,title="Мой прикольный заголовок",uuid=...
--metadata description="Мое милое длинное описание"
Параметры метода установки:
--cdrom CDROM Установочный CD-ROM
-l LOCATION, --location LOCATION
Источник установки (например,
nfs:сервер:/путь,
http://сервер/путь,
ftp://сервер/путь)
--pxe Загрузить из сети с помощью PXE
--import Создать гостевую систему на основе существующего образа диска
--livecd Рассматривать носитель как LiveCD
-x EXTRA_ARGS, --extra-args EXTRA_ARGS Дополнительные параметры для передачи ядру, загруженному из --location
--initrd-inject INITRD_INJECT Добавить файл в корневой каталог initrd из --location
--os-variant DISTRO_VARIANT Вариант устанавливаемой ОС (например, «fedora18», «rhel6», «winxp»)
--boot BOOT Параметры загрузки гостя, например:
--boot hd,cdrom,menu=on
--boot init=/sbin/init (для контейнеров)
--boot uefi (для windows)
--idmap IDMAP Включить пространство имен пользователей для контейнеров LXC, например:
--idmap uid_start=0,uid_target=1000,uid_count=10
Параметры устройства:
--disk DISK Настройка пространства хранения данных, например:
--disk size=10 (новый образ на 10 ГиБ в выбранном по умолчанию месте)
--disk /my/existing/disk,cache=none
--disk device=cdrom,bus=scsi
--disk=?
-w NETWORK, --network NETWORK
Конфигурация гостевого сетевого интерфейса, например:
--network bridge=mybr0
--network network=my_libvirt_virtual_net
--network network=mynet,model=virtio,mac=00:11...
--network none
--network help
--graphics GRAPHICS Параметры дисплея гостевой системы, например:
--graphics vnc
--graphics SPICE,port=5901,tlsport=5902
--graphics none
--graphics vnc,password=foobar,port=5910,keymap=ja
--controller CONTROLLER
Настройка контроллера, например:
--controller type=usb,model=ich9-ehci1
--input INPUT Конфигурация устройства ввода, например:
--input tablet
--input keyboard,bus=usb
--serial SERIAL Настройте последовательное устройство гостевой системы
--parallel PARALLEL Настройте параллельное устройство гостевой системы
--channel CHANNEL Настройте канал обмена данными для гостевой системы
--console CONSOLE Настройте соединение между гостем и хостом в текстовой консоли
--hostdev HOSTDEV Конфигурация физических USB/PCI и других устройств хоста для совместного использования гостевой машиной.
--filesystem FILESYSTEM Передача каталога хоста гостевой системе, например:
--filesystem /my/source/dir,/dir/in/guest
--filesystem template_name,/,type=template
--sound [SOUND] Настройте эмуляцию звукового устройства для гостевой системы
--watchdog WATCHDOG Настройте устройство слежения для гостевой системы
--video VIDEO Настройте видеоустройства гостевой системы например qlx
--smartcard SMARTCARD Настройте устройство смарт-карт, например: --smartcard mode=passthrough
--redirdev REDIRDEV Настройте устройство перенаправления, например: --redirdev usb,type=tcp,server=192.168.1.1:4000
--memballoon MEMBALLOON Настройте устройство перераспределения памяти, например: --memballoon model=virtio
--tpm TPM Конфигурация гостевого устройства TPM, например: --tpm /dev/tpm
--rng RNG Configure a guest RNG device. Ex: --rng /dev/urandom
--panic PANIC Конфигурация гостевого устройства паники, например: --panic default
--memdev MEMDEV Configure a guest memory device. Ex: --memdev dimm,target_size=1024
Параметры платформы виртуализации:
-v, --hvm Этот гость должен быть полностью виртуализированным.
-p, --paravirt Этот гость должен быть паравиртуализированным.
--container Этот гость должен быть заключен в контейнер
--virt-type HV_TYPE Имя гипервизора (kvm, qemu, xen и т.п.)
--arch ARCH Имитируемая архитектура процессора
--machine MACHINE Имитируемый тип компьютера
Прочие:
--autostart Запускать домен автоматически при запуске хоста
--transient Create a transient domain.
--wait WAIT Время ожидания завершения установки (в минутах)
--noautoconsole Не подключаться к гостевой консоли автоматически
--noreboot Не выполнять загрузку гостя после установки.
--print-xml [XMLONLY] Вывести XML-описание домена, не создавая гостевую систему.
--dry-run Выполнить установку, но не создавать устройства и гостевые системы.
--check CHECK Включать и выключать без выполнения проверки, например:
--check path_in_use=off
--check all=off
-q, --quiet Подавлять вывод (за исключением ошибок)
-d, --debug Вывести отладочные данные
virt-install примеры
!!! Все легко и просто можно выполнить в virt-manager, его не обязательно ставить на гипервизоре.
!!! порт для spice и VNC берется начиная с 5901 (то есть следующей машине будет присвоен 5902 и т.д.)
!!! По умолчанию контроллеры для виртуальных устройств будут virtio
virt-install --help - помощь
man virt-install - ищема в man жмем / и вводим EXAMPLES
virt-install --hvm --name demo --memory 500 --disk none --livecd --graphics vnc --cdrom /root/fedora7live.iso
virt-install --connect qemu:///system --virt-type kvm --name demo --memory 500 --disk size=10 --cdrom /dev/cdrom --os-variant fedora13
virt-install --connect lxc:/// --name httpd_guest --memory 512 --vcpus 2 --init /usr/bin/httpd
virt-install --connect lxc:/// --name container --memory 128 --filesystem /home/LXC,/ --filesystem /home/test,/mnt --init /bin/sh
virt-install --name test1 --vcpus 1 --memory 512 --network=default,model=e1000 --graphics spice --video qxl --disk vol=zp3/test1-disk1,cache=none,format=raw --boot hd,cdrom --cdrom=/tmp/iso/debian110.iso --sound ac97 --virt-type kvm --hvm
virt-install --name debian8 --ram 1024 --disk path=/PVE/debian8.qcow2,size=8 --vcpus 1 --os-type linux -os-variant generic --network bridge=virbr0 --graphics none --console pty,target_type=serial --location 'http://ftp.nl.debian.org/debian/dists/jessie/main/installer-amd64/' --extra-args 'console=ttyS0,115200n8 serial
virt-install --virt-type=kvm --name centos7 --ram 2048 --vcpus=2 --os-variant=rhel7 --hvm --cdrom=/tmp/CentOS-7-x86_64-DVD-1511.iso --network=bridge=br0,model=virtio --graphics vnc --disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2
virt-install --name test -r 1024 --disk path=/tmp/disk1.qcow2,size=8 --vcpus 2 --location=http://ftp.ru.debian.org/debian/dists/stable/main/installer-amd64/ --initrd-inject=/root/preseed.cfg --extra-args="auto keyboard-configuration/xkb-keymap=en" --vnc --noautoconsole --os-type Debian10 --accelerate --network bridge=br0,model=virtio --hvm
Драйверы искать тут:
https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/
https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers
https://www.linux-kvm.org/page/Virtio
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso - образ с последними драйверами virtio
Агент QEMU установка (Tools):
-------------------------------------------
Установка на госте:
# в Debian - apt-get install qemu-guest-agent
# в CentOS - yum install qemu-guest-agent
# В Windows - с диска virtio-win установить пакет qemu-ga из папки guest-agent
-------------------------------------------
Установка на хосте для гостя:
-------------------------------------------
Установка drivers windows:
0) Подключаем диск с драйверами
1) В диспетчере устройств -> устройство -> обновить драйвер -> папка с драйверами
Установка Balloon
0) Копируем balloon из virtio.iso в "c:/Program files/Balloon"
1) Запускаем CMD от Администратора
2) Создаем каталог Balloon
cd "c:\Program Files\"
mkdir Balloon
3) Переходим в каталог c:\Program Files\Balloon
cd "c:\Program Files\Balloon"
4) Ставим BLNSVR.exe
BLNSVR.exe -i
0. Команда "virsh list не показывает ВМ"
Пользователь должен быть в группе kvm и libvirtd
Проверяем:
id $USER
id user_name
Добавляем с помощью usermod:
usermod -aG kvm user_name
usermod -aG libvirtd user_name
1. Команда "virsh list не показывает ВМ"
Проверьте вывод virsh uri.
Если он возвращает qemu:///session , но вы используете соединение qemu:///system в Virtu-Manager, вы нашли причину.
Можно добавить пользователю в bahsrc:
export LIBVIRT_DEFAULT_URI="qemu:///system"
# настройки языка и локали в устанавливаемой системе. Используем американскую локаль, но указываем, что наш сервер находится в России.
d-i debian-installer/language string en
d-i debian-installer/country string RU
d-i debian-installer/locale string en_US.UTF-8
d-i localechooser/supported-locales multiselect en_US.UTF8, ru_RU.UTF8
# Настройки клавиатуры. Опять же - американская раскладка.
d-i console-keymaps-at/keymap select us
d-i keyboard-configuration/variant select American English
# Выбираем интерфейс сети, через который будет происходить установка. Для KVM-виртуалок в 99% случаев (если сами не ломали) это eth0. Если сомневаемся - ставим auto.
d-i netcfg/choose_interface select auto
# Настройки сети. Я привожу пример для ipv6, для v4 вам просто нужно будет поменять адреса.
# важный момент - если настраиваете здесь ipv6 сеть, то обязательно используйте ipv6 nameservers.
# Иначе netmask ffff:ffff:ffff:ffff:: внутри debian-installer'a превратится в 255.255.255.0 (или что-то такое) и вам придется лезть в консоль, чтобы перевбивать настройки лапками.
# если вам нужен ipv4 - то просто замените ipaddress, netmask, gateway, nameservers на корректные v4-адреса. Ничего дополнительно указывать не нужно.
# использую dhcp
d-i netcfg/dhcp_timeout string 2
d-i netcfg/disable_dhcp boolean false
#d-i netcfg/get_ipaddress string 10.0.0.1
#d-i netcfg/get_netmask string 10.0.0.255
#d-i netcfg/get_gateway string 10.0.0.1
#d-i netcfg/get_nameservers string 10.0.0.1
#d-i netcfg/confirm_static boolean true
# hostname и domain для наливаемой машинки.
# fqdn машины в данном случае будет temporary.debian.pro - если хотите, чтобы на сервере нормально работала отправка почты, то такой же fqdn должен быть прописан в PTR записи "основного" адреса машинки.
d-i netcfg/get_hostname string linux13
d-i netcfg/get_domain string b14esh.com
# Если вы выберете ftp, то mirror/country string устанавливать не нужно.
#d-i mirror/protocol string ftp
d-i mirror/country string manual
d-i mirror/http/hostname string http.us.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
# прокси внутри инсталлера нам не нужен.
d-i mirror/http/proxy string
# Настройки часового пояса - наш сервер будет жить по часикам в Москве.
# дополнительно, при установке синхронизируем время с ntp.ubuntu.com
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Moscow
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string ntp.ubuntu.com
# Настройка HDD. Внутри виртуалок нам подойдет разметка auto regular atomic (последний раздел - swap = 2xRAM, первый раздел - /, занимающий всё, что осталось после swap'a).
# Саму систему ставим на /dev/vda.
d-i partman-auto/disk string /dev/vda
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select atomic
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
# устанавливаем рутовый пароль.
# после установки его, само собой, лучше менять (preseed могут спереть).
d-i passwd/root-password password ПАРОЛЬ_ДЛЯ_РУТА
d-i passwd/root-password-again password ПАРОЛЬ_ДЛЯ_РУТА
# не создаём дополнительных пользователей, кроме рута.
#d-i passwd/make-user boolean false
# создаем пользователя
# To create a normal user account.
d-i passwd/user-fullname string ИМЯ_ПОЛЬЗОВАТЕЛЯ
d-i passwd/username string ИМЯ_ПОЛЬЗОВАТЕЛЯ
# Normal user's password, either in clear text
d-i passwd/user-password password ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ
d-i passwd/user-password-again password ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ
# остальные настройки apt'a - включаем contrib и non-free репозитории.
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
# не отправляем данные об установленных пакетах.
popularity-contest popularity-contest/participate boolean false
# ставим только ssh-сервер - никаких гномов/web-серверов и так далее.
tasksel tasksel/first multiselect ssh-server
# указываем, что нам нужны дополнительные пакеты - openssh-server (дада, я видел его строчкой выше, но хочу быть уверенным), htop и dstat.
d-i pkgsel/include string openssh-server htop dstat sudo
# ставим загрузчик
d-i grub-installer/only_debian boolean true
#пофиг ставим загрузчик
d-i grub-installer/with_other_os boolean true
# Из-за возможного наличия подключённых карт памяти USB, расположение MBR
# нельзя определить безопасно, поэтому нужно указать:
d-i grub-installer/bootdev string /dev/vda
# Для установки на первое устройство (считая, что это не карта памяти USB):
d-i grub-installer/bootdev string default
# вырубаем виртуалку.
d-i finish-install/reboot_in_progress note
d-i debian-installer/exit/poweroff boolean true
Главный вопрос… а не льзя ли получить файл pressed.cfg, да попроще….
Ответ можно. И очень просто :)
Продолжение следует...
0. Ставим debian и настраиваем его как нам нужно.
1. Немного о файлах
/var/log/installer/cdebconf - в этом каталоге в конце установки создаются , база данных программы установки debconf, по умолчанию файл разрешено читать только суперпользователю.
templates.dat - хранятся необработанные шаблоны
questions.dat — текущие значения и значения, назначенные переменным
/var/lib/cdebconf - для выяснения возможных ответов на вопросы можно использовать редактор nano для просмотра файла прямо во время процесса установки
/var/log/installer - каталог и все файлы в нём будут удалены из системы при вычистке пакета installation-report
2. Альтернативный метод — выполнить установку вручную и затем, после перезагрузки,
использовать команду debconf-get-selections из пакета debconf-utils,
чтобы сохранить базу данных debconf и базу данных программы установки cdebconf в один файл preseed.cfg
apt install debconf-utils - ставим необходимое debconf-utils
echo "#_preseed_V1" > preseed.cfg
debconf-get-selections --installer >> preseed.cfg
debconf-get-selections >> preseed.cfg
3. Файл preseed.cfg то получили теперь его надо бы отредактировать......
4. Проверяем файл preseed.cfg на валидность....
debconf-set-selections -c preseed.cfg - для проверки правильности формата файла ответов до установки
yum install git -y
cd ~
mkdir git
cd git
git clone https://github.com/FOGProject/fogproject.git
cd fogproject/bin
./installfog.sh
установка на любой linux
# из офф док
# https://fogproject.org/download - актуальные ссылки
# В настоящее время установка сервера FOG поддерживается только на компьютере под управлением Linux.
# Мы рекомендуем использовать дистрибутив с долгосрочной поддержкой, предназначенный для серверов, таких как CentOS или Debian , хотя вы можете использовать множество # других дистрибутивов.
# Мы также рекомендуем установить FOG Project внутри виртуальной машины, чтобы упростить резервное копирование и обновление.
su -
cd /opt
wget https://github.com/FOGProject/fogproject/archive/1.5.9.tar.gz
tar -xzvf 1.5.9.tar.gz
cd fogproject-1.5.9/bin
./installfog.sh
ответы на installfog.sh (у нас уже есть DHCP и DNS серверы)
What version of Linux would you like to run the installation for?
1) Redhat Based Linux (Redhat, CentOS, Mageia)
2) Debian Based Linux (Debian, Ubuntu, Kubuntu, Edubuntu)
3) Arch Linux
Choice: [2] 2 ### - Нужно выбрать дистрибутив
Starting Debian based Installation
FOG Server installation modes:
* Normal Server: (Choice N)
This is the typical installation type and
will install all FOG components for you on this
machine. Pick this option if you are unsure what to pick.
* Storage Node: (Choice S)
This install mode will only install the software required
to make this server act as a node in a storage group
More information:
http://www.fogproject.org/wiki/index.php?title=InstallationModes
What type of installation would you like to do? [N/s (Normal/Storage)] N ### - выбрали нормальный режим
We found the following interfaces on your system:
* enp1s0 - 10.0.0.28/24
Would you like to change the default network interface from enp1s0?
If you are not sure, select No. [y/N] N ### - сетевую карту оставили без изменений
Would you like to setup a router address for the DHCP server? [Y/n] Y ### - роутер определился правильно
Would you like DHCP to handle DNS? [Y/n] N - DNS не трогали
Would you like to use the FOG server for DHCP service? [y/N] N ### - сервер DHCP не подымаем
This version of FOG has internationalization support, would
you like to install the additional language packs? [y/N] N ### - Языков дополнительно не устанавливаем
Using encrypted connections is state of the art on the web and we
encourage you to enable this for your FOG server. But using HTTPS
has some implications within FOG, PXE and fog-client and you want
to read https://wiki.fogproject.org/HTTPS before you decide!
Would you like to enable secure HTTPS on your FOG server? [y/N] N ### - от https отказались
Which hostname would you like to use? Currently is: fog
Note: This hostname will be in the certificate we generate for your
FOG webserver. The hostname will only be used for this but won't be
set as a local hostname on your server!
Would you like to change it? If you are not sure, select No. [y/N] N ### - имя хоста не меняем
######################################################################
# FOG now has everything it needs for this setup, but please #
# understand that this script will overwrite any setting you may #
# have setup for services like DHCP, apache, pxe, tftp, and NFS. #
######################################################################
# It is not recommended that you install this on a production system #
# as this script modifies many of your system settings. #
######################################################################
# This script should be run by the root user. #
# It will prepend the running with sudo if root is not set #
######################################################################
# Please see our wiki for more information at: #
######################################################################
# https://wiki.fogproject.org/wiki/index.php #
######################################################################
* Here are the settings FOG will use:
* Base Linux: Debian
* Detected Linux Distribution: Debian GNU/Linux
* Interface: enp1s0
* Server IP Address: 10.0.0.28
* Server Subnet Mask: 255.255.255.0
* Server Hostname: fog
* Installation Type: Normal Server
* Internationalization: 0
* Image Storage Location: /images
* Using FOG DHCP: No
* DHCP will NOT be setup but you must setup your
| current DHCP server to use FOG for PXE services.
* On a Linux DHCP server you must set: next-server and filename
* On a Windows DHCP server you must set options 066 and 067
* Option 066/next-server is the IP of the FOG Server: (e.g. 10.0.0.28)
* Option 067/filename is the bootfile: (e.g. undionly.kpxe)
* Are you sure you wish to continue (Y/N) Y ### - Со всем согласились и продолжели установку
!!!! ВНИМАНИЕ во время установки нас попросят открыть страницу managament
!!!! Если нажмете ENTER то установка вылетит с ошибкой
* You still need to install/update your database schema.
* This can be done by opening a web browser and going to:
http://10.0.0.28/fog/management
Когда FOG установится вы увидите:
* Setup complete
You can now login to the FOG Management Portal using
the information listed below. The login information
is only if this is the first install.
This can be done by opening a web browser and going to:
http://10.0.0.28/fog/management
Default User Information
Username: fog
Password: password
yum -y install epel-release - установка репазитория epel
yum -y install kvm libvirt qemu-kvm- установка kvm и libvirt
yum -y install bridge-utils - установка ПО для bridge
systemctl start libvirtd - запустить libvirtd
systemctl enable libvirtd - добавить libvirtd в автозагрузка
Проверка:
lsmod | grep kvm - проверка поддержки kvm
virsh sysinfo - проверка подключения к KVM
Хранилище:
fdisk -l - просмотрим список физических дисков на хост-сервер
fdisk /dev/sdd - редактируем таблицу разделов диска /dev/sdd ( n - new, p - primary, w - write применить)
mkfs.ext4 /dev/sdd1 - создаем файловую систему ext4 для диска /dev/sdd1
mkdir /mnt/images - создаем каталог images
chmod 700 /mnt/images - выставляем на него права
mount -t ext4 /dev/sdd1 /mnt/images
ls -la /mnt/images -
yum install bridge-utils - установка ПО для bridge
ip a - показать интерфейсы
vi /etc/sysconfig/network-scripts/ifcfg-XXX
-------------------------------------------
ONBOOT="yes"
TYPE="Ethernet"
BOOTPROTO="none"
DEVICE="XXX"
BRIDGE="br0"
--------------------------------------------
vi /etc/sysconfig/network-scripts/ifcfg-br0
--------------------------------------------
DEVICE="br0"
TYPE="Bridge"
ONBOOT="yes"
BOOTPROTO="static"
IPADDR="192.168.1.24"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
DNS1="8.8.8.8"
DNS2="77.88.8.8"
-----------------или-------------------------
DEVICE="br0"
TYPE="Bridge"
ONBOOT="yes"
BOOTPROTO="DHCP"
--------------------------------------------
systemctl restart network - применить изменения
vi /etc/sysctl.conf
-------------------
net.ipv4.ip_forward=1
-------------------
sysctl -p /etc/sysctl.conf - применяем настройки
systemctl restart libvirtd
Создание виртуальной машины
virt-install --os-variant list - смотрим доступные варианты гостевых операционных систем
virt-install -n FirstTest \
--noautoconsole \
--network=bridge:br0 \
--ram 1024 --arch=x86_64 \
--vcpus=1 --cpu host --check-cpu \
--disk path=/kvm/images/FirstTest-disk1.img,size=16 \
--cdrom /kvm/iso/CentOS-7-x86_64-Minimal-1611.iso \
--graphics vnc,listen=0.0.0.0,password=my_password \
--os-type linux --os-variant=rhel7 --boot cdrom,hd,menu=on
где:
FirstTest — имя создаваемой машины;
noautoconsole — после создания не подключается автоматически к консоли виртуальной машины;
network — тип сети (в нашем примере сетевой мост);
ram — объем оперативной памяти, который будет выделен;
vcpus — количество виртуальных процессоров;
disk — виртуальный диск: path — путь до диска; size — его объем;
cdrom — виртуальный привод с образом системы;
graphics — параметры подключения к виртуальной машины с помощью графической консоли (в данном примере используем vnc); listen — на какой адресе принимает запросы vnc (в нашем примере на всех); password — пароль для подключения при помощи vnc;
os-variant — гостевая операционная система (весь список мы получали командой virt-install --os-variant list, в данном примере устанавливаем Reв Hat 7 / CentOS 7).
Разрешаем автостарт для созданной ВМ:
virsh autostart FirstTest
Подключение к виртуальной машине:
virsh vncdisplay FirstTest
--------------------------
:0
Это значит, что нужно к 5900 прибавить 0. Если результат команды будет :1 — 5900 + 1 = 5901 и так далее.
--------------------------
firewall-cmd --permanent --add-port=5900-5905/tcp - открываем порт на брандмауэре
Базовые команды управления ВМ:
virsh list --all - получить список созданных машин
virsh start FirstTest - включить виртуальную машину * где FirstTest — имя созданной машины.
virsh shutdown FirstTest - выключить
Управление через веб-интерфейс
0. Для его установки вводим команды:
yum install http://resources.ovirt.org/pub/yum-repo/ovirt-release41.rpm
yum install ovirt-engine
1. После разворачиваем и настраиваем портал:
engine-setup
* после запуска команды система задаст ряд вопросов, на все, кроме ввода пароля, можно ответить по умолчанию (просто нажать Enter).
После окончания установки в браузере вводим https://kvm/ovirt-engine/sso/, где kvm — имя сервера.
В открывшемся окне вводим логин admin и пароль, который создали при выполнении команды engine-setup.
После успешного входа можно управлять виртуальными машинами через веб-интерфейс.
NETWORK CONNECT ERROR IN KVM Dell KVM 1082DS-4322DS
Linux:
1. Open the file /etc/java-7-openjdk/security/java.security as superuser
2. Comment out the line with the key jdk.tls.disabledAlgorithms
3. Add this line below and save the file:
jdk.tls.disabledAlgorithms=SSLv3, EC, ECDHE, ECDH
Windows:
1. Add the KVM IP into the exception site list
Open Control Panel -> Java
In Java Control Panel -> select Security tab -> Edit Site List -> Add the KVM IP “http://X.X.X.X”
Open the file as admin: Windows -> Program Files (x86) -> Java -> jre1.8.0_51 -> lib -> security -> java.security
2. Comment out the line with the key jdk.tls.disabledAlgorithms
3. Add this line below and save the file:
jdk.tls.disabledAlgorithms=SSLv3, EC, ECDHE, ECDH
For other jre/jdk versions it should be similar. Launch jnlp file again and you will be able to see the console.
(Вместо патча для qemu/kvm лутше использовать -cpu host,kvm=off или )
https://github.com/sk1080/nvidia-kvm-patcher - патч для драйверов nvidia
https://github.com/sk1080/nvidia-kvm-patcher/blob/master/README.md - инструкция установки
В файл вм *.vmx добавить :
_____________________________
SMBIOS.reflectHost = "TRUE"
hypervisor.cpuid.v0 = FALSE"
pciHole.start = "1200"
pciHole.end = "2200"
____________________________
В конфиг esx
vi /etc/vmware/esx.conf
Powershell выполнение сторонних скриптов
PowerShell имеет несколько режимов выполнения, которые определяют, какой тип кода разрешается выполнять.
Существует 5 различных режимов выполнения:
■ Ограниченный (Restricted): Значение по умолчанию.
Блокируется выполнение любых скриптов и разрешается работа интерактивных команд.
■ Все подписанные (All Signed): Разрешено выполнение скриптов, имеющих цифровую подпись.
■ Удаленные подписанные (Remote Signed):
Локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.
■ Неограниченный (Unrestricted): Разрешено выполнение любых скриптов.
При запуске не подписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение.
■ Обходной (Bypass): Ничего не блокируется, никакие предупреждения и запросы не появляются.
По умолчанию для PowerShell используется режим «Ограниченный». В этом режиме,
PowerShell работает как интерактивная оболочка. Если вы ранее не настраивали PowerShell,
то вместо работы скрипта вы увидите сообщение об ошибке, написанное красным шрифтом как на скриншоте ниже.
Windows PowerShell.
Выполнение сценариев отключено в этой системе
Самым безопасным способом решения этой проблемы является – изменение политики выполнения на неограниченную,
запуск скрипта, и затем обратный возврат к ограниченной политике.
Set-ExecutionPolicy Unrestricted - изменения политики выполнения на неограниченную
Set-ExecutionPolicy Restricted - вернуть политику выполнения назад в ограниченный режим. Значение по умолчанию.
Set-ExecutionPolicy AllSigned - разрешено выполнение скриптов, имеющих цифровую подпись.
Set-ExecutionPolicy RemoteSigned - скрипты, подготовленные на локальном компьютере, можно запускать без ограничений,
скрипты загруженные из Интернета - только при наличии цифровой подписи.
Для выполнения выше представленных команд без подтверждения изменения, воспользуйтесь параметром
-Force, например выполните команду:
Set-ExecutionPolicy Bypass -Force
Инструкция для установки патча на инсталлятор nvidia:
!!!! для QEMU/KVM лучше использовать специальные опции
-cpu host,kvm=off или
1. Скачиваем драйвер nvidia.
Запускаем установку и дожидаемся распаковки.
Выходим из установки драйвера.
C:/NVIDIA - тут распакованы драйверы.
2. Устанавливаем WDK/DDK на windows
https://developer.microsoft.com/en-us/windows/hardware/download-kits-windows-hardware-development - WDK/DDK
4. Включить тестовый режим работы для windows
bcdedit.exe -set TESTSIGNING ON
5. Включаем powershell и выполняем скрипт
patcher.ps1 C:/NVIDIA/DisplayDriver/Version/Win10_64/International/Display.Driver
6. Ставим наточенный драйвер (In C:/NVIDIA/DisplayDriver/Version)
KVM QENU опции запуска для NVIDIA
борьба с ошибкой 43
0)Для этого в файле /etc/default/grub меняю строку
GRUB_CMDLINE_LINUX=""
на
GRUB_CMDLINE_LINUX="intel_iommu=on"
или вот так и заодно отключить драйвер nouveau (nvidia)
GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=nouveau quiet intel_iommu=on"
1)Обновляем загрузчик grub
update-grub
2) После перезагрузки проверяем
dmesg | grep -i -e iommu -e dmar
Добавление устройсва в blacklist
отключение драйвера устройства
0) lspci -vvn - выведет список устройств
lspci -vvn | grep nvidia - для NVIDIA
1) редактируем файл
nano /etc/modprobe.d/blacklist.conf
2) добавим строку
blacklist snd-hda-intel
blacklist nouveau
blacklist radeon
blacklist amdgpu
3) выполним команду
update-initramfs -u
4) Убедится какой драйвер используется
lspci -k | grep -i -A 3 vga
Поиск устройств
lspci -k | grep -i -A 3 vga
lspci | grep VGA
lspci -nn | grep 02:00.
lspci -vv | grep -i flreset+
lspci -vv | less
lspci -k -s 00:1b
find /sys/kernel/iommu_groups/ -type l
for a in /sys/kernel/iommu_groups/*; do find $a -type l; done
lsusb
KVM — добавить жесткий диск в виртуальную машину
hugepages и swap
Предположим нам нужно запустить виртуальную машину,
отдав ей 4 гигабайта. 4 гигабайта = 4096 мегабайт.
4096 мегабайт / 2 мегабайта на страницу (размер одной hugepage) = 2048 страниц.
0) Получаем информацию:
cat /proc/meminfo - получаем информацию о настройках памяти
grep "Hugepagesize:" /proc/meminfo - получаем информацию о настройках HUGEPAGES
hugeadm --explain - получаем информацию о настройках HUGEPAGES
2) Проверяем включено ли HUGEPAGES
nano /etc/default/qemu-kvm
---------------
KVM_HUGEPAGES=1
---------------
2.1) Проверяем смонтировано ли специальное устройство
mount | grep huge - должны увидеть примерно следующие (( hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M) ))
3) Настраиваем hugepages
nano /etc/sysctl.conf
---/etc/sysctl.conf---
vm.swappiness=0
vm.vfs_cache_pressure = 1000
vm.swappiness = 0
vm.nr_hugepages = 1024
kernel.shmmax = 2147483648
vm.hugetlb_shm_group = 0
vm.min_free_kbytes = 11264
---------------------
sysctl -p - применяем изменения без перезагрузки
---------------------
Команды hugeadm
hugeadm --explain
hugeadm --pool-list
hugeadm --set-recommended-shmmax
hugeadm --pool-pages-min 2M:128M
hugeadm --pool-pages-max 2M:4500M
hugeadm --set-recommended-shmmax
hugeadm --set-recommended-min_free_kbytes
Настройка сети:
brctl show - посмотреть доступные бриджи
brctl addif br5 eno1 - добавить сетевую карту eno1 в br5
включаем forward,proxy_arp и отключаем ipv6:
sysctl net.ipv4.conf.all.forwarding=1
sysctl net.ipv4.conf.all.proxy_arp=1
sysctl net.ipv6.conf.all.disable_ipv6=1
sysctl net.ipv6.conf.default.disable_ipv6=1
sysctl net.ipv6.conf.lo.disable_ipv6=1
применяем изменения без перезагрузки
sysctl -p
nano /etc/network/interfaces - редактируем конфиг сети
_____________________________
auto lo
iface lo inet loopback
auto eno1
iface eno1 inet manual
dns-nameserver 192.168.15.1
dns-nameserver 8.8.8.8
auto br5
iface br5 inet static
address 192.168.15.253
broadcast 192.168.15.255
netmask 255.255.255.0
gateway 192.168.15.1
bridge_ports eno1
bridge_stp off
____________________________
/etc/init.d/networking restart - перезапуск сети
Установка KVM на linuxmint 18
0.Проверка системы
egrep -q '^flags.*(svm|vmx)' /proc/cpuinfo && echo virtualization extensions available
egrep '(vmx|svm)' /proc/cpuinfo
kvm-ok
dmesg | grep -i -e iommu -e dmar
cat /proc/cpuinfo | grep svm
dmesg | grep AMD-Vi
lsmod | grep kvm
lsmod | grep vfio
dmesg | grep vfio
dmesg | grep VFIO
lspci -k | grep -i -A 3 vga
dmesg | grep -i vfio
1. Редактируем загрузчик
Добавляем поддержку для IOMMU (для АМД указать amd_iommu=on)
GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=nouveau quiet intel_iommu=on"
update-grub
2. Включаем vfio (нужно для успешного проброса видеокарт и т.д.)
nano /etc/initramfs-tools/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
vhost-net
Применим:
update-initramfs -u
Добавим видяшку:
nano /etc/modprobe.d/local.conf
options vfio-pci ids=10de:1185,10de:0e0a
3. Установка kvm
apt-get install qemu-kvm qemu virt-viewer libvirt-bin ovmf seabios qemu-utils hugepages bridge-utils python-virtinst libosinfo-bin
Для управления вм из GUI можно поставить:
apt-get install virt-manager
apt-get install gir1.2-spice-client-gtk-3.0 gir1.2-spice-client-gtk-2.0
apt-get install spice-client-gtk
apt-get install spice-vdagent
4. Создание виртуального жесткий диск для ВМ
Создадим образ диска размером 25GB.
qemu-img create mint-sarah.img 25G
Другим вариантом является создание образа диска в дефолтном
для Qemu формате ‘qcow2’ используя следующую команду:
qemu-img create -f qcow2 mint-sarah.img 25G - создать диск на 25G
qemu-img create -f qcow2 hdd.img 10G - создать диск на 10G
Создадим образ диска размером 50GB.
fallocate -l 50G /media/user/win.img
Создать пустой диск 4GB:
dd if=/dev/zero of=disk01.img bs=1G count=4
5. Запуск ВМ
0)Запуск ВМ QEMU
для 32-х битной системы:
qemu-system-i386 -hda mint-sarah.img -boot d -cdrom /home/chocobo/linuxmint-18-cinnamon-32-bit.iso -m 1024
для 64-х битной системы:
qemu-system-x86_64 -hda mint-sarah.img -boot d -cdrom /home/chocobo/linuxmint-18-cinnamon-64-bit.iso -m 1024
Таким образом мы запускаем ВМ с виртуальным HDD и cd-rom в котором смонтирован образ диска,
а также 1Gb оперативной памяти на борту
После установки - загрузить VM в дальнейшем можно будет так:
qemu -hda mint-sarah.img -m 640
1) Запуск ВМ KVM
kvm -hda disk01.img -cdrom os.iso -m 512 -boot d -vnc IP:1
kvm -hda disk01.img -m 512 -boot c -net nic,vlan=0,macaddr=00:16:3e:00:00:01 -net tap -nographic -daemonize
kvm -hda disk01.img -m 512 -boot c -net nic,vlan=0,macaddr=00:16:3e:00:00:01,model=rtl8139 -net tap -nographic -daemonize
kvm -m 512 -cdrom /media/Files/ISO/grml32_2011.12.iso
kvm --no-acpi -m 512 -cdrom /media/Files/ISO/grml32_2011.12.iso -soundhw ac97
kvm --no-acpi -m 512 -cdrom /media/Files/ISO/grml32_2011.12.iso -soundhw ac97 -hda hdd.img
kvm --no-acpi -m 512 -cdrom /media/Files/ISO/grml32_2011.12.iso -soundhw ac97 -hda hdd.img -boot d (загрузка с диска hdd.img)
2) Запуск/настройка ВМ virsh
Файлы конфигураций:
по умолчанию конфигурации storage хранятся тут /etc/libvirt/storage/
по умолчанию есть default.xml — хранилище на файловой системе в /var/lib/libvirt/images
Все конфигурации виртуальных машин хранятся в /etc/libvirt/qemu/
Встроенная помощь по командам:
virsh -c qemu:///system help
Посмотреть все пулы:
virsh pool-list --all
Добавляем свой pool c именем qemu-test-storage:
*-as создает хранилище аналогичное дефолту, т.е. по конфигурации такое же как в default.xml
virsh pool-define-as qemu-test-storage dir --target /home/username/qemu-test-storage/
По умолчанию пул не запущен, стартуем:
virsh pool-start qemu-test-storage
Добавляем созданный пул в автостарт:
virsh pool-autostart qemu-test-storage
Список ВМ:
virsh list -all
Создание ВМ:
virt-install --connect qemu:///system --arch=x86_64 -n vm4 -r 2048 --vcpus=1 --disk path=/dev/vg0/lv4 -c /mnt/Iso/win_7_professional_amd64.iso --vnc --noautoconsole --os-type windows --os-variant win7 --network=bridge:br0
Создание ВМ:
virt-install --connect qemu:///system --arch=x86_64 -n vm7 -r 2048 --vcpus=1 --disk path=/dev/vg0/lv7,device=disk,bus=virtio -c /mnt/Iso/win_7_professional_amd64.iso --vnc --noautoconsole --os-type windows --os-variant win7 --network=bridge:br0 --disk path=/mnt/Iso/virtio-win-1.1.11-0.iso,device=cdrom,perms=ro
Клонирование настроек vsrv1 в vsrv2:
virt-clone -o vsrv1 -n vsrv2 -f vsrv2.img --connect=qemu:///system
Редактирование/настройка ВМ:
virsh -c qemu:///system edit vm7
Посмотреть статус установленных ВМ:
virsh -c qemu:///system list --all
Запустить ВМ vsrv1:
virsh -c qemu:///system start vsrv1
Послать команду завершения работы ВМ:
virsh -c qemu:///system shutdown vsrv1
Принудительно завершить работу ВМ:
virsh -c qemu:///system destroy vsrv1
Удалить ВМ:
virsh -c qemu:///system undefine vsrv1
Список сетей:
virsh net-list --all
Узнать параметры подключения к ВМ:
virsh vncdisplay name_VM
Подключится к ВМ:
virt-viewer name_VM
Добавление пользователя в группу libvirtd :
gpasswd -a ПОЛЬЗОВАТЕЛЬ libvirtd
Варианты устанавливаемых систем:
osinfo-query os | less
Создания ВМ:
virt-install -n vsrv1 -r 384 -f vsrv1.img -s 10 -c ubuntu-9.04-server-amd64.iso --accelerate --os-type=linux --os-variant=generic26 -v --vnc -w bridge:br0
где:
-n vsrv1 — имя ВМ;
-r 384 — выделяемый объем ОЗУ для нее;
-f vsrv1.img — файл, являющийся виртуальный жестким диском для гостевой ОС;
-s 10 — объем этого диска в гигабайтах;
-c ubuntu-9.04-server-amd64.iso — образ cd дистрибутива гостевой ОС, подключаемый как виртуальный cdrom;
--accelerate --os-type=linux --os-variant=generic26 -v — ускоряем, оптимизируем ВМ для конкретной гостевой ОС и задействуем аппаратные возможности виртуализации;
--vnc — запускаем для ВМ vnc-сервер;
-w bridge:br0 — указываем использовать сетевой мост.
Создания ВМ:
virt-install --virt-type=kvm --name centos7 --ram 2048 --vcpus=2 --os-variant=rhel7 --hvm --cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-DVD-1511.iso --network=bridge=br0,model=virtio --graphics vnc --disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2
где:
sudo virt-install - создание ВМ;
--virt-type=kvm - тип виртуализации, в нашем случае kvm;
--name centos7 - имя новой машины;
--ram 2048 - количество памяти в мегабайтах;
--vcpus=2 - количество ядер процессора;
--os-variant=rhel7 - тип операционной системы;
--hvm - вид контейнера ( Может быть PV или HVM)
--cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-DVD-1511.iso - установочный образ системы;
--network=bridge=br0,model=virtio - сетевой мост, который мы настроили ранее;
--graphics vnc - способ получения доступа к графическому интерфейсу ( у нас VNC);
--disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2 - адрес нового жесткого диска для этой виртуальной машины;
Создания ВМ:
$ virt-install --connect qemu:///system -n debian_guest -r 512 --arch=i686 --vcpus=1 --os-type=linux --os-variant=debiansqueeze --disk debian-6.0.1a-i386-netinst.iso,device=cdrom --disk debian_guest.img,bus=virtio,size=2,sparse=false,format=raw --network=default,model=virtio --hvm --accelerate --vnc
Подробно разберём параметры, которые мы указали:
--connect qemu:///system URL, по которому мы подключаемся к KVM. Подключаться можно через ssh.
-n debian_guest Имя гостевой системы.
-r 512 Выделяемый объём оперативной памяти в мегабайтах.
--arch=i686 Архитектура гостевой операционной системы.
--vcpus=1 Количество виртуальных процессоров, доступных гостю.
--os-type=linux --os-variant=debianlenny Специфичные для данной операционной системы параметры.
--disk debian-6.0.1a-i386-netinst.iso,device=cdrom Загружаемся с диска, образ которого указали.
--disk debian_guest.img,bus=virtio,size=2,sparse=false,format=raw Создаём образ системы размером 2Гб, который сразу помещаем на диск (можно создать образ нулевого размера, но тогда возможна фрагментация, что получается несколько медленнее). Формат простой, можно сделать с dd файл. Драйвер диска virtio, использовать лучше virtio, чем ide: производительность их отличается если не на порядок, то в разы.
--network=default,model=virtio Сетевые настройки по умолчанию. В этом случае libvirt создаст мост, сделает dhcp сервер и выдаст через него адрес для доступа виртуальной машины.
--hvm Полная виртуализация — то есть, можно использовать собственные ядра.
--accelerate Работа через /dev/kvm.
--vnc Запускаем VNC, чтобы подключаться к текстовой консоли.
Редактирование конфига:
virsh edit name_VM - отредактировать ВМ name_VM (автопроверка конфига ВМ после редактирования)
nano /etc/libvirt/qemu/mywin.xml - (!!!автопроверки нету !!! используй virsh edit) открытие редактором ВМ mywin.xml
xed /etc/libvirt/qemu/mywin.xml - (!!!автопроверки нету !!! используй virsh edit) открытие графическим редактором ВМ mywin.xml
/etc/libvirt/ - здесь в основном хранятся конфигурационные файлы
/etc/libvirt/qemu.conf - главный конфиг
/var/lib/libvirt/ - здесь будут хранится образы жестких дисков, мгновенные снимки системы и многое другое.
/var/lib/libvirt/qemu/snapshot/ - резервные копии файлов конфигураций снапшотов
Установка:
apt-get install cpu-checker - установить программу для проверки процессора
apt-get install qemu-kvm libvirt-bin bridge-utils - установка
apt-get install virt-manager - установка virt-manager
apt-get install libosinfo-bin - установить информацию об ос
nano /etc/network/interfaces - конфиг сети
adduser user_name libvirt - добавить user_name в группу libvirtd
adduser user_name kvm - добавить user_name в группу kvm
sudo adduser `id -un` libvirtd - добавить себя в группу libvirtd
groups - группы
cat /etc/group - посмотреть составы групп
cat /etc/passwd - посмотреть пользователей
ls /etc/libvirt/qemu/ - здесь находятся конфиги ВМ
virsh --connect qemu:///system version - версия
virsh --connect qemu:///system list -
virsh -c qemu:///system list - список ВМ
virsh list --all - вывести список ВМ (вкл/выкл)
virsh pool-list --all - вывести список хранилищ
virsh list --all - вывести список всех виртуалок
virsh net-list --all - вывести список всех виртуальных сетей
virsh sysinfo - все о хосте (cpu,mem,etc..)
virsh capabilities - свойства хоста
dpkg -L ovmf - список каталогов ovmf (bios и т.д.)
Настройка сети static:
nano /etc/network/interfaces
----------------------------------------
auto lo
iface lo inet loopback
auto eno1
iface eno1 inet manual
dns-nameserver 192.168.15.1
dns-nameserver 8.8.8.8
auto br0
iface br0 inet static
address 192.168.15.253
broadcast 192.168.15.255
netmask 255.255.255.0
gateway 192.168.15.1
bridge_ports eno1
bridge_stp off
-------------------------------------
Настройка сети dhcp:
nano /etc/network/interfaces
----------------------------------------
auto lo
iface lo inet loopback
auto eno1
iface eno1 inet manual
dns-nameservers 192.168.15.1
dns-nameservers 8.8.8.8
auto br0
iface br0 inet dhcp
bridge_ports eno1
bridge_stp off
-------------------------------------
Применить настройки сети без перезагрузки:
/etc/init.d/networking restart - перезагрузка сети (пере читается конфигурация сети)
systemctl stop NetworkManager.service - остановить сеть
systemctl start NetworkManager.service - запустить (пере читается конфигурация сети)
systemctl restart networking - перезагрузка сети (пере читается конфигурация сети)
Настройка bridge:
brctl show - посмотреть доступные бриджи
brctl addif br0 eno1 - добавить сетевую карту eno1 в br0
sysctl настройка
включаем forward,proxy_arp и отключаем ipv6:
sysctl net.ipv4.conf.all.forwarding=1
sysctl net.ipv4.conf.all.proxy_arp=1
sysctl net.ipv6.conf.all.disable_ipv6=1
sysctl net.ipv6.conf.default.disable_ipv6=1
sysctl net.ipv6.conf.lo.disable_ipv6=1
можно улучшить быстродействие соединения bridge (хз и так вроде норм
sysctl net.bridge.bridge-nf-call-ip6tables = 0
sysctl net.bridge.bridge-nf-call-iptables = 0
sysctl net.bridge.bridge-nf-call-arptables = 0
nano /etc/sysctl.conf - файл sysctl
sysctl -p - применяем изменения без перезагрузки
Сеть доп:
При настройки bridge+forward сеть заработает
На хосте буду создаваться интерфейсы vnet.
В гостях будет интернет.
Команды для виртуальных сетей:
virsh net-list --all - вывести список всех виртуальных сетей
virsh net-info Network_NAME - подробная информация об ВС Network_NAME
virsh net-destroy default - остановить сеть
virsh net-start default - включить сеть
netstat -nap | grep kvm - определение номер порта VNC для виртуальной машины
Сеть виртуальная. команды:
virsh net-list --all - список виртуальных сетей
virsh net-edit default - редактирование сети по умолчанию
Отключение сети default:
ip link - посмотреть все линки
virsh net-destroy default - выключить сеть default
virsh net-autostart --disable default - отключение автозагрузки сети default
Включение сети default:
virsh net-list --all - показать все сети
virsh net-autostart default - включение автозагрузки сети default
----------------------------------------------
iptables -L -n -v - показать все правила (посмотреть текущие правила)
iptables -n -t nat -L - настройки firewall nat
iptables -n -L -v --line-numbers - для просмотра правил с номером строки
iptables -L INPUT -n -v - для просмотра INPUT правил
iptables -L OUTPUT -n -v --line-numbers - для просмотра OUTPUT правил
---------------------------------------------
Чтобы отчистить правила iptables его собственными средствами введите:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
---------------------------------------------
F: Удаление всех правил (flushing).
X: Удаление цепочки
t <таблица>: Выбрать таблицу и удалить правила.
P: Установить политику по умолчанию (например DROP, REJECT или ACCEPT).
---------------------------------------------
Задаем нужный ip для гостя:
Виртуальная сетевая карта:
на хосте:
tunctl -b -u username -t debian_guest - создадим виртуальную сетевую карту и поднимем устройство
ifconfig debian_guest 0.0.0.0 up - включим сетевушку
ip route add 10.10.10.100 dev debian_guest - cсоздадим маршрут на нужное нам устройство с нужного IP-адреса
virsh edit VM_name - редактировать настройки ВМ
---------------------------------------------
---------------------------------------------
Настройки на госте
ifconfig eth0 10.10.10.100 netmask 255.255.255.0 - задаем ip
route add default gw 10.10.10.10 - задаем маршрут
vlan:
ovs-net
console:
Я получил ошибку, когда пытался запустить консоль своей виртуальной машины:
$ virsh console alice
error: internal error: cannot find character device
Эта ошибка возникает потому, что вы не определили устройство консоли в XML-файле виртуальной машины.
Добавьте приведенные ниже строки в раздел "device" XML-файла.
VNC:
---------------------------------------------
Проверяем вкл VNC:
virsh dumpxml debian8 | grep vnc
видим
---------------------------------------------
Так выглядит настройка:
---------------------------------------------
virsh vncdisplay VMName_1 - узнаем порт VNC(для подключения используем внешний VNC клиент)
где VMName_1 — имя ВМ, :3 — номер по порядку порта, начиная с 5900,
то есть подключаться надо на порт 5903,
но в программе UltraVNC сработает и так 10.110.10.15:3
---------------------------------------------
Хранилища команды:
virsh pool-list - вывести список хранилищ
mkdir -p /mnt/temp1/datastore1 - создать каталог /mnt/temp1/datastore1 (параметр -p создаст каталог temp1 если его нету)
virsh pool-define-as Имя_пула тип - - - - "/путь" - создать пул хранилища Имя_пула
virsh pool-define-as storage dir - - - - "/mnt/temp1/datastore1" - создать пул хранилища storage
virsh pool-build Имя_хранилища - собираем хранилище Имя_хранилища
virsh pool-build storage - собираем хранилище storage
virsh pool-start storage - включаем хранилище storage
virsh pool-autostart storage - включаем авто включение хранилище storage
virsh pool-info storage - информация о хранилище (емкость и свободное место)
virsh pool-destroy storage - отключить хранилище с именем storage
virsh pool-delete storage - удалить хранилище
virsh pool-undefine storage - удалить определение(настройки) хранилища
Создание хранилища:
0) virsh pool-define-as datastore1 dir - - - - "/mnt/datastore1" - обозначаем хранилище datastore1
1) virsh pool-build datastore1 - собираем хранилище datastore1
2) virsh pool-start datastore1 - запускаем хранилище datastore1
3) virsh pool-autostart datastore1 - включаем авто загрузку хранилища datastore1
!!! Иногда короткие команды не работают
!!! пример создание пула с именем vagrant, тип директория, точка монтирования (/kvm/500gb/vagrant/)
virsh pool-define-as --name vagrant --type dir --target /kvm/500gb/vagrant/
Создание хранилища(:
0) virsh - входим в virsh
1) pool-create-as iso1 dir - - - - "/mnt/datastore2/iso1/" - создаем настройки для хранилища (XML-конфигурация пула)
2) pool-refresh iso1 - собираем хранилище
ошибка: Не удалось собрать пул iso1
ошибка: Запрошена недопустимая операция: пул «iso1» уже активен
3) pool-refresh iso1 - перечитываем конфигурацию для хранилища iso1
4) virsh pool-autostart iso1 - включаем авто включение хранилища iso1
!!! рекомендуется диск подключать по его UUID
!!! использую путь /dev/disk/by-id/UUID_DISK
fdisk -l - показать все диски и разметку
lshw -class disk -class storage - показать все устройства хранения
blkid - программа показывает UUID дисков и разделов
ls -l /dev/disk/by-id/ - показывает UUID дисков и разделов
ls -l /dev/disk/by-id/ |grep sdb - показывает UUID диска/разделов sdb
Физический диск virtio:
---------------------------------------------
- подключаем блочное устройство
- драйвер,тип данных, кеш
- источник (наш диск)
- "буква" диска и шина
- контролер
---------------------------------------------
Физический диск virtio:
---------------------------------------------
---------------------------------------------
Физический диск virtio:
---------------------------------------------
---------------------------------------------
Виртуальный диск virtio:
---------------------------------------------
контроллер virtio:
---------------------------------------------
---------------------------------------------
диск sata:
---------------------------------------------
---------------------------------------------
контролер sata:
---------------------------------------------
---------------------------------------------
Управление VM:
osinfo-query os - список поддерживаемых ос
virsh list --all - показать все доступные ВМ
virsh start VM_name - запустить ВМ
virsh reboot VM_name - перезагрузка VM
virsh shutdown VM_NAME - выключить ВМ (нажать кнопку выкл)
virsh destroy VM_name - выключить насильно ВМ (как вытащить вилку из розетки)
virsh undefine VM_name - удалить ВМ
virsh autostart VM_name - включить автозагрузку для ВМ
virsh autostart --disable VM_name - отключить автозагрузку ВМ
virsh edit VM_name - отредактировать настройки ВМ
Клонирование ВМ:
virt-clone --help - клонирует существующую виртуалку и изменяет host-sensitive данные, например, mac address
virt-clone -o VM_name -n vm_name_clone --file /mnt/tmp/vm_name_clone.img
Изменение диска:
qemu-img resize /mnt/datastore/name_disk.img -2G - уменьшить размер диска
qemu-img resize /mnt/datastore/name_disk.img +2G - увеличить размер диска
qemu-img info /mnt/datastore/name_disk.img - информация о диске
snapshot-create-as VM_name - создать снимок для VM_name
virsh snapshot-list VM_name - просмотреть снимки
virsh snapshot-revert VM_name 1360593244 - восстановить из снимка
virsh snapshot-delete VM_name 1360593244 - удалить снимок
Время хоста:
!!!! аппаратные часы идут по UTC !!!
nano /etc/syscomfig/clock - воспринимает только одно значение UTC - это UTC=no или UTC=false,
а его наличие UTC=yes или UTC=true или как таковое отсутствие (это по дефолту)
подразумевает что аппаратные часы выставлены как положено (в UTC)
hwclock -w --localtime - установить время
dpkg-reconfigure tzdata - изменить временную зону
dpkg-reconfigure locales - настроить локали (язык)
dpkg-reconfigure console-data - настройки раскладки клавиатуры
Время гостя:
virsh list -all - список ВМ
virsh dumpxml instance-xxxx | grep clock
virsh edit VM_name - редактирование файла конфигурации
virsh domtime $name_vm --now - синхронизировать время гостя с хоста
----------------------------------------
----------------------------------------
-------------------------------------------
Установка на госте:
# в Debian - apt-get install qemu-guest-agent
# в CentOS - yum install qemu-guest-agent
# В Windows - с диска virtio-win установить пакет qemu-ga из папки guest-agent
-------------------------------------------
Установка на хосте для гостя:
-------------------------------------------
Установка drivers windows:
0) Подключаем диск с драйверами
1) В диспетчере устройств -> устройство -> обновить драйвер -> папка с драйверами
Установка Balloon
0) Копируем balloon из virtio.iso в "c:/Program files/Balloon"
1) Запускаем CMD от Администратора
2) Создаем каталог Balloon
cd "c:\Program Files\"
mkdir Balloon
3) Переходим в каталог c:\Program Files\Balloon
cd "c:\Program Files\Balloon"
4) Ставим BLNSVR.exe
BLNSVR.exe -i
Backup VM без остановки:
В клиенте устанавливаем Агент QEMU!
-------------------------------------------
Информация:
virsh domblklist vm-name - узнаем имена дисков виртуальной машины
virsh list --all - вывести список всех виртуалок
vm-name - имя виртуальной машины
backup-snapshot - название снэпшота, может быть любым
vda -имя диска, для которого указываем адрес снепшота
/snapshot/vm-name-backup.qcow2 - путь и имя файла для снепшота
-------------------------------------------
На сервере:
0) virsh snapshot-create-as --domain vm-name backup-snapshot -diskspec vda,file=/snapshot/vm-name-backup.qcow2 --disk-only --atomic --quiesce --no-metadata - выполняем снимок виртуалки
1) pigz -c /virt/vm-name.qcow2 > /backup-vm/vm-name.qcow2.gz - архивируем основной файл виртуальной машины
2) virsh blockcommit vm-name vda --active --verbose --pivot - выполняем слияние снапшота + диск
3) rm /snapshot/vm-name-backup.qcow2 - удаляем снапшот
4) virsh dumpxml vm-name > /backup-vm/vm-name.xml - бэкапим настройки виртуалки
Скрипт бэкапа:
#!/bin/bash
# Дата год-месяц-день
data=`date +%Y-%m-%d`
# Папка для бэкапов
backup_dir=/backup-vm
# Список работающих VM
vm_list=`virsh list | grep running | awk '{print $2}'`
# Список VM, заданных вручную, через пробел
#vm_list=(vm-1 vm-2)
# Лог файл
logfile="/var/log/kvmbackup.log"
# Использовать это условие, если список VM задается вручную
#for activevm in "${vm_list[@]}";
# Использовать это условие, если список работающих VM берется автоматически
for activevm in $vm_list
do
mkdir -p $backup_dir/$activevm
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup $activevm" >> $logfile
# Бэкапим конфигурацию
virsh dumpxml $activevm > $backup_dir/$activevm/$activevm-$data.xml
echo "`date +"%Y-%m-%d_%H-%M-%S"` Create snapshots $activevm" >> $logfile
# Список дисков VM
disk_list=`virsh domblklist $activevm | grep vd | awk '{print $1}'`
# Адрес дисков VM
disk_path=`virsh domblklist $activevm | grep vd | awk '{print $2}'`
# Делаем снепшот диcков
virsh snapshot-create-as --domain $activevm snapshot --disk-only --atomic --quiesce --no-metadata
sleep 2
for path in $disk_path
do
echo "`date +"%Y-%m-%d_%H-%M-%S"` Create backup $activevm $path" >> $logfile
# Вычленяем имя файла из пути
filename=`basename $path`
# Бэкапим диск
pigz -c $path > $backup_dir/$activevm/$filename.gz
sleep 2
done
for disk in $disk_list
do
# Определяем путь до снепшота
snap_path=`virsh domblklist $activevm | grep $disk | awk '{print $2}'`
echo "`date +"%Y-%m-%d_%H-%M-%S"` Commit snapshot $activevm $snap_path" >> $logfile
# Объединяем снепшот
virsh blockcommit $activevm $disk --active --verbose --pivot
sleep 2
echo "`date +"%Y-%m-%d_%H-%M-%S"` Delete snapshot $activevm $snap_path" >> $logfile
# Удаляем снепшот
rm $snap_path
done
echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup $activevm" >> $logfile
done
Очистка папки с бэкапами:
Данная команда удалит все файлы старше 90 дней:
/usr/bin/find /backup-vm/*/ -type f -mtime +90 -exec rm -rf {} \;
В qemu-img версий 2.0 есть баг, из за которого при конвертации в vhdx не поддерживается динамический диск, по этому опция o subformat=dynamic работать не будет.
По этому, для поддержания динамического диска, нужно конвертировать его в vhd(vpc), и уже после в самом hyper-v преобразовывать в vhdx.
Ну и снова облом =) все сконвертировалось. при запуске вм vhd 0xc03a001a
Средствами hyper-v преобразовал vhdx ничего не получилось ошибка ...
получилось так (велосипедно):
0) qemu-img.exe convert -f qcow2 "f:\old_disk1\dc.qcow2" -O vpc g:\vhd\dc.vhd - сконвертировал
1) в hyper-v создал пустой диск g:\vhd\dcz.vhd
2) с помощью Paragon2015 проверил а монтируются ли диски (все ок )
3) с помощью paragon2015 сделал клон с g:\vhd\dc.vhd на g:\vhd\dcz.vhd
4) проверил виртуалка запустилась все работает
5) средствами hyper-v конвертировал vhdx
ну а потом попробовал вот так:
имею 3 диска.
на 1 клоны.
на 2 я конвертирую vhd
на 3 я создаю vhdx с помощью hyper-v
Используя paragon делаю клон c vhd на vhdx
!!!
Для linux нужно будет переписать загрузчик и fstab