kvm虛擬化部署及基本命令

KVM特色node


KVM必須在具有Intel VT或AMD-V功能的x86平臺上運行。KVM包含一個爲處理器提供底層虛擬化,可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko)。使用一個通過修改的QEMU(qemu-kvm),做爲虛擬機上層控制和界面。python


因爲KVM僅是一個簡單的虛擬化模塊,因此它的內存管理沒有自我實現,需藉助於Linux內核實現內存管理。KVM可以使用Linux所支持的任何存儲,在驅動程序的實現上,直接藉助於Linux內核來驅動任何硬件。在性能上KVM繼承了Linux很好的性能和伸縮性,在虛擬化性能方面,已經達到非虛擬化原生環境95%左右的性能(官方數據)。KVM拓展性也很是好,客戶機和宿主機均可以支持很是多的CPU數量和很是大的內存,能夠過載使用CPU和內存,還可藉助KSM技術實現對內存的過量使用,且保證性能依舊很是不錯。linux


KVM架構ios

blob.png


檢測是否支持虛擬化nginx

[root@lab01 ~]# egrep --color "(vmx|svm)" /proc/cpuinfo
#若是含有vmx或者svm字樣,則表示硬件支持虛擬化,vmx表明Intel,svm表明AMD

安裝網橋工具,建立橋接網卡
vim

[root@lab01 ~]# yum -y install bridge-utils
[root@lab01 ~]# brctl addbr br0
[root@lab01 ~]# cd /etc/sysconfig/network-scripts
[root@lab01 network-scripts]# cp ifcfg-eth0 ifcfg-br0
[root@lab01 network-scripts]# vim ifcfg-br0

DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.11
NETMASK=255.255.255.0
DNS2=202.106.196.115
GATEWAY=192.168.1.1
DNS1=202.106.0.20
IPV6INIT=no
USERCTL=no

[root@lab01 network-scripts]# vim ifcfg-eth0 

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
BRIDGE=br0
IPV6INIT=no
USERCTL=no

[root@lab01 network-scripts]# service network restart
Shutting down interface eth0:  device eth0 is not a slave of br0
                                                           [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:                                [  OK  ]
Bringing up interface br0:  Determining if ip address 192.168.1.11 is already in use for device br0...
                                                           [  OK  ]

加載KVM模塊
windows

[root@lab01 ~]# modprobe kvm
[root@lab01 ~]# modprobe kvm-intel
[root@lab01 ~]# lsmod | grep kvm
kvm_intel              55624  0 
kvm                   341551  1 kvm_intel

安裝QEMU-KVM管理軟件centos

[root@lab01 ~]# yum -y install qemu-kvm qemu-kvm-tools
[root@lab01 ~]# ln -sv /usr/libexec/qemu-kvm /usr/bin
`/usr/bin/qemu-kvm' -> `/usr/libexec/qemu-kvm'

qemu-kvm標準選項緩存

-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用於指定熱插入的CP
U個數上限;
-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/cdr
om能夠直接使用物理光驅;
-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=on|off]:定義啓動設備的引導次序,每種設備使用一個字符表示
;不一樣的架構所支持的設備及其表示字符不盡相同,在x86 PC架構上,a、b表示軟驅、c表示第一塊硬盤,d表示
第一個光驅設備,n-p表示網絡適配器;默認爲硬盤設備;
-boot order=dc,once=d

qemu-kvm顯示選項bash

