1. 程式人生 > 其它 >Virsh命令方式管理KVM虛擬機器

Virsh命令方式管理KVM虛擬機器

目錄

一.簡介

virsh命令提供了用來管理各虛擬機器的命令介面,支援互動模式,可以實現對虛擬機器的檢視/建立/停止/關閉等各種操作。

用法參考:
virsh 控制指令 [虛擬機器名稱] [引數]

二.操作

檢視KVM伺服器及虛擬機器資訊

1.檢視KVM伺服器節點

[root@kvmsvr ~]# virsh  nodeinfo
CPU 型號:        x86_64
CPU:               4
CPU 頻率:        2600 MHz
CPU socket:        1
每個 socket 的核心數: 4
每個核心的執行緒數: 1
NUMA 單元:       1
記憶體大小:      16230564 KiB

2.列出有哪些虛擬機器(包括未開啟的)及各自的狀態

[root@kvmsvr ~]# virsh  list  --all
 Id    Name                           State
----------------------------------------------------
 -     rhel7.2                        shut off

3.檢視指定虛擬機器rhel7.2的配置摘要資訊

[root@kvmsvr ~]# virsh  dominfo  rhel7.2 
Id:             -
Name:           rhel7.2
UUID:           207a2b25-fd0f-436e-81ae-ad0fa8861315
OS Type:        hvm
State:          shut off
CPU(s):         1
Max memory:     1000448 KiB
Used memory:    0 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0

虛擬機器開關機操作

1.將虛擬機器rhel7.2開啟

[root@kvmsvr ~]# virsh  start  rhel7.2                              //開機
Domain rhel7.2 started
[root@kvmsvr ~]# virsh  list                                      //檢查結果
 Id    Name                           State
----------------------------------------------------
 5     rhel7.2                        running

2.將虛擬機器rhel7.2關機

[root@kvmsvr ~]# virsh  shutdown  rhel7.2                          //關機
Domain rhel7.2 is being shutdown
.. .. //稍等片刻
[root@kvmsvr ~]# virsh  list  --all                                //檢查結果
 Id    Name                           State
----------------------------------------------------
 -     rhel7.2                        shut off

3.將虛擬機器rhel7.2強制關機(shutdown無效時適用)

[root@kvmsvr ~]# virsh  destroy  rhel7.2                             //強制關機
Domain rhel7.2 destroyed
[root@kvmsvr ~]# virsh  list  --all                                //檢查結果
 Id    Name                           State
----------------------------------------------------
 -     rhel7.2                        shut off

虛擬機器自啟設定

1.將虛擬機器rel7.2設為自動啟動

[root@kvmsvr ~]# virsh  autostart  rhel7.2                         //設定自啟動
Domain rhel7.2 marked as autostarted
[root@kvmsvr ~]# virsh  dominfo  rhel7.2                           //確認結果
Id:             -
Name:           rhel7.2
.. ..
Autostart:      enable
.. ..

2.將虛擬機器rel7.2取消自動啟動

[root@kvmsvr ~]# virsh  autostart  --disable  rhel7.2              //取消自啟動
Domain rhel7.2 unmarked as autostarted
[root@kvmsvr ~]# virsh  dominfo  rhel7.2                           //確認結果
Id:             -
Name:           rhel7.2
.. ..
Autostart:      disable
.. ..

三.xml配置檔案

簡介

KVM虛擬機器的xml配置檔案也就是通常所說的虛擬機器的描述檔案,主要用來定義一個虛擬機器的名稱、UUID、CPU、記憶體、虛擬磁碟、網絡卡等各種引數設定。

KVM虛擬機器的xml配置檔案預設位於: /etc/libvirt/qemu/虛擬機器名.xml 。

修改虛擬機器配置的基本思路:
1.編輯虛擬機器配置:virsh edit 虛擬機器名
2.根據需要修改,儲存配置結果

將虛擬機器rhel7.2改名為rhel-207

1.生成新的UUID字串,並複製備用

[root@kvmsvr ~]# uuidgen
76d5dc2c-5eef-4e30-8b6c-e58851814f84

2.編輯虛擬機器rhel7.2的配置,整name、uuid值,儲存修改

[root@kvmsvr ~]# virsh  edit  rhel7.2
<domain type='kvm'>
  <name>rhel-207</name>                                      //新名稱
  <uuid>76d5dc2c-5eef-4e30-8b6c-e58851814f84</uuid>         //新UUID值
.. ..

3.確認已自動匯入的新配置

[root@kvmsvr ~]# virsh  list  --all              
 Id    Name                           State
----------------------------------------------------
 -     rhel-207                       shut off                  //新名稱的虛擬機器
 -     rhel7.2                        shut off

4.刪除舊名稱的虛擬機器配置

[root@kvmsvr ~]# virsh  undefine  rhel7.2                      //取消定義虛擬機器
Domain rhel7.2 has been undefined
[root@kvmsvr ~]# virsh  list  --all                         //確認結果
 Id    Name                           State
