虛擬化KVM

虛擬化KVMhtml


1.虛擬化介紹linux


VMware Workstation就是虛擬化windows

  • 虛擬化簡單講,就是把一臺物理計算機虛擬成多臺邏輯計算機,每一個邏輯計算機裏面能夠運行不一樣的操做系統,相互不受影響,每一個邏輯系統都是獨立的存在,這樣就能夠充分利用物理硬件的資源,並且還能夠自由分配資源。centos

  • 關鍵詞Hypervisor(VMM) 虛擬機管理器(用來管理邏輯計算機的)安全

  • 虛擬化技術分爲全虛擬化和半虛擬化bash

      早期的CPU硬件不支持虛擬化,虛擬機上的操做系統(guestos)要想使用cpu資源,須要經過VMM來翻譯指令,這個過程比較耗費資源,這種虛擬化技術叫作全虛擬化             (VMware Workstation)服務器

    半虛擬化技術經過修改guestos內核,讓guestos能夠直接使用CPU資源,而不須要翻譯指令了,從而節省了資源,但修改內核比較雞肋(XEN)網絡

    後續cpu廠商直接支持虛擬化,不須要經過VMM翻譯指令了,無所謂半虛擬化和全虛擬化架構

  • 虛擬化技術的優勢:運維

      資源池——一個物理機的資源分配到了不一樣的虛擬機裏

      很容易擴展——增長物理機或者虛擬機便可,由於虛擬機是能夠複製的

      很容易雲化——亞馬孫AWS,阿里雲,谷歌雲等


  • 虛擬化技術的侷限性:

      每個虛擬機都是一個完整的操做系統,因此須要給其分配物理資源,當虛擬機數量增多時,操做系統自己消耗的資源勢必增多

      虛擬化技術無法解決運維環境和開發環境的矛盾,因此後來纔出現了容器技術

參考 

虛擬化技術漫談

全虛擬化和半虛擬化的區別 cpu的ring0 ring1又是什麼概念

三種虛擬化技術的技術差異圖解



2.常見虛擬化軟件


VMware系列

VMware workstation、VMware vsphere(VMware esxi)、VMware Fusion(Mac) 

Xen 開源 半虛擬化(須要改機器的內核)

XenServer 商業,廠商Ctirx,基於Xen的(Ctirt把xen收購了)

KVM 開源 基於linux內核模塊(被紅帽子最後收購)

Hyper-V 商業,微軟旗下的產品(適合在微軟的操做系統上安裝)

Openvz 開源  基於linux 特色:虛擬機和宿主機共用一個內核(若是你宿主機的內核崩潰那麼你虛擬機的內核也會崩潰)

VirtualBox 開源  Sun公司開發  Oracle收購Sun

http://developer.huawei.com/ict/forum/thread-23385-1-1.html

軟件特色:

  • VMware系列,商業

            VMware Workstation,適合單機使用

            VMware Vsphere(VMware esxi),適合規模更大的場景

            VMware Fusion(Mac)

  • Xen    開源,支持半虛擬化

  • XenServer    商業,Ctirx收購Xen以後研發的,基於Xen的

  • KVM    開源 ,基於Linux內核模塊,目前KVM已經被紅帽收購了,大多數系統都傾向於使用KVM

  • Hyper-V    商業,微軟的產品,適合在windows服務器上用

  • Openvz    開源 ,輕量,基於Linux,虛擬機和宿主機共用一個內核,優勢是一臺物理機能夠虛擬化不少臺虛擬機,缺點是不穩定,物理機的內核奔潰,全部的虛擬機都會崩潰,早期vps供應商用得比較多

  • VirtualBox    開源 ,Sun公司開發 ,Oracle收購Sun以後,如今屬於Oracle


3.虛擬化架構

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

I型:虛擬機直接運行在系統硬件上,建立硬件全仿真實例,被稱爲「裸機」,也稱爲裸金屬架構。


II型:虛擬機運行在傳統操做系統上,一樣建立的是硬件全仿真實例,被稱爲「託管」hypervisor。也稱爲宿主架構。


Xen屬於I型,KVM屬於II型。



4.KVM介紹

簡介1

  • KVM是以色列初創公司Qumranet開發,2008年9月RedHat公司收購了Qumranet

  • KVM是Linux內核的一個模塊,它把Linux內核變成了一個Hypervisor

  • KVM是徹底開源的,RedHat基於KVM的虛擬化解決方案叫作RHEV

  • KVM在Linux操做系統裏面以進程的形式出現,由標準的Linux調度程序進行調度,這使得KVM可以使用Linux內核的已有功能

  • 只有一個KVM內核模塊還不能實現虛擬化的所有功能,就比如操做系統只有內核還不能成爲一個完整的操做系統同樣

  • QEMU是一個開源的虛擬化軟件,純軟件,能夠虛擬化因此的硬件,性能不強

  • KVM基於QEMU開發了一個可以運行在用戶空間的工具QEMU-KVM

  • 磁盤、網絡設備等都是經過QEMU-KVM這個工具模擬出來的

  • KVM和QEMU-KVM通訊是經過/dev/kvm實現的

  • libvirt是用來管理KVM虛擬機的API,其命令爲virsh