-nographic:默認狀況下,qemu使用SDL來顯示VGA輸出;而此選項用於禁止圖形接口,此時,qemu相似一個簡單的
命令行程序,其仿真串口設備將被重定向到控制檯;
-curses:禁止圖形接口,並使用curses/ncurses做爲交互接口;
-alt-grab:使用Ctrl+Alt+Shift組合鍵釋放鼠標;
-ctrl-grab:使用右Ctrl鍵釋放鼠標;
-sdl:啓用SDL;
-spice option[,option[,...]]:啓用spice遠程桌面協議;其有許多子選項,具體請參照qemu-kvm的手冊;
-vga type:指定要仿真的VGA接口類型,常見類型有:
cirrus:Cirrus Logic GD5446顯示卡;
std:帶有Bochs VBI擴展的標準VGA顯示卡;
vmware:VMWare SVGA-II兼容的顯示適配器;
qxl:QXL半虛擬化顯示卡;與VGA兼容;在Guest中安裝qxl驅動後能以很好的方式工做,在使用spice協議時推薦
使用此類型;
none:禁用VGA卡;
-vnc display[,option[,option[,...]]]:默認狀況下,qemu使用SDL顯示VGA輸出;使用-vnc選項,可讓qemu
監聽在VNC上,並將VGA輸出重定向至VNC會話;使用此選項時,必須使用-k選項指定鍵盤佈局類型;其有許多子選
項,具體請參照qemu-kvm的手冊;

	display:
		(1)host:N
			172.16.100.7:1, 監聽於172.16.100.7主的5900+N的端口上
		(2) unix:/path/to/socket_file
		(3) none

	options:
		password: 鏈接時須要驗正密碼;設定密碼經過monitor接口使用change
		reverse: 「反向」鏈接至某處於監聽狀態的vncview上;

	-monitor stdio:表示在標準輸入輸出上顯示monitor界面
	-nographic
		Ctrl-a, c: 在console和monitor之間切換
		Ctrl-a, h: 顯示幫助信息

qemu-kvm網絡屬性相關選項

-net nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]:建立一個新的網卡
設備並鏈接至vlan n中;macaddr用於爲其指定MAC地址,name用於指定一個在監控時顯示的網上設備名稱;emu可
以模擬多個類型的網卡設備
-net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]:經過物理機的TA
P網絡接口鏈接至vlan n中,使用script=file指定的腳本(默認爲/etc/qemu-ifup)來配置當前網絡接口,並使用d
ownscript=file指定的腳本(默認爲/etc/qemu-ifdown)來撤消接口配置;使用script=no和downscript=no可分別
用來禁止執行腳本;
-net user[,option][,option][,...]:在用戶模式配置網絡棧,其不依賴於管理權限;有效選項有:
  vlan=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.16-x.x.x.31;
  dns=addr:指定GuestOS可見的dns服務器地址;默認爲GuestOS網絡中的第三個地址,即x.x.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



tap: 二層虛擬通道 
tun:三層虛擬通道

qemu-kvm的其它的用到的參數:

動態遷移時用到的選項:-incoming tcp:0:PORT
讓qemu-kvm進程運行於後臺:-daemonize
開啓USB總線:-usb 
	GuestOS爲Windows時,-usb -usbdevice tablet  用於實現鼠標定位
打開KVM的支持:qemu-kvm默認就啓用了此選項
	-enable-kvm
打聲音設備:-soundhw

設定iscsi存儲設備:
	-iscsi [user=USERNAME][,password=PASSWORD][,initiator-name=iqn]
	經過URL指定使用的iscsi設備
	iscsi://<target_ip>[:port]/<target_iqn>/<lun>

	# qemu-kvm  -iscsi initiator-name=    -drive file=iscsi://tgt.magedu.com/iqn.2014-05.com.magedu.tgt1/1

指定使用的bios文件:
	-bios /path/to/some_bios_program

使用外部內核及ramdisk文件:
	-kernel
	-initrd
	-append: 向內核傳遞的參數列表

使用qemu-img管理磁盤映像

qemu-img是qemu用來實現磁盤映像管理的工具組件,其有許多子命令,分別用於實現不一樣的管理功能,而每個子

命令也都有一系列不一樣的選項。其使用語法格式爲「qemu-img  subcommand  [options]」,支持的子命令以下。

