Для работы KVM обязательно нужна аппаратная поддержка виртуализации вашего процессора. Смотрим
egrep '(vmx|svm)' /proc/cpuinfo
Если вывод есть, значит все хорошо, иначе пакет kvm даже не установится.
Для начала обновляем систему
yum update -y
Ставим необходимые пакеты
yum install kvm virt-manager libvirt -y
Запускаем сервис KVM и добавляем в автозагрузку
service libvirtd start chkconfig libvirtd --level 235 on
Смотрим загружен ли модуль KVM
lsmod | grep kvm
Должны получить что то типа
kvm_intel 53484 0 kvm 316506 1 kvm_intel
Проверяем подключение к KVM
virsh sysinfo
На сервере есть не размеченный жесткий диск. Подготовим его для работы с KVM. Для начала посмотрим имя диска в системе
fdisk -l
У меня это /dev/sdb
Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes 255 heads, 63 sectors/track, 364801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
Я создаю одну партицию на всем диске и форматирую его в ext4.
[root@kvm yum.repos.d]# fdisk /dev/sdb WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted. WARNING: The size of this disk is 3.0 TB (3000592982016 bytes). DOS partition table format can not be used on drives for volumes larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID partition table format (GPT). WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-364801, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-267349, default 267349): Using default value 267349 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
После этих манипуляций вы должны увидеть партицию.
[root@kvm yum.repos.d]# fdisk -l Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes 255 heads, 63 sectors/track, 364801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdb1 1 267349 2147480811 83 Linux
Форматируем
[root@kvm yum.repos.d]# mkfs.ext4 /dev/sdb1 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 134217728 inodes, 536870202 blocks 26843510 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 16384 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848, 512000000 Writing inode tables: 732/16384
Это занимает продолжительное время. Ждем окончания.
Есть один нюанс. Так как диску меня 3TB, то fdisk не работает как нужно. Нет он все сделал правильно, но в системе я вижу как 2TB, что меня не устраивает. Поэтому если у вас диск больше 3TB, то используем утилиту parted.
[root@kvm ~]# parted /dev/sdb GNU Parted 2.1 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel gpt Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue? Yes/No? Yes (parted) unit TB (parted) mkpart primary 0.00TB 3.00TB (parted) print Model: ATA Hitachi HUA72303 (scsi) Disk /dev/sdb: 3.00TB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 0.00TB 3.00TB 3.00TB primary (parted) quit Information: You may need to update /etc/fstab. [root@kvm ~]#
Форматируем диск
[root@kvm ~]# mkfs.ext4 /dev/sdb1 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 183148544 inodes, 732566272 blocks 36628313 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 22357 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848, 512000000, 550731776, 644972544 Writing inode tables: 807/22357
Ждем окончания форматирования.
Создаем директорию куда подмантируем диск
mkdir /opt/sdb_3TB
Монтируем диск
mount -t ext4 /dev/sdb1 /opt/sdb_3TB/
Я не буду добавлять в /etc/fstab, так как если с диском что то случится, то после перезагрузки у вас система не загрузится. И нужно будет грузиться лайв диска и изменять fstab. Поэтому я монтирую диск в файле /etc/rc.d/rc.local
/bin/mount -t ext4 /dev/sdb1 /opt/sdb_3TB/
Создаем папку где будут лежать виртуальные машины
mkdir /opt/sdb_3TB/KVM
Создаем хранилище виртуальных машин
virsh # pool-define-as Guest-Images dir - - - - "/opt/sdb_3TB/KVM" Pool Guest-Images defined
Проверяем создалось ли
virsh # pool-list --all Name State Autostart ----------------------------------------- Guest-Images inactive no
Далее
virsh # pool-build Guest-Images Pool Guest-Images built
Запускаем хранилище
virsh # pool-start Guest-Images Pool Guest-Images started
Добавляем в автозагрузку
virsh # pool-autostart Guest-Images Pool Guest-Images marked as autostarted
Проверяем
virsh # pool-info Guest-Images Name: Guest-Images UUID: cece92da-962d-19aa-a83a-39f7c42d70df State: running Persistent: yes Autostart: yes Capacity: 2.69 TiB Allocation: 200.99 MiB Available: 2.69 TiB
Настраиваем сеть.
Проверяем установлен ли в системе пакет
[root@kvm sdb_3TB]# rpm -qa | grep bridge-utils bridge-utils-1.2-10.el6.x86_64
Если нет, то ставим
yum install bridge-utils -y
У меня на сервере используется одна сетевая карточка. Настройки ее следующие
[root@kvm sdb_3TB]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" HWADDR="A0:B3:CC:EA:FF:BE" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Ethernet" UUID="c25927fe-7562-441c-80cf-d5a583ca05a2" IPADDR="10.0.1.210" NETMASK="255.255.255.0" GATEWAY="10.0.1.254"
Создаю в системе bridge интерфейс, такого вида
[root@kvm network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge BOOTPROTO=static IPADDR=10.0.1.210 NETMASK=255.255.255.0 GATEWAY=10.0.1.254 ONBOOT=yes
Интерфейс eth0 приводим к следующему виду
[root@kvm network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="none" HWADDR="A0:B3:CC:EA:FF:BE" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Ethernet" BRIDGE="br0"
Перегружаем сетевые интерфейсы
[root@kvm network-scripts]# service network restart Shutting down interface eth0: bridge br0 does not exist! [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ] Bringing up interface br0: [ OK ] [root@kvm network-scripts]#
Проверяем состояние bridge
[root@kvm network-scripts]# brctl show bridge name bridge id STP enabled interfaces br0 8000.a0b3cceaffbe no eth0
Далее перегружаем сервис
[root@kvm etc]# service libvirtd restart Stopping libvirtd daemon: [ OK ] Starting libvirtd daemon: [ OK ]
Создаем виртуальную машину
virt-install --name СentOS6 --ram 512 --arch=x86_64 \ --disk pool=Guest-Images,size=50,bus=virtio \ --network bridge=br0 --vcpus=1 \ --graphics vnc,listen=0.0.0.0,password=qwerty \ --os-type=linux --os-variant=rhel6 \ --cdrom=/opt/sdb_3TB/ISO/CentOS-6.4-x86_64-minimal.iso
Проверяем что запущена виртуальная машина
[root@kvm ~]# netstat -lnp | grep qemu tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 56556/qemu-kvm unix 2 [ ACC ] STREAM LISTENING 418920 56556/qemu-kvm /var/lib/libvirt/qemu/CentOS6.monitor
Подключиться к машине можно через VNC. Я использую TightVNC