簡介2

  1. 這裏只介紹KVM而不介紹其餘虛擬化軟件的緣由有兩點,一是咱們大多數的服務器系統都是Linux內核的操做系統,而KVM是基於Linux內核的。二是KVM是開源、免費的,其餘的例如VMware Vsphere、XenServer等都是商業收費的,而Hyper-V 又是Windows的,Openvz 又有侷限性(與宿主共用內核,就沒法安裝其餘內核的虛擬機),穩定性也有待考究,VirtualBox又不適合大規模的虛擬化場景,因此最後就只剩下KVM了。

  2. KVM是Kernel-based Virtual Machine的縮寫,意爲基於內核的虛擬機。KVM是一個徹底開源的系統虛擬化模塊,它所基於的是Linux內核,它把Linux內核變成了一個Hypervisor,自Linux 2.6.20以後集成在Linux的各個主要發行版本中。它使用Linux自身的調度器進行管理,因此相對於Xen,其核心源碼不多。KVM目前已成爲學術界的主流VMM之一。

  3. 最開始KVM是由以色列初創公司Qumranet開發,後來2008年9月RedHat公司收購了Qumranet,RedHat基於KVM的虛擬化解決方案叫作RHEV,不過RHEV是收費的。

  4. KVM的虛擬化須要硬件支持(如Intel VT技術或者AMD V技術)。是基於硬件的徹底虛擬化。而Xen早期則是基於軟件模擬的Para-Virtualization,新版本則是基於硬件支持的徹底虛擬化。但Xen自己有本身的進程調度器,存儲管理模塊等,因此代碼較爲龐大。廣爲流傳的商業系統虛擬化軟件VMware ESX系列是基於軟件模擬的Full-Virtualization。

  5. KVM在Linux操做系統裏面以進程的形式出現,由標準的Linux調度程序進行調度,這使得KVM可以使用Linux內核的已有功能。可是隻有一個KVM內核模塊還不能實現虛擬化的所有功能,就比如操做系統只有內核還不能成爲一個完整的操做系統同樣。因此這就須要提到QEMU了,QEMU是一個開源的虛擬化軟件,純軟件,能夠虛擬化全部的硬件,性能不強。而KVM基於QEMU開發了一個可以運行在用戶空間的工具QEMU-KVM,KVM裏的磁盤、網絡設備等都是經過QEMU-KVM這個工具模擬出來的,因此KVM結合QEMU-KVM工具以後纔算完整,KVM和QEMU-KVM通訊是經過/dev/kvm實現的。其中libvirt是用來管理KVM虛擬機的API,其命令爲virsh。

KVM架構圖

image.png


5.Centos7上安裝KVM


前提是CPU支持虛擬化

1.虛擬機設置內存4G(根據實際的實驗需求來)

image.png

2.處理器2核,虛擬化引擎兩個虛擬化相關的選項打上對勾(若是在啓動機器時報「CPU性能計數器問題」能夠把下邊的虛擬化CPU性能計數器的√去掉,只要前邊的)

image.png

3.增長一個50G的虛擬磁盤

image.png

4.開啓虛擬機


檢查cpu參數是否支持虛擬化  

grep -Ei 'vmx|svm' /proc/cpuinfo

vmx(標識):英特爾CPU

svm(標識):AMD

image.png

準備工做-關閉防火牆

關閉iptables或者firewalld

關閉selinux

格式化新磁盤,掛載到/kvm_data

查看新磁盤

image.png

這裏不用分區直接格式化

image.png

查看你格式化磁盤的格式

image.png

建立/kvm_data目錄並把新磁盤掛在到該目錄下

[root@localhost ~]# mkdir  
[root@localhost ~]# mount /dev/sdb /kvm_data/

image.png

編輯配置文件讓磁盤開機自動掛載到目錄下:vi /etc/fstab

/dev/sdb                /kvm_data               ext4    defaults        0 0

image.png

下載一個centos7的鏡像文件

安裝kvm

yum install -y  virt-*  libvirt  bridge-utils qemu-img


6.配置網卡並安裝centos7


配置網卡,增長橋接網卡

拷貝現有網卡並更名爲br0

cp ifcfg-eno16777736 ifcfg-br0

編輯網卡br0更改一些東西

TYPE=Bridge
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes
PREFIX=24
IPADDR=192.168.18.128
NETMASK=225.225.225.0
GATEWAY=192.168.18.2
DNS1=114.114.114.114
DNS2=8.8.8.8

把以前的網卡也更改一下(其餘IP都去掉BRIDGE=br0意思是橋接到br0往卡上)

TYPE=Ethernet
BOOTPROTO=none
NAME=eno16777736
DEVICE=eno16777736
ONBOOT=yes
BRIDGE=br0

配置完重啓網卡服務

systemctl restart network

配置成功橋接網卡以後你會發現br0是以前網卡的IP

image.png

檢查KVM模塊是否加載

lsmod|grep kvm

image.png

啓動libvirtd服務

systemctl start  libvirtd

檢查進程在不在

ps aux|grep libvirt

image.png

命令:brctl show

能夠看到兩個網卡br0和virbr0

image.png

virbr0:是libvirtd服務啓動起來的一個橋接網卡跟咱們橋接的br0網卡不同

