天天看點

kvm上的Linux虛拟機使用virtio磁盤

kvm上的Linux虛拟機使用virtio磁盤

系統:centos6.6  64位

網上的文章比較少,怎麽将Linux虛拟機的磁盤改為使用virtio磁盤

因為centos6或以上系統已經包含了virtio驅動,是以不需要再執行下面語句加載核心子產品

modprobe virtio  virtio_pci  virtio_blk  virtio_net

mkinitrd  --with  virtio  --with  virtio_pci   --with  virtio_blk   --with  virtio_net   -f  boot/initrd-$(uname -r).img  $(uname -r)      

這裡說一下具體方法

在實體機上先生成一台虛拟機

1、安裝一台Linux機器

qemu-img create -f qcow2 /data/kvmimg/gzxtest04.qcow2 30G

virt-install --name=gzxtest04 --ram 4096 --vcpus=8 --autostart --hvm \

--disk path=/data/kvmimg/gzxtest04.qcow2,size=60,format=qcow2 \

--cdrom /data/download/CentOS-6.6-x86_64-bin-DVD1.iso \

--graphics vnc,listen=0.0.0.0,port=5907 \

--network bridge=br0,model=e1000 --force --connect qemu:///system

2、啟動虛拟機并安裝好centos6.6系統

3、安裝好系統之後,使用poweroff指令關閉虛拟機

4、先備份虛拟機的xml檔案

virsh dumpxml gzxtest04 > ~/gzxtest04.xml        

5、修改虛拟機的xml檔案

virsh edit gzxtest04      

<disk type='file' device='disk'>

<driver name='qemu' type='qcow2' cache='none'/>

<source file='/data/kvmimg/gzxtest04.qcow2'/>

<target dev='hda' bus='ide'/>

<alias name='ide0-0-0'/>

<address type='drive' controller='0' bus='0' target='0' unit='0'/>

</disk>

修改為

<disk type='file' device='disk'>

<driver name='qemu' type='qcow2' cache='none' io='native'/>

<target dev='vda' bus='virtio'/>

其實就是删除address type這一行,在driver name這一行添加io='native',dev='hda' 改為vda, bus='ide' 改為virtio

6、啟動虛拟機

virsh start gzxtest04      

7、在虛拟機裡可以看到原來是hdx的分區已經全部變為vdx

kvm上的Linux虛拟機使用virtio磁盤
kvm上的Linux虛拟機使用virtio磁盤

8、在虛拟機裡修改grub裝置映射表

sed -i  "s/hda/vda"  /boot/grub/device.map       

大功告成

背景知識

KVM虛拟機磁盤的緩存模式

1、預設,不指定緩存模式的情況下,1.2版本qemu-kvm之前是writethough,1.2版本之後qemu-kvm, centos虛拟機預設的緩存模式就是none

2、writethough:使用O_DSYNC語義

3、writeback:不是O_DSYNC語義也不是O_DIRECT語義,虛拟機資料到達主控端頁面緩存page cache就給虛拟機傳回寫成功報告,頁面緩存機制管理資料的合并寫入主控端儲存設備

4、none:使用O_DIRECT語義,I/O直接在qemu-kvm使用者空間緩存和主控端儲存設備之間發生,要求I/O方式設定為aio=native,不能使用主控端的page cache,相當于直接通路磁盤,有優越性能

5、unsafe:跟writeback一樣,但是不能發出刷盤指令,隻有在虛拟機被關閉時候才會将資料刷盤,不安全

6、directsync:同時使用O_DSYNC語義和O_DIRECT語義

緩存模式的資料一緻性

writethough、none、directsync

能保證資料一緻性,有一些檔案系統不相容none或directsync模式,這些檔案系統不支援O_DIRECT語義

writeback

不能保證資料一緻性,在資料報告寫完成和真正合并寫到儲存設備上一個時間視窗期,這種模式在主控端故障時候會丢失資料,因為資料還存在在主控端的page cache裡

unsafe

不保證資料一緻性,忽略刷盤指令,隻有在虛拟機被關閉時候才會将資料刷盤,不安全

參考文章:https://easyengine.io/tutorials/kvm/enable-virtio-existing-vms/

如有不對的地方,歡迎大家拍磚o(∩_∩)o 

本文版權歸作者所有,未經作者同意不得轉載。

繼續閱讀