首頁 > 軟體

CentOS 7.2下KVM虛擬化設定以及常用操作

2020-06-16 17:21:56

分享CentOS 7.2下KVM虛擬化設定以及常用操作的步驟。

1. 開始安裝kvm
a.
檢查你的系統是否支援虛擬化
grep -Ei 'vmx|svm' /proc/cpuinfo
如果有輸出內容,則支援,其中intelcpu支援會有vmxamd cpu支援會有svm

b.
通過yum安裝虛擬化的軟體包

1
2
yum install -y kvmvirt-*  libvirt  bridge-utils qemu-img 
virt-install

說明:
kvm:
軟體包中含有KVM核心模組,它在預設linux核心中提供kvm管理程式
libvirts:
安裝虛擬機器管理工具,使用virsh等命令來管理和控制虛擬機器。
bridge-utils:
設定網路網絡卡橋接。
virt-*:
建立、克隆虛擬機器命令,以及圖形化管理工具virt-manager
qemu-img:
安裝qemu元件,使用qemu命令來建立磁碟等。


c.
檢查kvm模組是否載入
lsmod |grep kvm
正常應該是:
kvm_intel           55496  3
kvm              337772  1 kvm_intel

如果沒有,需要執行 
modprobe kvm-intel
還沒有就重新啟動一下試試

d.
設定網絡卡
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-br0
分別編輯eth0br0
ifcfg-eth0
改成如下:
DEVICE=eth0
HWADDR=00:0C:29:55:A7:0A
TYPE=Ethernet
UUID=2be47d79-2a68-4b65-a9ce-6a2df93759c6
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
BRIDGE=br0


ifcfg-br0
改成如下:
DEVICE=br0
#HWADDR=00:0C:29:55:A7:0A
TYPE=Bridge
#UUID=2be47d79-2a68-4b65-a9ce-6a2df93759c6
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.11.17
NETMASK=255.255.255.0
GATEWAY=192.168.11.1
DNS1=202.106.0.20

說明:我的虛擬機器是橋接模式,所以設定br0ip和我的真機同樣的網段,包括閘道器也是我路由器的ip,大家可以根據自己的環境去設定,目的是為了讓虛擬機器可以上網。

/etc/init.d/network restart
檢視網絡卡如下:
br0      Linkencap:Ethernet  HWaddr 00:0C:29:55:A7:0A
        inetaddr:192.168.11.17  Bcast:192.168.11.255  Mask:255.255.255.0
        inet6addr: fe80::20c:29ff:fe55:a70a/64 Scope:Link
        UPBROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RXpackets:141326 errors:0 dropped:0 overruns:0 frame:0
        TXpackets:90931 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:0
        RXbytes:456024940 (434.8 MiB)  TX bytes:10933593 (10.4 MiB)

eth0     Linkencap:Ethernet  HWaddr 00:0C:29:55:A7:0A
        inet6addr: fe80::20c:29ff:fe55:a70a/64 Scope:Link
        UPBROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RXpackets:341978 errors:0 dropped:0 overruns:0 frame:0
        TXpackets:90946 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:1000
        RXbytes:468848861 (447.1 MiB)  TX bytes:10934699 (10.4 MiB)

lo       Linkencap:Local Loopback
        inetaddr:127.0.0.1  Mask:255.0.0.0
        inet6addr: ::1/128 Scope:Host
        UPLOOPBACK RUNNING  MTU:65536  Metric:1
        RXpackets:0 errors:0 dropped:0 overruns:0 frame:0
        TXpackets:0 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:0
        RXbytes:0 (0.0 b)  TX bytes:0 (0.0 b)

virbr0    Linkencap:Ethernet  HWaddr 52:54:00:14:EF:D5
        inetaddr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
        UPBROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RXpackets:0 errors:0 dropped:0 overruns:0 frame:0
        TXpackets:0 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:0
        RXbytes:0 (0.0 b)  TX bytes:0 (0.0 b)

e.
啟動或重新啟動libvirtd服務和messagebus 服務
/etc/init.d/libvirtd start
/etc/init.d/messagebus restart