create:建立一個新的磁盤映像文件;
check:檢查磁盤映像文件中的錯誤;
convert:轉換磁盤映像的格式;
info:顯示指定磁盤映像的信息;
snapshot:管理磁盤映像的快照;
commit:提交磁盤映像的全部改變;
rbase:基於某磁盤映像建立新的映像文件;
resize:增大或縮減磁盤映像文件的大小;

使用create子命令建立磁盤映像的命令格式爲「create [-f fmt] [-o options] filename [size]」,例以下面
的命令建立了一個格式爲qcow2的50G的磁盤映像文件。
[root@lab01 ~]# qemu-img create -f qcow2 /kvm/p_w_picpaths/centos/hz***.img -o size=50G,preallocation="me
tadata"
Formatting '/kvm/p_w_picpaths/centos/hz***.img', fmt=qcow2 size=53687091200 encryption=off cluster_size=6
5536 preallocation='metadata' 
[root@lab01 ~]# ll -h /kvm/p_w_picpaths/centos/hz***.img 
-rw-r--r--. 1 root root 51G Dec 19 16:33 /kvm/p_w_picpaths/centos/hz***.img
#-f:指定虛擬磁盤文件格式 -o:指定選項


若是咱們加入網卡設備,則須要使用系統啓動後自動橋接網絡到br0上,能夠經過腳本實現和中止系統時橋接網絡和刪除橋接的自動執行操做

[root@lab01 ~]# mkdir /kvm/script
[root@lab01 ~]# vim /kvm/script/qemu-ifup
 
#!/bin/bash
 
switch=br0
   
if [ -n "$1" ]; then
    ip link set $1 up
    sleep 1
    brctl addif $switch $1
    exit 0
else
    echo "Error: No Interface."
    exit 1
fi
 
 
[root@lab01 ~]# vim /kvm/script/qemu-ifdown
 
 #!/bin/bash
 
switch=br0
   
if [ -n "$1" ];then
    brctl delif $switch $1
    ip link set $1 down
    exit 0
else
    echo "Error: No Interface."
    exit 1
fi
 
[root@lab01 ~]# chmod -R +x /kvm/script/

安裝虛擬機

