1、 raw格式和qcow2格式
raw:
"raw" 鏡像格式是最最簡單的,并且是被 KVM 和 Xen 原生支持的格式,你 可以想象裸格式鏡像和塊設備文件是二進制位相當?shù)模秃孟駨膲K設備拷貝過來的,比方說,使用dd 命令將 /dev/sda 內容拷貝到一個文件。
raw唯一的缺點在于,ls看起來很大,在scp的時候,這會消耗很多的網(wǎng)絡IO,而tar這么大的文件,也是很耗時間跟CPU的,一個解決方法是,把raw轉換成qcow2的格式,對空間壓縮就很大了。而且速度很快。轉換命令如下:
#qemu-img convert -O qcow2 centos.raw centos.qcow2
#qemu-img convert -O raw centos.qcow2 centos.raw
這樣轉換所消耗的時間遠比tar.gz小。
qcow2:
qcow2 (QEMU 寫時復制版本2)格式通常是KVM使用,相比裸格式,它有額外的特性
例如:
•使用稀疏文件呈現(xiàn)方式,因此鏡像尺寸更小。
•支持快照。
因為qcow2 鏡像是稀疏的,因此,qcow2鏡像通常比裸格式鏡像小,更小的 文件意味著上傳更快,因此通常轉換裸格式鏡像到qcow2格式上傳比直接上傳裸格式鏡像文件更快。
注意:稀疏文件(英語:sparse file)是一種計算機文件,它能嘗試在文件內容大多為空時更有效率地使用文件系統(tǒng)的空間。它的原理是以簡短的信息(元數(shù)據(jù))表示空數(shù)據(jù)塊,而不是在在磁盤上占用實際空間來存儲空數(shù)據(jù)塊。只有真實(非空)的數(shù)據(jù)塊會按原樣寫入磁盤。
二、kvm常用命令
virsh是kvm虛擬機常用的管理工具,常用的命令如下:
1、安裝kvm環(huán)境
sudo apt-get install qemu-kvm
2、導入虛機配置(xml格式配置文件,見附錄1)
virsh define centos.xml
3、啟動centos虛機
virsh start centos
4、查看在運行的虛擬機
virsh list
5、查看創(chuàng)建的所有虛擬機
virsh list --all
6、啟動虛擬機
virsh start centos
7、掛起虛擬機
virsh suspend centos
8、恢復被掛起的虛擬機
virsh resume centos
9、開機啟動虛擬機,即在虛擬機服務(libvirt)啟動的時候,就啟動虛擬機。
virsh autostart centos
10、關閉開機啟動虛擬機
virsh auto start --disable centos
11、關閉虛擬機(需要ACPID服務的支持,ACPI是Advanced Configuration and PowerInterface縮寫,高級配置和電源管理接口)
virsh shutdown centos
12、強制關閉虛擬機,這種方式是從virsh list列表中將虛擬機刪除,仍然可以start起來
virsh destory centos
13、啟動默認的網(wǎng)絡
virsh net-start default
14、自啟動默認網(wǎng)絡
virsh net-autostart default
15、徹底刪除虛擬機步驟
1)關閉虛擬機:virsh destroy centos
2)刪除定義:virsh undefine centos
3)刪除虛擬機文件(在/var/lib/libvirtd/下的相關文件)
三、kvm虛機配置文件(xml文件)
<domain type='kvm'> //如果是Xen,則type='xen'
<name>vm0</name> //虛擬機名稱,同一物理機唯一
<uuid>fd3535db-2558-43e9-b067-314f48211343</uuid> //同一物理機唯一,可用uuidgen生成
<memory>524288</memory>
<currentMemory>524288</currentMemory> //memory這兩個值最好設成一樣
<vcpu>2</vcpu> //虛擬機可使用的cpu個數(shù),查看物理機可用CPU個數(shù):cat /proc/cpuinfo |grep processor | wc -l
<os>
<type arch='x86_64' machine='pc-i440fx-vivid'>hvm</type> //arch指出系統(tǒng)架構類型,machine 則是機器類型,查看機器類型:qemu-system-x86_64 -M ?
<boot dev='hd'/> //啟動介質,第一次需要裝系統(tǒng)可以選擇cdrom光盤啟動
<bootmenu enable='yes'/> //表示啟動按F12進入啟動菜單
</os>
<features>
<acpi/> //Advanced Configuration and Power Interface,高級配置與電源接口
<apic/> //Advanced Programmable Interrupt Controller,高級可編程中斷控制器
<pae/> //Physical Address Extension,物理地址擴展
</features>
<clock offset='localtime'/> //虛擬機時鐘設置,這里表示本地本機時間
<on_poweroff>destroy</on_poweroff> //突發(fā)事件動作
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices> //設備配置
<emulator>/usr/bin/kvm</emulator> //如果是Xen則是/usr/lib/xen/binqemu-dm
<disk type='file' device='disk'> //硬盤
<driver name='qemu' type='raw'/>
<source file='/opt/vm/vmdev/fdisk.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> //域、總線、槽、功能號,slot值同一虛擬機上唯一
</disk>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/opt/vm/vmdev/fdisk2.img'/>
<target dev='vdb' bus='virtio'/>
</disk>
<disk type='file' device='cdrom'>//光盤
<driver name='qemu' type='raw'/>
<source file='/opt/vm/vmiso/centos-server-amd64.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
</disk>
/* 利用linux網(wǎng)橋連接網(wǎng)絡 */
<interface type='bridge'>
<mac address='fa:92:01:33:d4:fa'/>
<source bridge='br100'/> //配置的網(wǎng)橋網(wǎng)卡名稱
<target dev='vnet0'/> //同一網(wǎng)橋下相同
<alias name='net0'/> //別名,同一網(wǎng)橋下相同
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> //注意slot值唯一
</interface>
/* 利用ovs網(wǎng)橋連接網(wǎng)絡 */
<interface type='bridge'>
<source bridge='br-ovs0'/>
<virtualport type='openvswitch'/>
<target dev='tap0'/>
<model type='virtio'/>
</interface>
/* 配置成pci直通虛擬機連接網(wǎng)絡,SR-IOV網(wǎng)卡的VF場景 */
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
</source>
</hostdev>
/* 利用vhostuser連接ovs端口 */
<interface type='vhostuser'>
<mac address='fa:92:01:33:d4:fa'/>
<source type='unix' path='/var/run/vhost-user/tap0' mode='client'/>
<model type='virtio'/>
<driver vringbuf='2048'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<interface type='network'> //基于虛擬局域網(wǎng)的網(wǎng)絡
<mac address='52:54:4a:e1:1c:84'/> //可用命令生成,見下面的補充
<source network='default'/> //默認
<target dev='vnet1'/> //同一虛擬局域網(wǎng)的值相同
<alias name='net1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> //注意slot值
</interface>
<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'/> //配置vnc,windows下可以使用vncviewer登錄,獲取vnc端口號:virsh vncdisplay vm0
<listen type='address' address='0.0.0.0'/>
</graphics>
</devices>
</domain>