/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 {} \;