[root@lab01 ~]# yum -y install tigervnc tigervnc-server
[root@lab01 ~]# qemu-kvm -name "hz***" -m 1024 -smp 2 -drive file=/kvm/p_w_picpaths/centos/hz***.img,medi
a=disk,format=qcow2,if=virtio,index=0 -net nic,model=virtio -net tap,ifname=vnet0,script=/kvm/scrip
t/qemu-ifup -usb -usbdevice tablet -drive file=/kvm/CentOS-6.7-x86_64-bin-DVD1.iso,media=cdrom -boo
t order=dc,once=d -vnc :1
sleep: missing operand
Try `sleep --help' for more information.
####其中 -usb -usbdevice tablet:用於鼠標定位,-vnc :1表示監控0.0.0.0:5901端口上

blob.png

如今能夠安裝系統了,看看腳本有沒有生效

[root@lab01 kvm]# ifconfig vnet0
vnet0     Link encap:Ethernet  HWaddr 2A:7A:60:E7:54:C1  
          inet6 addr: fe80::287a:60ff:fee7:54c1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

腳本已經生效,剩下安裝過程,能夠本身測試。

安裝完畢效果

blob.png


基於Libvirt實現虛擬機管理


由於對進程管理很是麻煩,Redhat發佈了一個開源項目libvirt,libvirt有API,也有一套命令行工具,能夠完成對虛擬機的管理,大多數的管理平臺都是經過libvirt來完成對KVM虛擬機管理的,下面咱們來介紹一下基於libvirt實現虛擬機的管理


安裝所需組件

[root@lab01 ~]# yum -y install libvirt virt-manager virt-viewer python-virtinst
##若是不肯定有哪些包須要使用,能夠直接安裝包組,先找出來
[root@lab01 ~]# yum grouplist | grep Virtualization
   Virtualization
   Virtualization Client
   Virtualization Platform
   Virtualization Tools
[root@lab01 ~]# yum -y groupinstall "Virtualization,Virtualization Client,Virtualization Platform,V
irtualization Tools"

啓動服務

[root@lab01 ~]# service libvirtd start
Starting libvirtd daemon:                                  [  OK  ]

#使用libvirt建立網橋無需再手動修改配置文件,一條命令便可解決
# virsh iface-bridge eth0 br0

使用virt-install建立虛擬機並安裝GuestOS

virt-install是一個命令行工具,它可以爲KVM,Xen或其它支持Libvirt API的hypervisor建立虛擬機並完成GuestOS安裝,此外,它可以基於串行控制檯、VNC或SDL支持文本或圖形安裝界面。安裝過程可使用本地的安裝介質如CDROM,也能夠經過網絡方式如NFS.HTTP或FTP服務實現,對於經過網絡安裝的方式,virt-install能夠自動加載必要的文件以啓動安裝過程而無需額外提供引導工具。固然,virt-install也支持PXE方式的安裝過程,也可以直接使用現有的磁盤映像直接啓動安裝過程。


virt-install命令有不少選項,這些選項大致能夠分爲下面幾大類,同時對每類中的經常使用選項也作出簡單說明。

#通常選項:指定虛擬機的名稱、內存大小、VCPU個數及特性等
-n NAME, --name=NAME:虛擬機名稱,需全局唯一;
-r MEMORY, --ram=MEMORY:虛擬機內在大小,單位爲MB;
--vcpus=VCPUS[,maxvcpus=MAX][,sockets=#][,cores=#][,threads=#]:VCPU個數及相關配置;
--cpu=CPU:CPU模式及特性,如coreduo等;可使用qemu-kvm -cpu ?來獲取支持的CPU模式;
安裝方法:指定安裝方法、GuestOS類型等;
-c CDROM, --cdrom=CDROM:光盤安裝介質;
-l LOCATION, --location=LOCATION:安裝源URL,支持FTP、HTTP及NFS等,如ftp://172.16.0.1/pub;
--pxe:基於PXE完成安裝;
--livecd: 把光盤看成LiveCD;
--os-type=DISTRO_TYPE:操做系統類型,如linux、unix或windows等;
--os-variant=DISTRO_VARIANT:某類型操做系統的變體,如rhel五、fedora8等;
-x EXTRA, --extra-args=EXTRA:根據--location指定的方式安裝GuestOS時,用於傳遞給內核的額外
選項,例如指定kickstart文件的位置,--extra-args "ks=http://172.16.0.1/class.cfg"
--boot=BOOTOPTS:指定安裝過程完成後的配置選項,如指定引導設備次序、使用指定的而非安裝的ke
rnel/initrd來引導系統啓動等 ;例如:
--boot  cdrom,hd,network:指定引導次序;
--boot kernel=KERNEL,initrd=INITRD,kernel_args=」console=/dev/ttyS0」:指定啓動系統的內核及initrd文件;
#存儲配置:指定存儲類型、位置及屬性等;
--disk=DISKOPTS:指定存儲設備及其屬性;格式爲--disk /some/storage/path,opt1=val1,opt2=val2等;
經常使用的選項有:
    device:設備類型,如cdrom、disk或floppy等,默認爲disk;
    bus:磁盤總結類型,其值能夠爲ide、scsi、usb、virtio或xen;
    perms:訪問權限,如rw、ro或sh(共享的可讀寫),默認爲rw;
    size:新建磁盤映像的大小,單位爲GB;
    cache:緩存模型,其值有none、writethrouth(緩存讀)及writeback(緩存讀寫);
    format:磁盤映像格式,如raw、qcow二、vmdk等;
    sparse:磁盤映像使用稀疏格式,即不當即分配指定大小的空間;
    --nodisks:不使用本地磁盤,在LiveCD模式中經常使用;
#網絡配置:指定網絡接口的網絡類型及接口屬性如MAC地址、驅動模式等;
-w NETWORK, --network=NETWORK,opt1=val1,opt2=val2:將虛擬機連入宿主機的網絡中,其中NETWORK能夠爲:
    bridge=BRIDGE:鏈接至名爲「BRIDEG」的橋設備;
    network=NAME:鏈接至名爲「NAME」的網絡;
其它經常使用的選項還有:
    model:GuestOS中看到的網絡設備型號,如e1000、rtl8139或virtio等;
    mac:固定的MAC地址;省略此選項時將使用隨機地址
--nonetworks:虛擬機不使用網絡功能;
#圖形配置:定義虛擬機顯示功能相關的配置,如VNC相關配置;
--graphics TYPE,opt1=val1,opt2=val2;指定圖形顯示相關的配置,此選項不會配置任何顯示硬件(如顯卡),
而是僅指定虛擬機啓動後對其進行訪問的接口;
TYPE:指定顯示類型,能夠爲vnc、sd一、spice或none等,默認爲vnc;
port:TYPE爲vnc或spice時其監聽的端口;
listen:TYPE爲vnc或spice時所監聽的IP地址,默認爲127.0.0.1,能夠經過修改/etc/libvirt/qemu.conf定義新的默認值;
password:TYPE爲vnc或spice時,爲遠程訪問監聽的服務進指定認證密碼;
--noautoconsole:禁止自動鏈接至虛擬機的控制檯;
設備選項:指定文本控制檯、聲音設備、串行接口、並行接口、顯示接口等;
--serial=CHAROPTS:附加一個串行設備至當前虛擬機,根據設備類型的不一樣,可使用不一樣的選項,
格式爲「--serial type,opt1=val1,opt2=val2,...」
--serial pty:建立僞終端;
--serial dev,path=HOSTPATH:附加主機設備至此虛擬機;
--video=VIDEO:指定顯卡設備模型,可用取值爲cirrus、vga、qxl或vmvga;
#虛擬化平臺:虛擬化模型(hvm或paravirt)、模擬的CPU平臺類型、模擬的主機類型、hypervisor類型(如kvm
、xen或qemu等)以及當前虛擬機的UUID等;
-v, --hvm:當物理機同時支持徹底虛擬化和半虛擬化時,指定使用徹底虛擬化;
-p, --paravirt:指定使用半虛擬化;
--virt-type:使用的hypervisor,如kvm、qemu、xen等;全部可用值可使用’virsh capabilities’命令獲取;
#其它:
--autostart:指定虛擬機是否在物理啓動後自動啓動;
--print-xml:若是虛擬機不須要安裝過程(--import、--boot),則顯示生成的XML而不是建立此虛擬
機;默認狀況下,此選項仍會建立磁盤映像;
--force:禁止命令進入交互式模式,若是有須要回答yes或no選項,則自動回答爲yes;
--dry-run:執行建立虛擬機的整個過程,但不真正建立虛擬機、改變主機上的設備配置信息及將其創
建的需求通知給libvirt;
-d, --debug:顯示debug信息;

儘管virt-install命令有着相似上述的衆多選項,但實際使用中,其必須提供的選項僅包括--name、--ram、--disk(也但是--nodisks)及安裝過程相關的選項。此外,有時還須要使用括--connect=CONNCT選項來指定鏈接至一個非默認的hypervisor。


下面這個示例建立一個名爲rhel5的虛擬機,其hypervisor爲KVM,內存大小爲512MB,磁盤爲8G的映像文件/var/lib/libvirt/p_w_picpaths/rhel5.8.img,經過boot.iso光盤鏡像來引導啓動安裝過程。

# virt-install \
   --connect qemu:///system \
   --virt-type kvm \
   --name rhel5 \
   --ram 512 \
   --disk path=/var/lib/libvirt/p_w_picpaths/rhel5.img,size=8 \
   --graphics vnc \
   --cdrom /tmp/boot.iso \
   --os-variant rhel5

下面的示例將建立一個名爲rhel6的虛擬機,其有兩個虛擬CPU,安裝方法爲FTP,並指定了ks文件的位置,磁盤映像

文件爲稀疏格式,鏈接至物理主機上的名爲brnet0的橋接網絡:

# virt-install \
    --connect qemu:///system \
    --virt-type kvm \
    --name rhel6 \
    --ram 1024 \
    --vcpus 2 \
    --network bridge=brnet0 \
    --disk path=/VMs/p_w_picpaths/rhel6.img,size=120,sparse \
    --location ftp://172.16.0.1/rhel6/dvd \
    --extra_args 「ks=http://172.16.0.1/rhel6.cfg」 \
    --os-variant rhel6 \
    --force

下面的示例將建立一個名爲rhel5.8的虛擬機,磁盤映像文件爲稀疏模式的格式爲qcow2且總線類型爲virtio,安裝

過程不啓動圖形界面(--nographics),但會啓動一個串行終端將安裝過程以字符形式顯示在當前文本模式下,虛擬機顯卡類型爲cirrus:

# virt-install \
--connect qemu:///system \
--virt-type kvm \ 
--name rhel5.8 \ 
--vcpus 2,maxvcpus=4 \
--ram 512 \ 
--disk path=/VMs/p_w_picpaths/rhel5.8.img,size=120,format=qcow2,bus=virtio,sparse \ 
--network bridge=brnet0,model=virtio
--nographics \
--location ftp://172.16.0.1/pub \ 
--extra-args "ks=http://172.16.0.1/class.cfg  console=ttyS0  serial" \
--os-variant rhel5 \
--force  \
--video=cirrus

下面的示例則利用已經存在的磁盤映像文件(已經有安裝好的系統)建立一個名爲rhel5.8的虛擬機:

# virt-install \
    --name rhel5.8
    --ram 512
    --disk /VMs/rhel5.8.img
    --import

每一個虛擬機建立後,其配置信息保存在/etc/libvirt/qemu目錄中,文件名與虛擬機相同,格式爲XML。



下面我在建立一個自定義的:

[root@lab01 ~]# virt-install --cpu=host -n hzcf*** --vcpus=2 -r 1024 \
   -c /kvm/CentOS-6.7-x86_64-bin-DVD1.iso \
   --disk path=/kvm/p_w_picpaths/centos/hz***.qcow2,bus=virtio,size=50,format=qcow2,sparse \
   --network bridge=br0,model=virtio --force 
   --graphics vnc,listen=0.0.0.0,port=5902

blob.png



下面總結一下virsh的幾個經常使用命令:

virt-install:建立虛擬機,並安裝OS;也可建立虛擬機並導入Image文件:
根據xml文件建立:
    create:建立並啓動
    define:建立但不啓動
關閉domain:
    destroy
    shutdown
    reboot
刪除domain:
    undefine
鏈接至console:
    console
列出:
    list
附加或拆除disk:
    attach-disk
    detach-disk
保存狀態至磁盤文件或從磁盤文件恢復:
    save
    restore
暫停於內存或繼續運行:
    suspend
    resume

具體用法示例:

#開關機
virsh start centos6.7 #開機
virsh create /etc/libvirt/qemu/centos6.7.xml #直接經過主機配置文檔啓動主機
virsh shutdown centos6.7 #關機
virsh destroy centos6.7 #強制關閉電源
virsh list --all #查看虛擬機狀態
#添加刪除虛擬機
virsh define /etc/libvirt/qemu/centos6.7.xml #根據主機配置文檔添加虛擬機
virsh undefine centos6.7 #移除虛擬機centos6.7
virsh list --all #查看添加的虛擬機
#使用已存在的虛擬機配置文檔安裝新的虛擬機
qemu-img create -f qcow2 -o size=50G /kvm/p_w_picpaths/lab01.img #爲新建虛擬機生產磁盤鏡像文件
virsh list --all
virsh dumpxml hz***.xml >/etc/libvirt/qemu/centos6.7.xml#導出虛擬機centos6.7的硬件配置信息爲/etc/libvirt/qemu/centos6.7.xml
[root@lab01 ~]# vim /etc/libvirt/qemu/centos6.7.xml
id='20'> #修改node6的id號
centos6.7 #虛擬機centos6.7的name
4b7e91eb-6521-c2c6-cc64-c1ba72707fc7 #uuid必須修改,不然會和hz***的衝突
#指定新虛擬機的硬盤文件

virsh define /etc/libvirt/qemu/centos6.7.xml #使用虛擬描述文檔創建虛擬機,
#可用virsh edit centos6.7修改centos6.7的配置文件
virsh start centos6.7#啓動虛擬機

#爲虛擬機開啓vnc
virsh edit hz*** #編輯hz***的配置文件;不建議直接經過vim hz***.xml修改。

#port='-1' :port自動分配,監聽迴環網絡(virt-manager管理須要listen='127.0.0.1'),無密碼
改成

#固定vnc管理端口5904,不自動分配,vnc密碼redhat,監聽全部網絡

存儲池和存儲卷的管理

1.建立 KVM主機存儲池
1).建立基於文件夾(目錄)的存儲池
virsh pool-define-as vmware_pool --type dir --target /virhost/vmware#定義存儲池vmware_pool或
virsh pool-create-as --name vmware_pool --type dir --target /virhost/vmware
#建立存儲池vmware_pool,類型爲文件目錄,/virhost/vmware,與pool-define-as結果同樣

2).建立基於文件系統的存儲池
virsh pool-define-as --name vmware_pool --type fs --source-dev /dev/vg_target/LogVol02 
--source-format ext4 --target /virhost/vmware     或
virsh pool-create-as --name vmware_pool --type fs --source-dev /dev/vg_target/LogVol02 
--source-format ext4 --target /virhost/vmware

3).查看存儲池信息
virsh pool-info vmware_pool #查看存儲域(池)

4).啓動存儲池
virsh pool-start vmware_pool #啓動存儲池
virsh pool-list

5)銷燬存儲域,取消存儲池
virsh pool-destroy vmware_pool #銷燬存儲池
virsh pool-list --all
virsh pool-undefine vmware_pool #取消存儲池的定義
virsh pool-list --all

2.建立了存儲池後,就能夠建立一個卷,這個卷是用來作虛擬機的硬盤
virsh vol-create-as --pool vmware_pool --name node6.img --capacity 10G --allocation 1G --format qcow2
#建立卷 node6.img,所在存儲池爲vmware_pool,容量10G,初始分配1G,文件格式類型qcow2
virsh vol-info /virhost/vmware/node6.img #查看卷信息名稱: node6.img類型: 文件容量: 10.00 GB分配: 136.00 KB

3.在存儲捲上安裝虛擬主機
#virt-install --connect qemu:///system \
    -n node7 \
    -r 512 \
    -f /virhost/vmware/node7.img \
    --vnc \
    --os-type=linux \
    --os-variant=rhel6 \
    --vcpus=1 \
    --network bridge=br0 \
    -c /mnt/rhel-server-6.0-x86_64-dvd.iso

複製虛擬機,不用修改其中配置文件,也不用建立磁盤文件

#virt-clone -o vm001 -n vm002 -f /var/lib/libvirt/vm002.img
#說明:以vm001作爲源,克隆vm001虛擬機,並建立名稱爲vm002虛擬機,使用磁盤文件/var/lib/libvirt/vm002.img

直接根據磁盤文件建立一個新的虛擬機

virt-install -n "nginx01" --vcpus=4 -r 8096 --boot hd --disk path=/kvm/p_w_picpaths/nginx01.img,bus=virti
o,size=200,format=qcow2,sparse --network bridge=br0,model=virtio --force --graphics vnc,listen=0.0.
0.0,port=5901
相關文章
相關標籤/搜索