----------------------------------------------------
 -     rhel-207                       shut off

將虛擬機器rhel-207複製為rhel-7

1.生成新UUID,並複製備用

[root@kvmsvr ~]# uuidgen
90908905-bde4-4c4a-90b0-8a8f5bba1e25

2.修改匯出後的配置(調整名稱、UUID、磁碟路徑、網絡卡MAC)

修改匯出的xml配置檔案,調整name、uuid、disk路徑、mac地址值:

[root@kvmsvr ~]# virsh  edit  rhel-207
<domain type='kvm'>
  <name>rhel-7</name>                                             //新名稱
  <uuid>90908905-bde4-4c4a-90b0-8a8f5bba1e25</uuid>             //新UUID值
.. ..
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/rhel-7.qcow2'/>         //新磁碟路徑
      .. ..
    </disk>
.. ..
    <interface type='network'>
      <mac address='52:54:00:91:50:07'/>                         //新MAC地址
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03
' function='0x0'/>
    </interface>
.. ..

3.確認已自動匯入的新配置

[root@kvmsvr ~]# virsh  list  --all                         //確認結果
 Id    Name                           State
----------------------------------------------------
 -     rhel-207                       shut off
 -     rhel-7                         shut off                  //新虛擬機器

4.複製虛擬機器磁碟檔案

為新虛擬機器提供一份獨立的磁碟檔案:

[root@kvmsvr ~]# cd  /var/lib/libvirt/images/
[root@kvmsvr images]# cp  rhel7.2.qcow2  rhel-7.qcow2
[root@kvmsvr images]# ls                                     //確認結果
rhel-7.qcow2  rhel7.2.qcow2

四.為虛擬機制作快照備份

簡介

KVM虛擬機器的快照:通過在虛擬機器磁碟映象內儲存不同時間點的狀態資料實現備份,在必要時可將虛擬機器恢復到指定的快照狀態。

qemu-img快照管理基本操作:
建立快照:qemu-img snapshot -c 快照名 qcow2磁碟
列出快照:qemu-img snapshot -l qcow2磁碟
恢復快照:qemu-img snapshot -a 快照名 qcow2磁碟
刪除快照:qemu-img snapshot -d 快照名 qcow2磁碟

為虛擬機制作快照

1.確保虛擬機器rhel-7已經關機

[root@kvmsvr ~]# virsh  list  --all  |  grep  rhel-7
 -     rhel-7                         shut off

2.為虛擬機器rhel-7的磁碟製作快照

[root@kvmsvr ~]# cd  /var/lib/libvirt/images/
[root@kvmsvr images]# qemu-img  snapshot  -c snap1  rhel-7.qcow2     //製作快照
[root@kvmsvr images]# qemu-img  snapshot  -l  rhel-7.qcow2             //列出快照
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         snap1                     0 2017-01-05 15:44:25   00:00:00.000

正常使用/更新虛擬機器

1.啟動虛擬機器rhel-7

[root@kvmsvr ~]# virsh start rhel-7
Domain rhel-7 started

2.正常登入虛擬機器rhel-7,在桌面建立檔案1.txt

還原快照並檢查恢復結果

1.關閉虛擬機器rhel-7

[root@kvmsvr ~]# virsh  destroy  rhel-7
Domain rhel-7 destroyed

2.將虛擬機器rhel-7的磁碟還原到快照snap1
[root@kvmsvr images]# qemu-img snapshot -a snap1 rhel-7.qcow2

3.重新開啟虛擬機器rhel-7

[root@kvmsvr ~]# virsh start rhel-7
Domain rhel-7 started

4.正常登入虛擬機器rhel-7,檢查桌面的檔案1.txt

因為此檔案是在建快照之後才建立的,所以還原快照以後就沒有了。

五.快建新虛擬機器

簡介

快建新虛擬機器的基本思路:
提前準備好一臺模板虛擬機器(映象磁碟+xml配置檔案)
基於qcow2磁碟複用技術快建新虛擬機器的磁碟
通過調整模板機的配置快建新虛擬機器的xml配置檔案
匯入新虛擬機器

Copy On Write,寫時複製技術原理:
直接對映原始盤的資料內容
當原始盤有修改時,在修改之前將舊資料存入前端盤
對前端盤的修改不會回寫到原始盤

找一臺已經裝好RHEL7系統、配置好本地yum源、關閉SELinux的虛擬機器,提取模板虛擬機器磁碟、xml配置檔案備用。

準備模板虛擬機器

1.準備磁碟目錄、模板虛擬機器磁碟檔案

[root@kvmsvr ~]# qemu-img info  /data/images/rhel7_muban.qcow2 
image: /data/images/rhel7_muban.qcow2
file format: qcow2
virtual size: 300G (322122547200 bytes)                  //虛擬機器磁碟容量
disk size: 3.2G                                          //在KVM伺服器佔用容量

2.準備模板虛擬機器配置檔案