爲何有兩個,由於分別表明兩種網絡模式,由於vmware能夠用鼠標點換網絡模式,而kvm只能在系統裏換,就須要有兩個模式,以後配置你指向哪一個就是哪一個模式

virbr0:NAT模式

br0:橋接模式


7.命令行安裝centos7


virt-install --name=awei-01 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1804.iso --disk path=/kvm_data/awei-01.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial  --extra-args="console=tty0 console=ttyS0"

命令說明:

  • --name 指定虛擬機的名稱

  • --memory 指定分配給虛擬機的內存資源大小

  • --maxmemory 指定可調節的最大內存資源大小,由於KVM支持熱調整虛擬機的資源

  • --vcpus 指定分配給虛擬機的CPU核心數量

  • --maxvcpus 指定可調節的最大CPU核心數量

  • --os-type 指定虛擬機安裝的操做系統類型

  • --os-variant 指定系統的發行版本

  • --location 指定ISO鏡像文件所在的路徑,支持使用網絡資源路徑,也就是說可使用URL

  • --disk path 指定虛擬硬盤所存放的路徑及名稱,size 則是指定該硬盤的可用大小,單位是G

  • --bridge 指定使用哪個橋接網卡,也就是說使用橋接的網絡模式

  • --graphics 指定是否開啓圖形

  • --console 定義終端的屬性,target_type 則是定義終端的類型

  • --extra-args 定義終端額外的參數

報錯:

image.png

解決辦法:yum install -y openssl-1.0.2k*

開始安裝前的檢測硬件:這時候其實已經進入了一個虛擬終端了,按Ctrl+]退出終端,可是咱們不能退出來

image.png

開始安裝(翻譯)

1) [x] Language settings 語言設置                2) [!] Time settings 時間設置

        (English (United States)) 英語(美國)              (Timezone is not set.) 未設置時區

 3) [!] Installation source 安裝源                   4) [!] Software selection 軟件選擇

        (Processing...) 正在處理                                 (Processing...) 正在處理

 5) [!] Installation Destination 安裝目標        6) [x] Kdump 

        (No disks selected) 未選擇磁盤                     (Kdump is enabled) Kdump已啓用

 7) [ ] Network configuration 網絡配置        8) [!] Root password 跟密碼

        (Not connected) 未鏈接                               (Password is not set.) 未設置密碼

 9) [!] User creation 建立用戶

        (No user will be created) 不會建立用戶

  Please make your choice from above ['q' to quit | 'b' to begin installation |

  'r' to refresh]:                      請從上面選擇['q'退出|'b'開始安裝|"r"刷新:

  • 語言配置

  1. 配置語言-敲「1」回車

image.png

2.再回車-選擇「68」項中文

image.png

3.在選擇中文類別「1」中文簡體

image.png

  • 時區設置

  1. 敲「2」回車-選擇「1」時區設置-回車

image.png

2.選擇「2」亞洲-回車

image.png

3.回車-選擇「64」上海

  • 配置安裝目標

敲「5」回車-選擇「c」-回車

Installation

 1) [x] Language settings            2) [x] Time settings
     (Simplified Chinese (China))        (Asia/Shanghai timezone)
 3) [x] Installation source           4) [x] Software selection
     (Local media)                (Minimal Install)
 5) [!] Installation Destination         6) [x] Kdump
     (No disks selected)             (Kdump is enabled)
 7) [ ] Network configuration          8) [!] Root password
     (Not connected)               (Password is not set.)
 9) [!] User creation
     (No user will be created)
  Please make your choice from above ['q' to quit | 'b' to begin installation |
  'r' to refresh]: 5
================================================================================
================================================================================
Probing storage...
Installation Destination

[x] 1) : 10 GiB (vda)

1 disk selected; 10 GiB capacity; 10 GiB free ...

  Please make your choice from above ['q' to quit | 'c' to continue |
  'r' to refresh]: c
================================================================================
================================================================================
Autopartitioning Options

[ ] 1) Replace Existing Linux system(s)

[x] 2) Use All Space

[ ] 3) Use Free Space

Installation requires partitioning of your hard drive. Select what space to use
for the install target.

  Please make your choice from above ['q' to quit | 'c' to continue |
  'r' to refresh]: 2
================================================================================
================================================================================
Autopartitioning Options

[ ] 1) Replace Existing Linux system(s) 替換現有的Linux系統

[x] 2) Use All Space 利用全部空間

[ ] 3) Use Free Space 使用可用空間

Installation requires partitioning of your hard drive. Select what space to use
for the install target.

  Please make your choice from above ['q' to quit | 'c' to continue |
  'r' to refresh]: c 默認就能夠
================================================================================
================================================================================
Partition Scheme Options

[ ] 1) Standard Partition 標準分區 

[ ] 2) Btrfs Btrfs系統

[x] 3) LVM 

[ ] 4) LVM Thin Provisioning LVM精簡資源調配

Select a partition scheme configuration.

  Please make your choice from above ['q' to quit | 'c' to continue |
  'r' to refresh]: 1
================================================================================
================================================================================
Partition Scheme Options

[x] 1) Standard Partition

[ ] 2) Btrfs

[ ] 3) LVM

[ ] 4) LVM Thin Provisioning