此時可以檢視網路介面列表
brctl show
結果如下:
bridge name     bridgeid           STPenabled     interfaces
br0          8000.000c2955a70a      no           eth0
virbr0       8000.52540014efd5      yes          virbr0-nic


2. 
建立虛擬機器
mkdir /data/   //
建立一個儲存虛擬機器虛擬磁碟的目錄,該目錄所在分割區必須足夠大

virt-install
--name  aming1
--ram 512
--disk path=/data/aming1.img,size=30
--vcpus 1
--os-type linux
--os-variant rhel6
--network bridge=br0
--graphics none
--console pty,target_type=serial
--location'http://mirrors.163.com/centos/6.7/os/i386/'
--extra-args 'console=ttyS0,115200n8 serial'
 


說明:
--name 
指定虛擬機器的名字
--ram
指定記憶體分配多少
--disk path
指定虛擬磁碟放到哪裡,size=30 指定磁碟大小為30G,這樣磁碟檔案格式為rawraw格式不能做快照,後面有說明,需要轉換為qcow2格式,如果要使用qcow2格式的虛擬磁碟,需要事先建立qcow2格式的虛擬磁碟。

範例:qemu-img create -f qcow2 -opreallocation=metadata  /data/test02.img 10G; 

--diskpath=/data/test02.img,format=qcow2,size=10,bus=virtio
--vcpus
指定分配cpu幾個
--os-type
指定系統型別為linux
--os-variant
指定系統版本
--network 
指定網路型別

--network network=default  指定位nat,預設就是nat模式

--graphics 指定安裝通過哪種型別,可以是vnc,也可以沒有圖形,在這裡我們沒有使用圖形直接使用文字方式
--console
指定控制台型別
--location
指定安裝媒介地址,可以是網路地址,也可以是原生的一個絕對路徑,(--location '/mnt/', 其中/mnt/下就是我們掛載的光碟映象mount /dev/cdrom /mnt)如果是絕對路徑,

已有本地映象可以

virt-install

--name  test02

--ram 512

--disk path=/data/kvm/test02.qcow2,format=qcow2,size=10,bus=virtio

--vcpus 1

--os-type linux

--os-variant rhel7

--network bridge=br0

--graphics none

--console pty,target_type=serial

--location '/data/CentOS.iso'

--extra-args 'console=ttyS0,115200n8 serial'

會出現文字方式的安裝介面,選擇時區,安裝包的選擇(預設 Minial install)、root密碼設定,建立新使用者,以及網路設定。在此沒看見有,注意設定一下DNS。

最後安裝完,reboot就進入剛剛建立的虛擬機器了。要想退回到宿主機,ctrl  ] 即可。

virsh list 可以列出當前的子機列表。

virsh start test01  啟動test01

virsh console test01  可以進入指定的子機

3. 克隆虛擬機器
virt-clone --original test01 --name template--file /data/clone1.img 
如果子機test01還未關機,則需要先關機,否則會報錯:
ERROR   
必須暫停或者關閉有要克隆裝置的域。
關閉子機的方法是:
virsh shutdown test01

說明:預設,我們沒有辦法在宿主機直接shutdown自己,我們需要借助於子機上的acpid服務才可以,這個服務說白了就是讓宿主機可以去呼叫子機的電源關閉的介面。所以,子機上需要安裝並啟動acpid服務。
先登入子機:
virsh console test01
登入後,安裝acpid服務:
yum install -y acpid 
啟動:
/etc/init.d/acpid start
ctrl ] 退出來
此時再執行 virsh shutdowntest01 就可以啦。

克隆完後,virsh list all 就會發現clone1 這個子機,通過命令 
virsh start clone1
可以開啟該子機。

4. virsh 常用操作
a.
開啟子機
virsh start test01
也可以在開啟的同時連上控制台
virsh start test01 --console

b.
關閉子機
virsh shutdown test01
(這個需要藉助子機上的acpid服務)
另外一種方法是 
virsh destroy test01 

c.
讓子機隨宿主機開機自動啟動
virsh autostart test01
解除自動啟動
virsh autostart --disable test01 

d.
列出子機
virsh list  //
只能列出啟動的子機
virsh list --all  //
可以把所有子機都列出來

e.
刪除子機
virsh destroy clone1
virsh undefine clone1
rm -f /data/clone1.img

