1. 程式人生 > 其它 >第三章:建立虛擬機器

第三章:建立虛擬機器

一、使用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之間複製與貼上

防止滑鼠拖尾等

下載∶

http://www.spice-space.org/download/