第三章:建立虛擬機器
一、使用virt-manager建立虛擬機器
virt-manager基本使用
啟用virt-manager
虛擬機器管理主視窗
硬體細節視窗
配置虛擬機器啟動選項
附加USB裝置給虛擬機器
準備工作
USB重定向
虛擬機器圖形控制檯
新增遠端連線
顯示虛擬機器細節
效能監視
實驗
環境準備
作業系統安裝介質、ISO檔案
建立存放映象的目錄
mkdir /iso
使用SCP工具將iso檔案上傳到KVM伺服器
磁碟空間準備
新增新磁碟
#掃描新磁碟 cd /sys/class/scsi_host/ ll echo "- - -"> /sys/class/scsi_host/host0/scan echo "- - -"> /sys/class/scsi_host/host1/scan echo "- - -"> /sys/class/scsi_host/host2/scan #分割槽 fdisk /dev/sdb t 8e w #建立LV pvcreate /dev/sdb1 vgcreate vmvg /dev/sdb1 vgdisplay lvcreate -l 20479 -n lvvm1 vmvg #建立檔案系統及掛載點 mkfs.ext4 /dev/vmvg/lvvm1 mkdir /vm echo "/dev/vmvg/lvvm1 /vm ext4 defaults 0 0">>/etc/fstab mount /vm
操作日誌
[root@kvm ~]# cd /sys/class/scsi_host/ [root@kvm scsi_host]# ll total 0 lrwxrwxrwx. 1 root root 0 May 11 09:44 host0 -> ../../devices/pci0000:00/0000:00:07.1/ata1/host0/scsi_host/host0 lrwxrwxrwx. 1 root root 0 May 11 09:44 host1 -> ../../devices/pci0000:00/0000:00:07.1/ata2/host1/scsi_host/host1 lrwxrwxrwx. 1 root root 0 May 11 09:44 host2 -> ../../devices/pci0000:00/0000:00:10.0/host2/scsi_host/host2 [root@kvm scsi_host]# echo "- - -"> /sys/class/scsi_host/host0/scan [root@kvm scsi_host]# echo "- - -"> /sys/class/scsi_host/host1/scan [root@kvm scsi_host]# echo "- - -"> /sys/class/scsi_host/host2/scan [root@kvm scsi_host]# cd [root@kvm ~]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0xbcf1cff3. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): First sector (2048-167772159, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-167772159, default 167772159): Using default value 167772159 Partition 1 of type Linux and of size 80 GiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): p Disk /dev/sdb: 85.9 GB, 85899345920 bytes, 167772160 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xbcf1cff3 Device Boot Start End Blocks Id System /dev/sdb1 2048 167772159 83885056 8e Linux LVM Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@kvm ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created. [root@kvm ~]# pvscan PV /dev/sda2 VG centos lvm2 [<19.00 GiB / 0 free] PV /dev/sdb1 lvm2 [<80.00 GiB] Total: 2 [<99.00 GiB] / in use: 1 [<19.00 GiB] / in no VG: 1 [<80.00 GiB] [root@kvm ~]# vgcreate vmvg /dev/sdb1 Volume group "vmvg" successfully created [root@kvm ~]# vgscan Reading volume groups from cache. Found volume group "centos" using metadata type lvm2 Found volume group "vmvg" using metadata type lvm2 [root@kvm ~]# vgdisplay --- Volume group --- VG Name centos System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size <19.00 GiB PE Size 4.00 MiB Total PE 4863 Alloc PE / Size 4863 / <19.00 GiB Free PE / Size 0 / 0 VG UUID 1gOKuC-43TX-RF7c-E1oi-3xDB-5mvY-yKarOV --- Volume group --- VG Name vmvg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size <80.00 GiB PE Size 4.00 MiB Total PE 20479 Alloc PE / Size 0 / 0 Free PE / Size 20479 / <80.00 GiB VG UUID lXZN28-wHKO-ZPEG-fKX5-yUMU-Og9g-haup7o [root@kvm ~]# lvcreate -l 20479 -n lvvm1 vmvg Logical volume "lvvm1" created. [root@kvm ~]# vgdisplay vmvg --- Volume group --- VG Name vmvg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size <80.00 GiB PE Size 4.00 MiB Total PE 20479 Alloc PE / Size 20479 / <80.00 GiB Free PE / Size 0 / 0 VG UUID lXZN28-wHKO-ZPEG-fKX5-yUMU-Og9g-haup7o [root@kvm ~]# lvscan ACTIVE '/dev/centos/swap' [2.00 GiB] inherit ACTIVE '/dev/centos/root' [<17.00 GiB] inherit ACTIVE '/dev/vmvg/lvvm1' [<80.00 GiB] inherit [root@kvm ~]# mkfs.ext4 /dev/vmvg/lvvm1 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 5242880 inodes, 20970496 blocks 1048524 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2168455168 640 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 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done [root@kvm ~]# mkdir /vm [root@kvm ~]# echo "/dev/vmvg/lvvm1 /vm ext4 defaults 0 0">>/etc/fstab [root@kvm ~]# mount /vm [root@kvm ~]# mount sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=914616k,nr_inodes=228654,mode=755) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755) tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755) cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd) pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime) cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio) cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory) cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset) cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb) cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_prio,net_cls) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer) configfs on /sys/kernel/config type configfs (rw,relatime) /dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota) selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime) hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel) systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=31,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=14489) mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel) debugfs on /sys/kernel/debug type debugfs (rw,relatime) fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime) /dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=186304k,mode=700) gvfsd-fuse on /run/user/0/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0) /dev/sr0 on /run/media/root/CentOS 7 x86_64 type iso9660 (ro,nosuid,nodev,relatime,uid=0,gid=0,iocharset=utf8,dmode=0500,mode=0400,uhelper=udisks2) /dev/mapper/vmvg-lvvm1 on /vm type ext4 (rw,relatime,seclabel,data=ordered) [root@kvm ~]# ls /iso/ W2K3_VOL_WITH_SP2_CN_CREATE.iso
建立Windows虛擬機器
開啟Virt Machine Manager
首先開啟Xming,在命令列使用virt-manager
來開啟
或者startx
進入圖形化介面,開啟
點選建立新的虛擬機器
選擇本地安裝介質
點選瀏覽
點選瀏覽本地
在問件目錄中找到之前上傳的iso映象,點選open
下一步
配置記憶體和CPU
配置磁碟
為虛擬機器命名,配置網路
按回車
選擇檔案系統格式
回車直接進入系統
建立Linux虛擬機器
開啟Virt Machine Manager
首先開啟Xming,在命令列使用virt-manager
來開啟
或者startx
進入圖形化介面,開啟
點選建立新的虛擬機器
選擇本地安裝介質
點選瀏覽
選擇centos映象
指定儲存位置
點選左下角加號,建立新的儲存池
對儲存池命名
更改Target Path路徑
點選Volumes旁的加號來新增新的儲存卷
配置名稱、型別、大小
二、使用virt-install建立虛擬機器
命令引數參考
命令引數參考
命令引數參考
-name name∶設定虛擬機器名稱;
-M machine∶指定要模擬的主機型別,如Standard PC、ISA-only PC或Intel-Mac等
-m megs∶設定虛擬機器的RAM大小
-cpu model∶設定CPU模型,如coreduo、qemu64等
-smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]∶設定模擬的SMP架構中CPU的個數等、每個CPU的核心數及CPU的socket數目等;PC機上最多可以模擬255顆CPU
maxcpus用於指定熱插入的CPU個數上限
-numa opts∶指定模擬多節點的numa裝置
-fda file:
-fdb file∶使用指定檔案(file)作為軟盤映象,file為/dev/fd0表示使用物理軟碟機
-hda file -hdb file -hdc file
-hdd file∶使用指定file作為硬碟映象
-cdrom file∶使用指定file作為CD-ROM映象,需要注意的是-cdrom和-hdc不能同時使用;將file 指定為/dev/cdrom可以直接使用物理光碟機
-drive option[,option[,option[]]]∶定義一個硬碟裝置;可用子選項有很多
file=/path/to/somefile∶硬體映像檔案路徑
if=interface∶指定硬碟裝置所連線的介面型別,即控制器型別,如ide、scsi、sd、mtd、floppy、pflash及virtio等
index=index∶設定同一種控制器型別中不同裝置的索引號,即標識號
media=media∶定義介質型別為硬碟(disk)還是光碟(cdrom)
snapshot=snapshot∶指定當前硬碟裝置是否支援快照功能∶ on或off
cache=cache∶定義如何使用物理機快取來訪問塊資料,其可用值有none、writeback、unsafe 和writethrough四個
format=format∶指定映像檔案的格式,具體格式可參見qemu-img命令
-boot [order=drives][,once=drives][,menu=onloff]∶定義啟動裝置的引導次序,每種裝置使用一個字元表示;不同的架構所支援的裝置及其表示字元不盡相同,在x86PC架構上,a、b表示軟碟機、c表示第一塊硬碟,d表示第一個光碟機裝置,n-p表示網路介面卡;預設為硬碟裝置
-boot order=dc,once=d
-net nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]∶建立一個新的網絡卡裝置並連線至vlan n中;macaddr用於為其指定MAC地址,name用幹指定一個在監控時顯示的網上裝置名稱∶emu可以模擬多個型別的網絡卡裝置
-net tap[,van=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]∶通過物理機的TAP網路介面連線至vlan n中,使用script=file指定的指令碼(預設為/etc/qemu-ifup)來配置當前網路介面,並使用downscript=file指定的指令碼(預設為/etc/qemu-ifdown)來撤消介面配置;使用script=no和downscript=no可分別用來禁止執行指令碼
-net user[,option][,option][...]∶在使用者模式配置網路棧,其不依賴於管理許可權;有效選項有∶
van=n∶連線至vlan n,預設n=0
name=name∶指定介面的顯示名稱,常用於監控模式中
net=addr[/mask]∶設定GuestOS可見的IP網路,掩碼可選,預設為10.0.2.0/8
host=addr∶ 指定GuestOS中看到的物理機的IP地址,預設為指定網路中的第二個,即x.x.x.2
dhcpstart=addr∶ 指定DHCP服務地址池中16個地址的起始IP,預設為第16個至第31個,即x.x.x.I6-x.x.x.31
dns=addr∶指定GuestOS可見的dns伺服器地址;預設為GuestOS網路中的第三個地址,即xx.x.3
tftp=dir∶啟用內建的tftp伺服器,並使用指定的dir作為tftp伺服器的預設根目錄
bootfile=file∶BOOTP檔名稱,用於實現網路引導GuestOS;如∶qemu-hda linux.img-boot n -net user,tftp=/tftpserver/pub,bootfile=/pxelinux.0
通過本地ISO檔案來進行安裝
qemu-img create -f qcow2 vm1-disk1.qcow2 10G
virt-install \
--name=vm1 \
--disk path=/vm/vm1-disk1.qcow2 \
--vcpus=1 --ram=1024 \
--cdrom=/iso/CentOS-6.10-i386-minimal.iso \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--os-type=linux \
--os-variant=rhel6
操作日誌
[root@kvm ~]# cd /vm/
[root@kvm vm]# ll
total 16
drwx------. 2 root root 16384 May 11 13:50 lost+found
[root@kvm vm]# qemu-img create -f qcow2 vm1-disk1.qcow2 10G
Formatting 'vm1-disk1.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off
[root@kvm vm]# ll
total 212
drwx------. 2 root root 16384 May 11 13:50 lost+found
-rw-r--r--. 1 root root 197120 May 11 19:46 vm1-disk1.qcow2
[root@kvm vm]# virt-install \
> --name=vm1 \
> --disk path=/vm/vm1-disk1.qcow2 \
> --vcpus=1 --ram=1024 \
> --cdrom=/iso/CentOS-6.10-i386-minimal.iso \
> --network network=default \
> --graphics vnc,listen=0.0.0.0 \
> --os-type=linux \
> --os-variant=rhel6
Starting install...
Domain creation completed.
Restarting guest.
考察新建立的虛擬機器
[root@kvm ~]# virsh
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh # list --all
Id Name State
----------------------------------------------------
2 vm1 running
virsh # dominfo vm1
Id: 2
Name: vm1
UUID: c021a8a5-4578-4a6f-b09f-d3eb92f74cd1
OS Type: hvm
State: running
CPU(s): 1
CPU time: 14.6s
Max memory: 1048576 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: selinux
Security DOI: 0
Security label: system_u:system_r:svirt_t:s0:c566,c881 (enforcing)
virsh # edit vm1
Kickstart安裝
Kickstart是一種無人值守的安裝方式
如果在安裝過程中出現要填寫引數的情況,安裝程式首先會去查詢Kickstart生成的檔案,如果找到合適的引數,就採用所找到的引數;如果沒有找到合適的引數,便需要安裝者手工干預了
網路安裝
我們也可以指定安裝介質檔案位置網路上
--location=http://
如果Web伺服器是Windows,有可能出現錯誤
PXE安裝
三、半虛擬化驅動virtio
使用半虛擬化驅動virtio的目的
為了提高記憶體、硬碟、網路的效能,需要支援半虛擬化
效能比較
KVM VirtIO paravirtualized drivers: why they matter
半虛擬化裝置統一介面
通過統一的介面virti以支援的多種硬體裝置
不同的虛擬裝置和不同的虛擬機器可以有不同的前端驅動
不同的硬體裝置可以有不同的後端驅動
兩者之間的互動遵循virtio的標準
獲得virtio驅動程式
紅帽RHEL 4.8之後自動載入和安裝virtio驅動
Windows作業系統需要額外安裝virtio的驅動
方法1∶從RHN上下載
如果您有RHN訂閱,可以從以下位置下載virtio-win包∶
https://access.redhat.com/downloads/
方法2∶從社群獲得
http://www.linux-kvm.org/page/Downloads
實驗1∶在已經安裝好的Windows虛擬機器上安裝virtio驅動
通過嚮導建立的VM,預設磁碟為IDE介面、網絡卡為rtl8139,即全虛擬化驅動。
一定要按以下步驟來進行操作,否則會出現藍屏錯誤
關閉虛擬機器。編輯虛擬機器的配置,新增一個很小的virtio硬碟、一塊virtio網絡卡
虛擬光碟機載入上傳的的ISO檔案
啟動虛擬機器。登入後,Windows會發現新的硬體
安裝時使用手動搜尋驅動,不同的作業系統路徑如下
最後,安裝其他驅動程式。如Balloon、串列埠等
實驗2∶安裝Windows作業系統時安裝virtio驅動程式
Windows 2008及之後作業系統,在安裝時指定驅動程式的位置
四、QEMU Guest Agent和SPICE Agent
QEMU guest agent安裝與配置
如果VM中安裝了QEMU guest agent,Host就可以使用libivrt向VM 傳送命令,例如"凍結"、"釋放"檔案系統,虛擬CPU的熱新增及移除等。
RHEL/CentOS 7中有相應的安裝包。qemu-guest-agent-xxx.rpm
Windows需要手工安裝
通過libvirt來使用QEMU guest agent
安裝了QEMU guest agent後,對libvirt命令有如下的增強
virsh shutdown --mode=agent 比--mode=acpi更加安全地關閉作業系統
virsh snapshot-create -quiesce 在建立快照之前面,將快取的內容刷入到磁碟
virsh domfsfreeze 靜默檔案系統
virsh dimfsthaw 恢復靜默檔案系統
virsh domfstrim 讓虛擬機器trim檔案系統
virsh domtime 獲得虛擬機器的時間
virsh setvcpus 配置虛擬機器的vCPU
virsh domifaddr --source agent 查詢虛擬機器的IP地址
virsh domfsinfo 顯示虛擬機器的檔案系統列表
virsh set-user-password 設定虛擬機器使用者的密碼
SPICE agent安裝與配置
通過在VM作業系統中安裝SPICE client,SPICE agent使virt-manager等圖形應用程式更加流暢。例如∶
在virt-manager中調整視窗尺寸,SPICE agent自動調整X會話的解析度
在Host與Guest之間複製與貼上
防止滑鼠拖尾等
下載∶