f.
掛起子機
virsh suspend test01

h.
恢復子機
virsh resume test01

5. 快照管理
a.
建立快照

virsh snapshot-create test01 原命令出錯更換命令virsh snapshot-create-as test01會報錯:

unsupported configuration: internal snapshot fordisk vda unsupported for storage type raw
這是因為raw格式的映象不能做快照,所以需要先轉換一下格式

b.
磁碟映象轉換格式
先檢視當前子機磁碟映象格式
qemu-img info /data/test01.img 
結果是:
image: /data/test01.img
file format: raw
virtual size: 30G (32212254720 bytes)
disk size: 1.6G


raw格式轉換為qcow格式(其實是複製了一份):
qemu-img convert -f raw -O qcow2 /data/test01.img/data/test01.qcow2

qemu-img info /data/test01.qcow2   //
再次檢視格式,結果如下
image: /data/test01.qcow2
file format: qcow2
virtual size: 30G (32212254720 bytes)
disk size: 1.1G
cluster_size: 65536

現在我們還需要編輯子機組態檔,讓它使用新格式的虛擬磁碟映象檔案
virsh edit test01  //
這樣就進入了該子機的組態檔(/etc/libvirt/qemu/test01.xml),跟用vim編輯這個檔案一樣的用法
需要修改的地方是:
     <driver name='qemu'type='raw' cache='none'/>
     <sourcefile='/data/test01.img'/>

改為:
     <driver name='qemu'type='qcow2' cache='none'/>
     <sourcefile='/data/test01.qcow2'/>


c.
繼續建立快照
virsh snapshot-create test01  //
這次成功了,提示如下
Domain snapshot 1437248443 created

列出快照:
virsh snapshot-list test01

檢視當前子機的快照版本:
virsh snapshot-current test01

test01
子機的快照檔案在  /var/lib/libvirt/qemu/snapshot/test01/  目錄下

d.  恢復快照
首先需要關閉子機
virsh destroy test01

確認子機是否關閉
virsh domstate test01
關閉

vish snapshot-list test01  //
結果是
名稱           Creation Time          狀態
------------------------------------------------------------
1437248443         2015-07-19 03:40:43 +0800 shutoff
1437248847         2015-07-19 03:47:27 +0800 running


virsh snapshot-revert test01  1437248443

e.
刪除快照
virsh snapshot-delete test01  1437248847

6. 磁碟擴容

a.
對於raw格式的虛擬磁碟擴容

qemu-img info /data/kvm/test03.img //
本身只有9G

1.  image: /data/kvm/test03.img

2.  file format: raw

3.  virtual size: 9.0G (9663676416 bytes)

4.  disk size: 1.1G

 


qemu-img resize /data/kvm/test03.img +2G

qemu-img info /data/kvm/test03.img //
現在增加了2G

1.  image: /data/kvm/test03.img

2.  file format: raw

3.  virtual size: 11G (11811160064 bytes)

4.  disk size: 1.1G

5.   

virsh destroy test03  //關閉test03虛擬機器
virsh start test03  //
開啟test03虛擬機器
virsh console test03  //
進入虛擬機器

fdisk -l   
檢視已經磁碟分割區已經增加
[root@localhost ~]# fdisk -l


但是磁碟掛載的空間並沒有增加
[root@localhost ~]# df -h

Filesystem         Size  Used Avail Use%Mounted on

/dev/mapper/VolGroup-lv_root

                6.5G  579M  5.6G  10% /

tmpfs             250M     0  250M   0%/dev/shm

/dev/vda1          477M  26M  427M   6% /boot

因為新增加的空間還沒有劃分使用。所以要繼續分割區:
[root@localhost ~]# fdisk /dev/vda

1.  WARNING: DOS-compatible mode is deprecated.It's strongly recommended to

2.         switch off the mode (command 'c') and change display units to

3.         sectors (command 'u').

4.   

5.  Command (m for help): p

6.   

7.  Disk /dev/vda: 11.8 GB, 11811160064 bytes

8.  16 heads, 63 sectors/track, 22885 cylinders

9.  Units = cylinders of 1008 * 512 = 516096bytes

10.Sector size(logical/physical): 512 bytes / 512 bytes