Select a partition scheme configuration.

  Please make your choice from above ['q' to quit | 'c' to continue |
  'r' to refresh]: c 完成

翻譯:

[ ] 1) Replace Existing Linux system(s) 替換現有的Linux系統

[x] 2) Use All Space 利用全部空間

[ ] 3) Use Free Space 使用可用空間

  • 設置root密碼

Installation

 1) [x] Language settings                 2) [x] Time settings
        (Simplified Chinese (China))             (Asia/Shanghai timezone)
 3) [x] Installation source               4) [x] Software selection
        (Local media)                            (Minimal Install)
 5) [x] Installation Destination          6) [x] Kdump
        (Automatic partitioning                  (Kdump is enabled)
        selected)                         8) [!] Root password
 7) [ ] Network configuration                    (Password is not set.)
        (Not connected)
 9) [!] User creation
        (No user will be created)
  Please make your choice from above ['q' to quit | 'b' to begin installation |
  'r' to refresh]: 8
================================================================================
================================================================================
Please select new root password. You will have to type it twice.

Password: 
Password (confirm): 
================================================================================
================================================================================
Question

The password you have provided is weak: The password fails the dictionary check 您提供的密碼很弱:密碼沒法經過字典檢查 
- it is too simplistic/systematic. 它過於簡單化/系統化
Would you like to use it anyway? 你想用它嗎?

Please respond 'yes' or 'no': yes 請回答「是」或「否」:
  • 配置完這幾項以後選「b」開始安裝

image.png

按回車繼續進行重啓

image.png


8.虛擬機管理


命令整合

[root@localhost ~]# virsh list //查看虛擬機列表,只能看到運行的虛擬機

[root@localhost ~]# virsh list --all //查看虛擬機列表,包括未運行的虛擬機

[root@localhost ~]# virsh console awei-01  # 進入指定的虛擬機,進入的時候還須要按一下回車

[root@localhost ~]# virsh start awei-01  # 啓動虛擬機

[root@localhost ~]# virsh shutdown awei-01  # 關閉虛擬機

[root@localhost ~]# virsh destroy awei-01  # 強制中止虛擬機

[root@localhost ~]# virsh undefine awei-01  # 完全銷燬虛擬機,會刪除虛擬機配置文件,但不會刪除虛擬磁盤

[root@localhost ~]# virsh autostart awei-01  # 設置宿主機開機時該虛擬機也開機

[root@localhost ~]# virsh autostart --disable awei-01  # 解除開機啓動

[root@localhost ~]# virsh suspend awei-01 # 掛起虛擬機

[root@localhost ~]# virsh resume awei-01 # 恢復掛起的虛擬機

ctrl+] //退出虛擬機使用快捷鍵

ps aux |grep kvm //查看kvm進程

virsh list //查看虛擬機列表,只能看到運行的虛擬機

[root@awei-01 ~]# virsh list
 Id    名稱                         狀態
----------------------------------------------------
 2     awei-02                        running

virsh list --all //查看虛擬機列表,包括未運行的虛擬機

[root@awei-01 ~]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     awei-02                        running
 -     awei-01                        關閉

virsh console awei-01//進入指定虛擬機 鏈接完以後要回車進去

image.png

virsh undefine awei-01//完全銷燬虛擬機,會刪除虛擬機配置文件,virsh list --all就看不到了 (配置文件在/etc/libvirt/qemu裏邊)

image.png

要想完全刪除這個虛擬機須要刪除「虛擬磁盤文件」在kvm的根目錄裏/kvm_data

image.png

ls /etc/libvirt/qemu/  //能夠查看虛擬機配置文件


9.克隆虛擬機


克隆虛擬機是虛擬機軟件必須得有的功能,這樣能省去咱們安裝系統及環境的時間,若是使用過VMware、VirtualBox等虛擬機軟件的話,都知道有這個功能,KVM也不例外,只不過咱們沒有用圖形化界面,是命令行形式的而已。


要克隆某個虛擬機,首先這個虛擬機須要爲關閉狀態:

virsh shutdown awei-01

[root@awei-01 ~]# virsh shutdown awei-01
域 awei-01 被關閉

而後執行如下命令進行克隆:

virt-clone  --original awei-01 --name awei-02 --file /kvm_data/awei-02.img

[root@awei-01 ~]# virt-clone  --original awei-01 --name awei-02 --file /kvm_data/awei-02.img
正在分配 'awei-02.img'                                                                                    |  10 GB  00:00:37     

成功克隆 'awei-02'。

virsh list --all 查看一下會多出一臺awei-02的機器

[root@awei-01 ~]# virsh list --all
 Id    名稱                        狀態
----------------------------------------------------
 -     awei-01                      關閉
 -     awei-02                      關閉

參數說明

  • --original指定克隆源虛擬機

  • --name指定克隆後的虛擬機名字

  • --file指定目標虛擬機的虛擬磁盤文件

若是aminglinux01虛擬機開機狀態,則提示先關閉或者暫停虛擬機

  • 爲了方便管理,咱們能夠退出虛擬終端,在外邊遠程鏈接它進行操做