[root@kvmsvr ~]# cat  /data/images/rhel7_muban.xml 
<domain type='kvm'>
  <name>rhel7.2</name>
  <uuid>a1992150-5cc7-e19d-20df-cd5cea7d8aa2</uuid>
  <memory unit='KiB'>2097152</memory>
.. ..

快建虛擬機器svr7

1.為虛擬機器svr7快速建立前端盤(複用模板機的磁碟資料)

[root@kvmsvr ~]# qemu-img  create  -f  qcow2  -b  /data/images/rhel7_muban.qcow2  /data/images/svr7.qcow2
Formatting '/data/images/svr7.qcow2', fmt=qcow2 size=322122547200 backing_file='/data/images/rhel7_muban.qcow2' encryption=off cluster_size=65536

2.為虛擬機器svr7準備xml配置

[root@kvmsvr ~]# cp  /data/images/rhel7_muban.xml  /tmp/svr7.xml    //拷貝配置
[root@kvmsvr ~]# vim  /tmp/svr7.xml                             //修改配置
<domain type='kvm'>
  <name>svr7</name>                                             //新名稱
  <uuid>b20a1a1c-a2de-4b2f-bb03-91a3e36257c7</uuid>             //新UUID值
.. ..
    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/channel/t
arget/domain-rhel-7/org.qemu.guest_agent.0'/>                      //改套接字路徑
      .. ..
    </channel>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/svr7.qcow2'/>         //新磁碟路徑
      .. ..
    </disk>
.. ..
    <interface type='network'>
      <mac address='52:54:00:11:00:07'/>                         //新MAC地址
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03
' function='0x0'/>
    </interface>
.. ..

3.定義新虛擬機器svr7

[root@room9pc00 ~]# virsh  define  /tmp/svr7.xml 
定義域 svr7(從 /tmp/svr7.xml)

4.為虛擬機器svr7配置主機名、IP地址,開啟虛擬機器svr7,使用root使用者登入系統。

[root@svr7 ~]# vim  /etc/hostname                      //配置主機名
svr7.tedu.cn
[root@svr7 ~]# nmcli  connection  modify  eth0  ipv4.method  manual  ipv4.addresses  192.168.4.7/24  connection.autoconnect  yes         //配置IP地址
[root@svr7 ~]# nmcli  connection  up  eth0              //啟用連線
成功啟用的連線(D-Bus 啟用路徑:/org/freedesktop/NetworkManager/ActiveConnection/8)
[root@svr7 ~]# ifconfig  eth0                             //確認配置結果
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.7  netmask 255.255.255.0  broadcast 192.168.4.255
        inet6 fe80::20c:29ff:fe5e:f686  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:11:00:07  txqueuelen 1000  (Ethernet)
        RX packets 112143  bytes 9388455 (8.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 507844  bytes 771354289 (735.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

快建虛擬機器pc207,重複操作

快建虛擬機器的執行測試

1.啟動兩臺虛擬機器svr7、pc207,均可正常執行

2.從svr7可ping通pc207

[root@svr7 ~]# ping  192.168.4.207
PING 192.168.4.207 (192.168.4.207) 56(84) bytes of data.
64 bytes from 192.168.4.207: icmp_seq=1 ttl=64 time=0.392 ms
64 bytes from 192.168.4.207: icmp_seq=2 ttl=64 time=0.369 ms
.. ..

3.從CentOS真機可ssh遠端訪問這兩臺虛擬機器

[root@room9pc00 ~]# ssh  -X  [email protected] 
[email protected]'s password:                           //驗證svr7的root密碼
Last login: Sun Mar 26 11:30:35 2017 from 192.168.4.254
[root@svr7 ~]# exit
[root@room9pc00 ~]# ssh  -X  [email protected] 
[email protected]'s password:                           //驗證pc207的root密碼
Last login: Sun Mar 26 11:32:35 2017 from 192.168.4.254
[root@pc207 ~]# exit
[root@room9pc00 ~]#

六.離線訪問虛擬機器

使用guestmount工具
支援離線掛載raw、qcow2格式虛擬機器磁碟
可以在虛擬機器關機的情況下,直接修改磁碟中的文件
方便對虛擬機器定製、修復、指令碼維護

注意:SELinux機制的影響

基本用法
guestmount -a 虛擬機器磁碟路徑 -i /掛載點

例子:

mkdir /munt/kdisk
guestmount -a node1.qcow2 -i /mnt/kdisk
ls /mnt/kdisk

終.問題解決

遠端連線仍需驗證

使用virt-manager管理遠端KVM主機,新增連線時選擇“自動連線”看不到效果,每次連線或開啟某個虛擬機器仍需要驗證密碼,使用不方便

原因分析:
SSH是virt-manager採用的一種安全認證方式,每次新連線都需要重新認證

解決辦法:
為ssh連線改用公鑰驗證,免除密碼互動
若沒有金鑰對檔案,則應先使用ssh-keygen生成
ssh-copy-id [email protected] //上傳公鑰

本文版權歸作者所有,歡迎轉載,請務必新增原文連結。