11.I/O size(minimum/optimal): 512 bytes / 512 bytes

12.Diskidentifier: 0x000099f3

13. 

14.  Device Boot     Start       End     Blocks  Id  System

15./dev/vda1  *         3       1018     512000  83  Linux

16.Partition 1does not end on cylinder boundary.

17./dev/vda2         1018     <font color="#ff0000">16645</font>    7875584   8e  Linux LVM

18.Partition 2does not end on cylinder boundary.

19. 

20.Command (mfor help):<font color="#ff0000"> n</font>

21.Commandaction

22.  e   extended

23.  p   primary partition (1-4)

24.p

25.Partitionnumber (1-4): <font color="#ff0000">3</font>

26.Firstcylinder (1-22885, default 1): <fontcolor="#ff0000">16646</font>

27.Lastcylinder, +cylinders or +size{K,M,G} (16646-22885, default 22885):

28.Usingdefault value 22885

29. 

30.Command (mfor help): p

31. 

32.Disk/dev/vda: 11.8 GB, 11811160064 bytes

33.16 heads, 63sectors/track, 22885 cylinders

34.Units =cylinders of 1008 * 512 = 516096 bytes

35.Sector size(logical/physical): 512 bytes / 512 bytes

36.I/O size(minimum/optimal): 512 bytes / 512 bytes

37.Diskidentifier: 0x000099f3

38. 

39.  Device Boot     Start       End     Blocks  Id  System

40./dev/vda1  *         3       1018     512000  83  Linux

41.Partition 1does not end on cylinder boundary.

42./dev/vda2         1018     16645     7875584   8e  Linux LVM

43.Partition 2does not end on cylinder boundary.

44.<fontcolor="#ff0000">/dev/vda3         16646      22885    3144960   83  Linux</font>

45. 

46.Command (mfor help): w

47.Thepartition table has been altered!

48. 

49.Callingioctl() to re-read partition table.

50. 

51.WARNING:Re-reading the partition table failed with error 16: Device or resource busy.

52.The kernelstill uses the old table. The new table will be used at

53.the nextreboot or after you run partprobe(8) or kpartx(8)

54.Syncingdisks.

然後再把這個/dev/vda3 加入到lvm裡面去:

ls  /dev/vda3
如果沒有這個分割區,需要重新啟動一下。

[root@localhost ~]# 
pvcreate/dev/vda3

1.    <spanstyle="line-height: 1.5; background-color: rgb(247, 247,247);">Physical volume "/dev/vda3" successfullycreated</span>

[root@localhost ~]# pvs

1.  PV       VG      Fmt  Attr PSize PFree

2.    /dev/vda2 <fontcolor="#ff0000"> VolGroup</font> lvm2a--  7.51g    0

3.    /dev/vda3         lvm2 ---  3.00g 3.00g

[root@localhost ~]# vgextendVolGroup /dev/vda3

1.  Volume group "VolGroup"successfully extended

[root@localhost ~]# vgs

1.  VG      #PV #LV #SNAttr   VSize  <fontcolor="#ff0000">VFree</font>

2.    VolGroup   2  2   0 wz--n- 10.50g <fontcolor="#ff0000">3.00g</font>

[root@localhost ~]# lvs

1.  LV     VG      Attr      LSize   PoolOrigin Data%  Meta%  Move Log Cpy%Sync Convert

2.    lv_root VolGroup-wi-ao----   6.71g

3.    lv_swap VolGroup -wi-ao----816.00m

[root@localhost ~]# lvextend -l +100%FREE /dev/VolGroup/lv_root

1.  Size of logical volume VolGroup/lv_rootchanged from 6.71 GiB (1718 extents) to 9.71 GiB (2485 extents).

2.    Logical volume lv_rootsuccessfully resized

[root@localhost ~]# df -h

1.  Filesystem         Size  Used Avail Use% Mounted on

2.  /dev/mapper/VolGroup-lv_root

3.                 6.5G  618M  5.6G  10% /

4.  tmpfs             250M    0  250M   0% /dev/shm

5.  /dev/vda1          477M   26M  427M   6% /boot

[root@localhost ~]# resize2fs /dev/VolGroup/lv_root