[root@awei-01 ~]# ssh 192.168.18.130
The authenticity of host '192.168.18.130 (192.168.18.130)' can't be established.
ECDSA key fingerprint is b8:43:75:b8:96:d0:42:d8:0b:5e:89:64:60:e0:73:c7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.18.130' (ECDSA) to the list of known hosts.
root@192.168.18.130's password: 密碼
Last login: Wed May 13 09:40:39 2020
[root@localhost ~]# w
 17:12:03 up 1 min,  2 users,  load average: 0.17, 0.10, 0.04
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     ttyS0                     09:40    7:31m  0.11s  0.11s -bash
root     pts/0    192.168.18.128   17:11    3.00s  0.01s  0.01s w


10.快照管理


一樣的建立快照也是虛擬機軟件的一個很重要的功能,快照可以很方便的幫咱們把虛擬機恢復到一個正常的狀態下。咱們來看看命令行下如何使用KVM建立虛擬機的快照:

建立快照  virsh snapshot-create awei-01

[root@awei-01 ~]# virsh snapshot-create awei-01
已生成域快照 1589336112

raw格式的虛擬磁盤不支持作快照,qcow2支持

qemu-img info /kvm_data/awei-01.img //查看aminglinux01.img信息,同時會查看到快照列表(由於快照是作的磁盤快照)

[root@awei-01 ~]# qemu-img info /kvm_data/awei-01.img
image: /kvm_data/awei-01.img
file format: qcow2 ##虛擬磁盤格式
virtual size: 10G (10737418240 bytes) # 虛擬磁盤的總大小
disk size: 1.3G # 虛擬磁盤目前所佔用的物理磁盤大小
cluster_size: 65536 
Snapshot list: # 快照列表
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         1589336112                0 2020-05-13 10:15:12   00:00:00.000
Format specific information:
    compat: 1.1
    lazy refcounts: true

virsh snapshot-list aminglinux01 //列出全部快照

[root@awei-01 ~]# virsh snapshot-list awei-01
 名稱               生成時間              狀態
------------------------------------------------------------
 1589336112           2020-05-13 10:15:12 +0800 shutoff
[root@awei-01 ~]# virsh snapshot-list awei-02
 名稱               生成時間              狀態
------------------------------------------------------------

virsh snapshot-current awei-01//查看當前快照版本

ls /var/lib/libvirt/qemu/snapshot/awei-01//查看全部快照配置文件

virsh snapshot-revert awei-01 1513440854//恢復指定快照

virsh snapshot-delete awei-01  1513440854//刪除快照


11.磁盤格式


虛擬磁盤經常使用格式有raw和qcow2,以上咱們也提到了raw格式的虛擬磁盤不支持建立快照,qcow2格式的虛擬磁盤才支持建立快照。

qemu-img info /kvm_data/awei-01.img//查看虛擬磁盤格式

[root@awei-01 ~]# qemu-img info /kvm_data/awei-01.img 
image: /kvm_data/awei-01.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.3G
cluster_size: 65536
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         1589336112                0 2020-05-13 10:15:12   00:00:00.000
Format specific information:
    compat: 1.1
    lazy refcounts: true

建立一個2G大小的raw格式的虛擬磁盤,-f選項用於指定虛擬磁盤的格式

qemu-img create -f raw /kvm_data/awei-01_2.img 2G//建立2G的raw格式磁盤

[root@awei-01 ~]# qemu-img create -f raw /kvm_data/awei-01_2.img 2G
Formatting '/kvm_data/awei-01_2.img', fmt=raw size=2147483648

把raw格式的磁盤轉換爲qcow2格式

qemu-img convert -O qcow2 /kvm_data/awei-01_2.img /kvm_data/awei-01_2.qcow2

[root@awei-01 ~]# qemu-img info /kvm_data/awei-01_2.img ##先查看原來的磁盤格式
image: /kvm_data/awei-01_2.img
file format: raw ##raw格式的
virtual size: 2.0G (2147483648 bytes)
disk size: 0
[root@awei-01 ~]# qemu-img convert -O qcow2 /kvm_data/awei-01_2.img /kvm_data/awei-01_2.qcow2 ##raw格式轉換爲qcow2格式
[root@awei-01 ~]# qemu-img info /kvm_data/awei-01_2.qcow2 ##查看轉換以後的
image: /kvm_data/awei-01_2.qcow2
file format: qcow2 ##成功轉換爲acow2格式
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

如上,與其說是轉換,不如說是從raw格式的磁盤複製了一份格式爲qcow2磁盤出來,由於本來的磁盤並不會發生任何的變化,而是從這個raw格式磁盤的基礎上覆製出來了一個新的qcow2格式的磁盤。

轉換後用ls -lh查看磁盤文件的大小,能夠看到qcow2格式的磁盤文件比較小,raw格式的磁盤文件大小和咱們指定空間大小同樣是2G:

[root@awei-01 kvm_data]# ls -lh
總用量 2.7G
-rw-r--r-- 1 root root 2.0G 5月  13 20:39 awei-01_2.img
-rw-r--r-- 1 root root 193K 5月  13 20:41 awei-01_2.qcow2
-rw------- 1 root root  11G 5月  13 10:15 awei-01.img
-rw------- 1 qemu qemu 1.4G 5月  13 20:49 awei-02.img
drwx------ 2 root root  16K 5月   9 01:28 lost+found

PS:raw格式的磁盤性能比qcow2要好,可是raw格式的磁盤沒法作快照

使用du -sh命令查看則不同了,raw格式的磁盤文件大小是0,而qcow2格式的磁盤文件大小則是和咱們使用ls -lh查看的同樣:

[root@awei-01 kvm_data]# du -sh *
0   awei-01_2.img
196K awei-01_2.qcow2
1.4G awei-01.img
1.4G awei-02.img
16K lost+found

這就是raw格式的虛擬磁盤文件和qcow2格式的虛擬磁盤文件在物理磁盤存儲上的區別

給aminglinux02轉換爲raw格式的磁盤

先把awei-02虛擬機關閉

virsh shutdown awei-02

qemu-img convert -O raw /kvm_data/awei-02.img /kvm_data/awei-02_3.raw

[root@awei-01 kvm_data]# qemu-img convert -O raw /kvm_data/awei-02.img /kvm_data/awei-02_3.raw
[root@awei-01 kvm_data]# ls -l
總用量 4113052
-rw-r--r-- 1 root root  2147483648 5月  13 20:39 awei-01_2.img
-rw-r--r-- 1 root root      197120 5月  13 20:41 awei-01_2.qcow2
-rw------- 1 root root 10739384832 5月  13 10:15 awei-01.img
-rw-r--r-- 1 root root 10737418240 5月  14 02:26 awei-02_3.raw # 此時的屬組屬主爲root
-rw------- 1 root root  1407254528 5月  14 02:09 awei-02.img
drwx------ 2 root root       16384 5月   9 01:28 lost+found

virsh edit awei-02//更改格式和文件路徑

     <driver name='qemu' type='raw'/>
      <source file='/kvm_data/awei-02_3.raw'/>

啓動:virsh start aminglinux02

能夠發現啓動狀態的虛擬機的磁盤文件的屬組屬主會發生改變

[root@awei-01 kvm_data]# ls -l
總用量 4113052
-rw-r--r-- 1 root root 2147483648 5月  13 20:39 awei-01_2.img
-rw-r--r-- 1 root root 197120 5月  13 20:41 awei-01_2.qcow2
-rw------- 1 root root 10739384832 5月  13 10:15 awei-01.img
-rw-r--r-- 1 qemu qemu 10737418240 5月  14 02:26 awei-02_3.raw # 此時的屬組屬主爲qemu
-rw------- 1 root root 1407254528 5月  14 02:09 awei-02.img
drwx------ 2 root root 16384 5月   9 01:28 lost+found

此時若是要給study02製做快照就會報以下錯誤:

[root@awei-01 kvm_data]# virsh snapshot-create awei-02
錯誤:不支持的配置:存儲類型 vda 不支持磁盤 raw 的內部快照



12.磁盤擴容 – raw格式


以上介紹了虛擬磁盤格式的,以及如何轉換虛擬磁盤格式,下面咱們來看看如何進行磁盤擴容:

[root@awei-01 kvm_data]# ls -lh /kvm_data/awei-02_3.raw
-rw-r--r-- 1 qemu qemu 10G 5月  14 03:03 /kvm_data/awei-02_3.raw
[root@awei-01 kvm_data]# qemu-img resize /kvm_data/awei-02_3.raw +2G
Image resized.
[root@awei-01 kvm_data]# ls -lh /kvm_data/awei-02_3.raw
-rw-r--r-- 1 qemu qemu 12G 5月  14 03:08 /kvm_data/awei-02_3.raw


如上能夠看到,本來的10G變成12G了,可是此時進入虛擬機中會發現磁盤依舊是10G:


[root@localhost ~]# fdisk -l
磁盤 /dev/vda:10.7 GB, 10737418240 字節,20971520 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標籤類型:dos
磁盤標識符:0x000ab192
   設備 Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     2099199     1048576   83  Linux
/dev/vda2         2099200     4196351     1048576   82  Linux swap / Solaris
/dev/vda3         4196352    20971519     8387584   83  Linux


這是由於尚未生效,須要重啓虛擬機才能生效,可是注意這個重啓要在宿主機上使用virsh命令進行重啓,以下:


[root@awei-01 kvm_data]# virsh destroy awei-02
域 awei-02 被刪除

[root@awei-01 kvm_data]# virsh start awei-02
域 awei-02 已開始

[root@awei-01 kvm_data]# virsh console awei-02
鏈接到域 awei-02
換碼符爲 ^]
[root@localhost ~]# fdisk -l

磁盤 /dev/vda:12.9 GB, 12884901888 字節,25165824 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標籤類型:dos
磁盤標識符:0x000ab192

   設備 Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     2099199     1048576   83  Linux
/dev/vda2         2099200     4196351     1048576   82  Linux swap / Solaris
/dev/vda3         4196352    20971519     8387584   83  Linux


而後還須要把這2G的空間分區纔可使用,由於咱們安裝這個系統的時候選擇的是標準分區,因此沒法像LVM分區那樣直接擴容邏輯卷:


[root@localhost ~]# fdisk /dev/vda

歡迎使用 fdisk (util-linux 2.23.2)。

 

更改將停留在內存中,直到您決定將更改寫入磁盤。

使用寫入命令前請三思。

 