1.  resize2fs 1.41.12 (17-May-2010)

2.  Filesystem at /dev/VolGroup/lv_root ismounted on /; on-line resizing required

3.  old desc_blocks = 1, new_desc_blocks = 1

4.  Performing an on-line resize of/dev/VolGroup/lv_root to 2544640 (4k) blocks.

5.  The filesystem on /dev/VolGroup/lv_root isnow 2544640 blocks long.

[root@localhost ~]# df -h

1.  Filesystem         Size  Used Avail Use% Mounted on

2.  /dev/mapper/VolGroup-lv_root

3.                 <fontcolor="#ff0000">9.5G  </font>618M  8.4G   7% /

4.  tmpfs             250M    0  250M   0% /dev/shm

5.  /dev/vda1          477M   26M  427M   6% /boot

另外,如果是增加磁碟,思路是: 
建立磁碟: qemu-img create -fraw  /data/kvm/test03_2.img 5G
關閉虛擬機器: virsh destroy test03
編輯組態檔: virsh edittest03  增加如下:

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

2.    <driver name='qemu'type='raw' cache='none'/>     

3.    <source file='/data/kvm/test03_2.img'/>     

4.    <target dev='vdb'bus='virtio'/>     

5.  </disk>


開啟虛擬機器:virsh start test03
進入虛擬機器:virsh console test03
分割區: fdisk /dev/vdb
格式化(略)
掛載(略)
當然也可以按照上面的思路把 /dev/vdb1 加入到 lvm裡面去

b. qcow2
格式
步驟基本上和raw一樣。如果提示 This image format doesnot support resize, 檢查一下你qemu-img create的時候,是否有加  preallocation=metadata 選項,如果有,就不能resize了。

7. 調整cpu和記憶體檢視子機設定:
virsh dominfo test02
virsh edit  test02
修改:
  <memoryunit='KiB'>524288</memory>
  <currentMemoryunit='KiB'>524288</currentMemory>
  <vcpuplacement='static'>1</vcpu>

為:
  <memoryunit='KiB'>624288</memory>
  <currentMemoryunit='KiB'>624288</currentMemory>
  <vcpuplacement='static'>2</vcpu>


重新啟動虛擬機器:
virsh destroy test02
virsh start test02

8. 不重新啟動虛擬機器線上增加網絡卡
virsh domiflist test02 
檢視test02子機的網絡卡列表
virsh attach-interface test02 --type bridge--source br0   //
命令列增加一塊網絡卡
virsh dumpxml test02 >/etc/libvirsh/qemu/test02.xml   //
命令列增加的網絡卡只儲存在記憶體中,重新啟動就失效,所以需要儲存到組態檔中,其中/etc/libvirsh/qemu/test02.xml test02子機的組態檔
virsh console test02 //
進入虛擬機器後,執行
ifconfig -a
發現多了一個網絡卡  eth1

9. 虛擬機器遷移

該方式要確保虛擬機器是關機狀態。
virsh shutdown test02
virsh dumpxml test02 >/etc/libvirt/qemu/test03.xml  //
如果是遠端機器,需要把該組態檔拷貝到遠端機器上
virsh domblklist test02  //
檢視test02子機的磁碟所在目錄
Target     Source
------------------------------------------------
vda       /data/add1.qcow2
rsync -av /data/add1.qcow2/data/test03.qcow2   //
如果是遷移到遠端,則需要把該磁碟檔案拷貝到遠端機器上
vi /etc/libvirt/qemu/test03.xm  //
因為是遷移到本機,組態檔用的是test02子機的設定,不改會有衝突,所以需要修改該檔案,如果是遠端機器不用修改
修改domname:
  <name>test03</name>
修改uuid(隨便更改一下數位,位數不要變)
<uuid>77bb10bd-3ad8-8899-958d-756063002969</uuid>
修改磁碟路徑:
    <disk type='file'device='disk'>
     <driver name='qemu'type='raw' cache='none'/>
     <source file='
/data/test03.qcow2'/>
     <target dev='vda'bus='virtio'/>
     <address type='pci'domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>

virsh list --all   //
會發現新遷移的test03子機

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-02/140372.htm


IT145.com E-mail:sddin#qq.com