命令(輸入 m 獲取幫助):n  # 新建分區

Partition type:

   p   primary (3 primary, 0 extended, 1 free)

   e   extended

Select (default e): p  # 選擇新建主分區

已選擇分區 4

起始 扇區 (20971520-25165823,默認爲 20971520):  # 默認便可,直接按回車

將使用默認值 20971520

Last 扇區, +扇區 or +size{K,M,G} (20971520-25165823,默認爲 25165823): # 默認便可,直接按回車

將使用默認值 25165823

分區 4 已設置爲 Linux 類型,大小設爲 2 GiB

 

命令(輸入 m 獲取幫助):p  # 再次查看磁盤信息

 

磁盤 /dev/vda:12.9 GB, 12884901888 字節,25165824 個扇區

Units = 扇區 of 1 * 512 = 512 bytes

扇區大小(邏輯/物理):512 字節 / 512 字節

I/O 大小(最小/最佳):512 字節 / 512 字節

磁盤標籤類型:dos

磁盤標識符:0x00003436

 

   設備 Boot      Start         End      Blocks   Id  System

/dev/vda1   *        2048     1026047      512000   83  Linux

/dev/vda2         1026048     3123199     1048576   82  Linux swap / Solaris

/dev/vda3         3123200    20971519     8924160   83  Linux

/dev/vda4        20971520    25165823     2097152   83  Linux  # 能夠看到多了一個/dev/vda4分區

 

命令(輸入 m 獲取幫助):w  # 保存退出


除了對已有磁盤擴容外,還能夠額外增長磁盤,宿主機下執行如下命令:


[root@localhost ~]# qemu-img create -f raw /kvm_data/awei-02_2.raw 5G #先增長一塊磁盤
Formatting '/kvm_data/study02_2.raw', fmt=raw size=5368709120 
[root@localhost ~]# qemu-img info /kvm_data/awei-02_2.raw ##查看剛增長的磁盤大小
image: /kvm_data/awei-02_2.raw
file format: raw
virtual size: 5.0G (5368709120 bytes)
disk size: 0
[root@localhost ~]# virsh edit awei-02  # 編輯配置文件,在本來的<disk>標籤下增長如下內容
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/kvm_data/awei-02_2.raw'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </disk>
[root@localhost ~]# virsh destroy awei-02
Domain study02 destroyed
 
[root@localhost ~]# virsh start awei-02
Domain awei-02 started
 
[root@localhost ~]#


qemu-img resize /kvm_data/aminglinux02_3.raw +2G

qemu-img info /kvm_data/aminglinux02_3.raw 

virsh destroy aminglinux02

virsh start aminglinux02

virsh console aminglinux02

fdisk -l 查看磁盤狀況,並分新的分區

除了對已有磁盤擴容外,還能夠額外增長磁盤

qemu-img create -f raw /kvm_data/aminglinux02_2.raw 5G

virsh edit aminglinux02 //增長<disk>…</disk>,注意更改source、target、slot

virsh destroy aminglinux02

virsh start aminglinux02


13.磁盤擴容 – qcow2格式


qcow2格式的虛擬磁盤的擴容方式和raw格式的是同樣的,只不過須要注意的是,若是虛擬磁盤保存了快照,則沒法擴容會報錯,以下:

[root@awei-01 kvm_data]# qemu-img info /kvm_data/awei-01.img 
image: /kvm_data/awei-01.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.3G
cluster_size: 65536
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         1589336112                0 2020-05-13 10:15:12   00:00:00.000
Format specific information:
    compat: 1.1
    lazy refcounts: true
[root@awei-01 kvm_data]# qemu-img resize /kvm_data/awei-01
awei-01_2.img    awei-01_2.qcow2  awei-01.img      
[root@awei-01 kvm_data]# qemu-img resize /kvm_data/awei-01.img +2G
qemu-img: Can't resize an image which has snapshots
qemu-img: This image does not support resize
qemu-img resize /kvm_data/aminglinux01.img +2G

須要把快照刪除後才能進行擴容:

[root@awei-01 kvm_data]# virsh snapshot-delete awei-01 1589336112
已刪除域快照 1589336112

[root@awei-01 kvm_data]# qemu-img resize /kvm_data/awei-01.img +2G
Image resized.
[root@awei-01 kvm_data]#

剩下的操做和上面演示的raw是同樣的,這裏就再也不演示了。

若是不但願刪除快照的話,就只能是建立一塊新的虛擬磁盤,操做方式也是和raw同樣的。

建議不論是raw格式的仍是qcow2格式的虛擬磁盤須要擴容,最好是使用新增硬盤的方式進行擴容,而不是在原有的磁盤上進行擴容,由於新增磁盤相對獨立與已有的磁盤,誤操做時也不容易對已有的磁盤形成影響。


14.調整cpu、內存、網卡


virsh dominfo awei-01 //查看配置

[root@awei-01 ~]# virsh dominfo awei-01
Id:             -
名稱:       awei-01
UUID:           e7db2f69-4a35-4ce4-ae14-a2f99820a700
OS 類型:    hvm
狀態:       關閉
CPU:          1
最大內存: 1048576 KiB
使用的內存: 524288 KiB
持久:       是
自動啓動: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
  • 調整cpu內存

virsh edit awei-01//更改以下部份內容

<memory unit='KiB'>2048576</memory> # 內存的最大大小
<currentMemory unit='KiB'>624288</currentMemory> # 目前使用的內存大小
<vcpu placement='static' current='2'>4</vcpu> # CPU的核心數量,current的值爲當前使用的核心數量,標籤的值則爲最大可以使用的核心數量

更改完配置文件以後,若是虛擬機是開機狀態的話須要重啓,關機狀態的話則直接啓動便可生效

[root@awei-01 ~]# virsh shutdown awei-01
域 awei-01 被關閉

[root@awei-01 ~]# virsh start awei-01
域 awei-01 已開始

這樣就完成了內存和CPU的調整,以上咱們是經過編輯配置文件來對內存和CPU的資源進行調整,須要重啓虛擬機以後才能生效。不過好在KVM是支持動態調整的,但前提是有設置最大的資源大小,例如以上的例子中,咱們將內存的最大大小設置了兩個G左右,那麼咱們就能夠在這兩個G之內動態的調整內存的大小,CPU也是同理。以下示例: 

[root@awei-01 ~]# virsh setmem awei-01 800m # 動態調整內存大小爲800M

[root@awei-01 ~]# virsh setvcpus awei-01 3 # 動態調整CPU核心數量爲3核

[root@awei-01 ~]# virsh dominfo awei-01 # 能夠看到無需重啓也生效了
Id:             6
名稱:       awei-01
UUID:           e7db2f69-4a35-4ce4-ae14-a2f99820a700
OS 類型:    hvm
狀態:       running
CPU:          3
CPU 時間:   34.7s
最大內存: 2049024 KiB
使用的內存: 819200 KiB
持久:       是
自動啓動: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0

# 想要動態調整的配置永久生效,則須要把當前配置寫入到配置文件裏去

virsh dumpxml awei-01 > /etc/libvirt/qemu/awei-01.xml

注:內存資源能夠動態的調大調小,而CPU資源只能動態地調大不能調小。


  • 調整網卡

virsh domiflist awei-01//查看網卡

[root@awei-01 ~]# virsh domiflist awei-01
接口     類型     源        型號      MAC
-------------------------------------------------------
vnet1      bridge     br0        virtio      52:54:00:b2:43:c4

如上,能夠看到目前該虛擬機只有一個網卡。


增長一塊新的網卡,並設置爲nat網絡模式(virbr0相似vmware的vmnet8),這裏若是寫--source br0,則網絡模式爲橋接

virsh attach-interface awei-01 --type bridge  --source virbr0

[root@awei-01 ~]# virsh attach-interface awei-01 --type bridge  --source virbr0
成功附加接口

[root@awei-01 ~]# virsh domiflist awei-01
接口     類型     源        型號      MAC
-------------------------------------------------------
vnet1      bridge     br0        virtio      52:54:00:b2:43:c4
vnet2      bridge     virbr0     rtl8139     52:54:00:fc:9a:ae

virsh dumpxml awei-01 > /etc/libvirt/qemu/awei-01.xml//須要把配置寫入到配置文件裏


這條命令末尾若是寫的是 --source br0 ,則是設置網絡模式爲橋接,和VMware裏的橋接模式同樣。--source是用於指定橋接到哪一塊網卡上。

例如咱們也能夠橋接到br0上:

virsh attach-interface awei-01 --type bridge  --source br0

[root@awei-01 ~]# virsh attach-interface awei-01 --type bridge  --source br0
成功附加接口

[root@awei-01 ~]# virsh domiflist awei-01
接口     類型     源        型號      MAC
-------------------------------------------------------
vnet1      bridge     br0        virtio      52:54:00:b2:43:c4
vnet2      bridge     virbr0     rtl8139     52:54:00:fc:9a:ae
vnet3      bridge     br0        rtl8139     52:54:00:8f:7f:cb

[root@awei-01 ~]#


15.遷移虛擬機


該方式要確保虛擬機是關機狀態

virsh shutdown awei-01

而後經過rsync命令將配置文件拷貝到另外一臺機器上:

[root@awei-01 ~]# rsync -av /etc/libvirt/qemu/awei-01.xml 192.168.77.128:/etc/libvirt/qemu/awei-01.xml

接着將虛擬機的磁盤文件也拷貝到另外一臺機器上:

[root@awei-01 ~]# virsh domblklist awei-01 ##查看虛擬機磁盤所在目錄
目標     源
------------------------------------------------
vda        /kvm_data/awei-01.img
hda        -
[root@awei-01 ~]# rsync -av /kvm_data/awei-01.img  192.168.77.128:/kvm_data/awei-01.img


最後就是在另外一臺機器上根據實際狀況修改虛擬機的配置文件,例如虛擬機的名稱要對得上,虛擬磁盤文件路徑要對得上等等,由於我這裏兩臺機器的環境都是同樣的,因此就不須要修改配置文件了,直接定義新虛擬機便可。如下這條命令在另外一臺機器上執行:

[root@awei-01 ~]# virsh define /etc/libvirt/qemu/awei-01.xml


修改磁盤路徑

virsh define /etc/libvirt/qemu/aminglinux03.xml //定義新虛擬機

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

相關文章
相關標籤/搜索