[ kvm ] 學習筆記 3:KVM 基礎功能詳解


1. 構建 KVM 環境

KVM 從誕生開始就需要硬件虛擬化的支持,KVM 必需的硬件虛擬化擴展分別是:Intel 的虛擬化技術(Intel VT)和 AMD 的 AMD-V 技術。首先處理器(CPU)要在硬件上支持VT 技術,還要在BIOS 中將其功能打開,KVM才能使用到。目前,多數流行的服務器和部分桌面處理器的 BIOS 都默認將 VT 打開了。

 

1.1 初始化操作系統

本次安裝系統為: CentOS 7 x64

 

查看 CPU 是否支持虛擬化:

[root@192.168.118.14 ~]#lscpu 
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             4
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Model name:            Intel Core Processor (Haswell)
Stepping:              1
CPU MHz:               2397.222
BogoMIPS:              4794.44
Virtualization:        VT-x
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0-3

 

 

lscpu 能夠查看當前主機是否開啟虛擬化功能,通過上面信息得知:

  CPU 型號:英特爾核心處理器

  核心:4

  虛擬化技術:VT-x

由於上面是通過 KVM 虛擬機,可以看到 Hypervisor vendor: KVM

 

確認模塊是否加載

[root@192.168.118.14 ~]#lsmod | egrep kvm
kvm_intel             162153  0 
kvm                   525259  1 kvm_intel
[root@192.168.118.14 ~]#ls /dev/kvm 
/dev/kvm

/dev/kvm 是 kvm 內核模塊提供給用戶空間 qemu-kvm 程序使用的一個控制接口,它提供了客戶機(Guest)操作系統運行所需要的模擬和實際的硬件設備環境。

 

1.2 安裝 qemu-kvm

CentOS 7 本地yum 就直接對 qemu-kvm 提供支持。

[root@192.168.118.14 ~]#yum list all | egrep qemu-kvm
qemu-kvm.x86_64                         10:1.5.3-105.el7               @yum     
qemu-kvm-common.x86_64                  10:1.5.3-105.el7               @yum     
qemu-kvm-tools.x86_64                   10:1.5.3-105.el7               yum
[root@192.168.118.14 ~]#yum install qemu-kvm -y
[root@192.168.118.14 ~]#ln -vs /usr/libexec/qemu-kvm /usr/bin/
‘/usr/bin/qemu-kvm’ -> ‘/usr/libexec/qemu-kvm’

 

1.3 啟動一個 kvm 虛擬機

這里使用 cirros 系統作為鏡像文件直接啟動,下載地址:http://download.cirros-cloud.net/

[root@192.168.118.14 ~]#qemu-kvm -smp 1 -m 512m /images/cirros-0.3.5-i386-disk.img 
VNC server running on `::1:5900'

-smp 指定cpu的核心數
-m 指定內存的大小

 

啟動完成,默認是以 VNC 的方式可以連接到控制台

通過 “Ctrl + Alt + 2” 切換到 QEMU 監視器窗口,在監視器窗口中可以執行一些命令,比如:info kvm 查看當前 QEMU 是否使用 KVM

通過 “Ctrl + Alt + 1” 切換到普通的客戶機命令行模式。

這樣一個普通的虛擬機就創建完畢,但是這依然無法正常提供服務。

 

2. KVM 核心基礎功能

KVM 采用完全虛擬化(Full Virtualization)技術,在KVM環境中運行的客戶機(Guest)操作系統是未經過修改的普通操作系統。在硬件虛擬化技術的支持下,內核的KVM模塊和 QEMU 的設備模擬協同工作,就構成了一整套與物理計算機系統完全一致的虛擬化的計算軟硬件系統。要運行一個完整的計算機系統,必要的子系統:處理器、內存、存儲、網絡、顯示等。

通過 qemu-kvm 可以創建一個基礎的虛擬機,在使用 qemu-kvm 時,不一定需要超級用戶(root)來操作,但是需要讓當前用戶對 /dev/kvm 這個接口具有可讀可寫的權限。另外,在涉及網絡配置、設備分配時,仍然需要 root 權限。如果使用 qemu-kvm 命令行創建虛擬機,默認是開啟了對 KVM 的支持,可以通過在 QEMU monitor(Ctrl+Alt+2)中執行 info kvm 命令查看是否顯示 "kvm support: enabled" ,如果沒有開啟,則在創建時,需要使用: qemu-kvm -enable-kvm

 

2.1 CPU 配置

在 QEMU-KVM中,QEMU 提供對 CPU 的模擬,展現給客戶機一定 CPU 數目和 CPU 的特性;在kvm開啟的情況下,客戶機中 CPU 指令的執行由硬件處理器的虛擬化功能來輔助執行,具有非常高的執行效率。

 

2.1.1 Vcpu 概念

QEMU/KVM 為客戶機提供了一整套的硬件系統環境,在客戶機看來其所擁有的 CPU 即是 vCPU(Virtual cpu)。在 KVM 環境中,每個客戶機都是一個標准的 Linux 進程(QEMU 進程),而每一個 vCPU 在宿主機中是 QEMU 進程派生的一個普通線程。在 虛擬化基礎 里已經提出過這個概念。

在普通的 Linux 系統中,進程一般有兩種執行模式:內核模式和用戶模式。而在 kvm 環境中,增加了第三種模式:客戶模式。vCPU 在三種執行模式下的不同分工:

(1)用戶模式(User mode)

  主要處理 I/O 的模擬和管理,由 QEMU 的代碼實現;

(2)內核模式(Kernel mode)

  這里的 內核模式 是 GuestOS 內核模式,主要處理特別需要高性能和安全相關的指令,如處理客戶模式到內核模式的轉換,處理客戶模式下 I/O 指令或其他特權指令引起的退出(VM-Exit),處理影子內存管理(shadow MMU);

(3)客戶模式(Guest mode)

  主要執行 Guest 中的大部分指令, I/O 和一些特權指令除外。

 

在系統的底層 CPU 硬件中需要有硬件輔助虛擬化技術的支持(Intel VT 或 AMD-V),宿主機就運行在硬件之上,KVM 的內核部分是作為可動態加載內核模塊運行在宿主機中的,其中一個模塊是和硬件無關的實現虛擬化核心基礎架構的kvm模塊,另一個是硬件平台相關的 kvm_intel(或 kvm_amd)模塊。而 KVM 中的一個客戶機是作為一個用戶空間進程(qemu-kvm)運行的,它和其他普通的用戶空間進程一樣由內核來調度使其運行在物理 cpu 上,不過它由 KVM 模塊的控制,可以在前面介紹的三種模式下運行。

 

2.1.2 kvm 支持的 CPU 模型

通過如下命令可以查看 qemu-kvm 支持的 CPU 類型:

[root@192.168.118.14 ~]#qemu-kvm -cpu ?

 

當不加 "-cpu" 參數啟動時,采用 "qemu64" 作為默認的 CPU 模型,演示如下:

[root@192.168.118.11 ~]#qemu-kvm /images/cirros-0.3.5-i386-disk.img -nographic
...
...
# cat /proc/cpuinfo 
processor   : 0
vendor_id   : AuthenticAMD
cpu family  : 6
model       : 13
model name  : QEMU Virtual CPU version 1.5.3
stepping    : 3
microcode   : 0x1000065
cpu MHz     : 3400.000
cache size  : 512 KB
fdiv_bug    : no
hlt_bug     : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 4
wp      : yes
flags       : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx lm up pni cx16 hypervisor lahf_lm abm sse4a vmmcall
bogomips    : 6800.00
clflush size    : 64
cache_alignment : 64
address sizes   : 43 bits physical, 48 bits virtual

客戶機中的 cpu mode: QEMU Virtual CPU version 1.5.3 這就是當前版本 QEMU 的 qemu64  cpu模型的名稱。在 QEMU 命令行,可以用 "-cpu mode" 來指定 客戶機中 cpu 模型,一般使用 "-cpu host"來指定客戶機中的cpu,表示將宿主機cpu的所有功能映射到客戶機中。

[root@192.168.118.11 ~]#egrep "model name" /proc/cpuinfo    # 宿主機中cpu類型
model name  : AMD Ryzen 5 2600 Six-Core Processor
model name  : AMD Ryzen 5 2600 Six-Core Processor            
model name  : AMD Ryzen 5 2600 Six-Core Processor            
model name  : AMD Ryzen 5 2600 Six-Core Processor            
[root@192.168.118.11 ~]#qemu-kvm -cpu host /images/cirros-0.3.5-i386-disk.img -nographic
...
...
# egrep "model name" /proc/cpuinfo # 客戶機中 cpu 類型
model name  : AMD Ryzen 5 2600 Six-Core Processor

 

2.1.3 進程的 cpu 親和性和 vcpu 綁定

通常在 smp 系統中, Linux 內核的進程調度器根據自有的調度策略將系統中的一個進程調度到某個 CPU 上執行。一個進程在前一個執行時間是在 cpuM(M為系統中的某 CPU 的 ID)上運行,而在后一個執行時間是在 cpuN上運行。這樣的情況在 Linux 中是很常見的,因為 Linux 對進程執行的調度采用時間片法則(即用完自己時間片立即暫停執行),而在默認情況下,一個普通進程或線程的處理器親和性體現在所有可用的 cpu 上,進程或線程有可能在這些 CPU 之中的任何一個上執行。

cpu 親和性的設置,是指將進程綁定到特定的一個或多個 CPU 上去執行,而不允許將進程調度到其他的 cpu 上。Linux 內核對進程的調度算法也是遵守進程的處理器親和性設置的。

設置親和性帶來的好處是:可以減少進程在多個 cpu 之間切換運行帶來的緩存命中失效(cache missing),從該進程運行的角度來看,可能性能得到了一定程度上的提升。

設置親和性帶來的壞處是:破壞了原有 SMP 系統中各個 cpu 的負載均衡(load balance),可能會導致整個系統的進程調度變得低效。

每個vcpu都是宿主機中一個普通的qemu線程,可以使用 taskset 工具對其設置處理器親和性,使其綁定到某一個或幾個固定的 CPU 上去調度。盡管 Linux 內核的進程調度算法已經很高效,在多數情況下不需要手工干預,不過,在虛擬化環境中有時必要將客戶機的 QEMU 進程或線程綁定到固定的邏輯 cpu 上。

 

第一步,隔離宿主機的兩個邏輯 CPU 專門供一個客戶機使用

1. 修改 grub.cfg 配置並重啟系統
[root@192.168.118.11 ~]#vim /etc/default/grub 
...
GRUB_CMDLINE_LINUX="isolcpus=2,3 crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
...

[root@192.168.118.11 ~]#grub2-mkconfig -o /boot/grub2/grub.cfg 
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-327.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-c0b3d6ef598f4904bb1c5a67fbc8640d
Found initrd image: /boot/initramfs-0-rescue-c0b3d6ef598f4904bb1c5a67fbc8640d.img
done
[root@192.168.118.11 ~]#reboot

2. 檢查是否生效

[root@192.168.118.11 ~]#ps -eLo psr | egrep 0 | wc -l
259
[root@192.168.118.11 ~]#ps -eLo psr | egrep 1 | wc -l
124
[root@192.168.118.11 ~]#ps -eLo psr | egrep 2 | wc -l
5
[root@192.168.118.11 ~]#ps -eLo psr | egrep 3 | wc -l
5

[root@192.168.118.11 ~]#ps -eLo ruser,pid,ppid,lwp,psr,args | awk '{if($5==2){print $0}}'
root        272      2    272   2 [watchdog/2]
root        273      2    273   2 [migration/2]
root        274      2    274   2 [ksoftirqd/2]
root        275      2    275   2 [kworker/2:0]
root        276      2    276   2 [kworker/2:0H]
[root@192.168.118.11 ~]#ps -eLo ruser,pid,ppid,lwp,psr,args | awk '{if($5==3){print $0}}'
root        277      2    277   3 [watchdog/3]
root        278      2    278   3 [migration/3]
root        279      2    279   3 [ksoftirqd/3]
root        280      2    280   3 [kworker/3:0]
root        281      2    281   3 [kworker/3:0H]

 

通過上面配置,cpu0 和 cpu1 上分別有 259 和 124 個線程在運行,而 cpu2和cpu3上分別運行了5個線程:

(1)watchdog 監控系統運行狀況,出現死鎖,死機情況,能及時處理
(2)migration 用於進程在不同 CPU 間遷移
(3)兩個 kworker 用於處理 workqueues
(4)ksoftirqd 進程 用於調度 CPU 軟中斷的進程

這些進程都是內核對各個 cpu 的一些守護進程,沒有其他的普通進程運行在 cpu2 和  cpu3 上。

 

第二步,啟動一個擁有兩個 vcpu 的客戶機並將其 vcpu 綁定到宿主機的兩個 cpu 上。

# 啟動一個客戶機
[root@192.168.118.11 ~]#qemu-kvm -smp 2 -m 512m /images/cirros-0.3.5-i386-disk.img -daemonize
VNC server running on `::1:5900'
[root@192.168.118.11 ~]#
# 查看代表 vcpu 的線程
[root@192.168.118.11 ~]#ps -ef | egrep qemu-kvm
root       2569      1 22 23:47 ?        00:00:06 qemu-kvm -smp 2 -m 512m /images/cirros-0.3.5-i386-disk.img -daemonize
root       2587   1544  0 23:48 pts/0    00:00:00 grep -E --color=auto qemu-kvm
[root@192.168.118.11 ~]#ps -Tp 2569 
   PID   SPID TTY          TIME CMD
  2569   2569 ?        00:00:00 qemu-kvm
  2569   2573 ?        00:00:04 qemu-kvm
  2569   2574 ?        00:00:00 qemu-kvm
  2569   2576 ?        00:00:00 qemu-kvm

 

開啟一個 2 cpu 的客戶機,查看線程發現有 4 個線程,其中 一個主線程,2個vcpu線程,一個是I/O操作線程(參考:虛擬化基礎部分

通過 qemu monitor (Ctrl+Alt+2)可以查看 vcpu 是哪兩個線程ID

# 綁定代表整個客戶機的 QEMU 進程,使其運行在 CPU2 上
[root@192.168.118.11 ~]#taskset -cp 2 2569
pid 2569's current affinity list: 0,1
pid 2569's new affinity list: 2

# 綁定 vcpu0 到 cpu2
[root@192.168.118.11 ~]#taskset -cp 3 2573
pid 2573's current affinity list: 0,1
pid 2573's new affinity list: 3

# 綁定 vcpu1 到 cpu3
[root@192.168.118.11 ~]#taskset -cp 3 2574
pid 2574's current affinity list: 0,1
pid 2574's new affinity list: 3


[root@192.168.118.11 ~]#ps -eLo ruser,pid,ppid,lwp,psr,args | awk '{if($5==2){print $0}}'
root        272      2    272   2 [watchdog/2]
root        273      2    273   2 [migration/2]
root        274      2    274   2 [ksoftirqd/2]
root        275      2    275   2 [kworker/2:0]
root        276      2    276   2 [kworker/2:0H]
root       2569      1   2569   2 qemu-kvm -smp 2 -m 512m /images/cirros-0.3.5-i386-disk.img -daemonize
root       2569      1   2573   2 qemu-kvm -smp 2 -m 512m /images/cirros-0.3.5-i386-disk.img -daemonize
root       2795      2   2795   2 [kworker/2:1]
[root@192.168.118.11 ~]#ps -eLo ruser,pid,ppid,lwp,psr,args | awk '{if($5==3){print $0}}'
root        277      2    277   3 [watchdog/3]
root        278      2    278   3 [migration/3]
root        279      2    279   3 [ksoftirqd/3]
root        280      2    280   3 [kworker/3:0]
root        281      2    281   3 [kworker/3:0H]
root       2569      1   2574   3 qemu-kvm -smp 2 -m 512m /images/cirros-0.3.5-i386-disk.img -daemonize

總的來說,在KVM環境中,一般並不推薦手動設置 QEMU 進程的親和性來綁定vcpu,但是,在非常了解系統硬件架構的基礎上,根據實際應用的需求,可以將其綁定到特定的 cpu 上,從而提高客戶機中的 CPU 執行效率或 cpu 資源獨享的隔離性。

 

3. 內存配置

在通過 qemu 命令行啟動客戶機時設置內存大小的參數如下:
-m megs  設置客戶機的內存大小為 megs  默認單位:MB 可以通過顯式加單位如: 512m  1G

 

3.1 大頁(Huge Page)

x86 架構的 cpu 默認使用 4KB大小的內存頁面,但是它們也支持較大的內存頁。Linux 2.6 及以上的內核都支持 huge page。如果在系統中使用 huge page,則內存頁的數量會減少,從而需要更少的頁表(page table),節約了頁表所占用的內存數量,並且所需的地址轉換也減少了,TLB緩存失效的次數也減少了,從而提高了內存訪問的性能。另外,由於地址轉換所需的信息一般保存在 CPU 的緩存中,huge page 的使用讓地址轉換信息減少,從而減少了CPU緩存的使用,減輕了cpu緩存的壓力,讓cpu緩存能更多的用於應用程序的數據緩存,也能夠在整體上提升系統的性能。

在KVM中,也可以將 huge page 的特性應用到客戶機中,qemu-kvm 就提供了 "-mem-path FILE" 參數選項用於使用 huge page。另外,還有一個參數  "-mem-prealloc" 可以讓宿主機在啟動客戶機時就全部分配好客戶機的內存,而不是在客戶機實際用到更多內存時才按需分配。-mem-prealloc 必須在有 "-mem-path" 參數時才能使用。

提前分配好內存的好處:客戶機的內存訪問速度更快

提前分配好內存的缺點:客戶機啟動就得到了所有的內存,從而讓宿主機的內存很快減少了。

 

為宿主機添加 huge page 支持:

(1)檢查宿主機目前狀態,檢查了默認的內存大小和內存使用情況,如下:
[root@192.168.118.11 ~]#getconf PAGESIZE
4096
[root@192.168.118.11 ~]#egrep -i hugepages /proc/meminfo 
AnonHugePages:     67584 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

關於 huge page 幾個參數的說明:
    HugePages_Total: Hugepage的頁面數量
    HugePages_Free: 剩余的頁面數量
    HugePages_Rsvd: 被分配預留但是還沒有使用的page數目
    HugePages_Surp:HugePages_Total減去/proc/sys/vm/nr_hugepages中的值(我對這個理解也不很清楚)
    Hugepagesize: 每單位數量大小


(2)掛載 hugetlbfs 文件系統,命令為 "mount -t hugetlbfs hugetlbfs /dev/hugepages",如下:
[root@192.168.118.11 ~]#mount -t hugetlbfs hugetlbfs /dev/hugepages

(3)設置 huge page 的數量,命令為“sysctl vm.nr_hugepages=num”,如下:
[root@192.168.118.11 ~]#sysctl -w vm.nr_hugepages=1024
vm.nr_hugepages = 1024
[root@192.168.118.11 ~]#egrep -i hugepages /proc/meminfo 
AnonHugePages:     67584 kB
HugePages_Total:    1024
HugePages_Free:     1024
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

(4)啟動客戶機讓其使用 hugepage 的內存,使用 "--mem-path" 參數,如下:
[root@192.168.118.11 ~]#qemu-kvm -smp 2 -m 1024m --mem-path /dev/hugepages/ --mem-prealloc /images/cirros-0.3.5-i386-disk.img 
VNC server running on `::1:5900'
[root@192.168.118.11 ~]#egrep -i hugepages /proc/meminfo 
AnonHugePages:     10240 kB
HugePages_Total:    1024
HugePages_Free:      504
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

 

查看宿主機中 huge page 的使用情況,可以看到 "HugePages_Free" 數量減少,因為客戶機使用了一定數量的 hugepage,在創建中使用 "--mem-prealloc" 選項,因此大概上是 (512*2048) 剛好1G內存

至此,如果在客戶機中運行的應用程序具備使用 huge page 的能力,那么就可以在客戶機中使用 huge page 帶來性能的提升。
總的來說,對於內存訪問密集型的應用,在KVM客戶機中使用 huge page 是可以較明顯的提高客戶機性能的,不過,它也有一個缺點,使用 huge page 的內存不能被換出(swap out),也不能使用 ballooning 方式自動增長。

 

4. 存儲配置

QEMU 提供了對多種塊存儲設備的模擬,包括 IDE設備、SCSI設備、軟盤、U盤、virtio磁盤等,而且對設備的啟動順序提供了靈活的配置。

(1)-had file

  將file 鏡像文件作為客戶機中的第一個IDE設備(序號0),在客戶機中表現為 /dev/hda 設備或者 /dev/sda 設備。

(2)詳細配置存儲驅動器的 -driver 參數來詳細定義一個存儲驅動器,該參數的具體形式如下:

  file=file  使用file文件作為鏡像文件加載到客戶機的驅動器中。

  if=interface  可用的類型有:ide、scsi、virtio 等等

  cache=cache 設置宿主機對塊設備數據(包括文件或一個磁盤)訪問中的cache 情況,可以設置為 "none","writeback","writethrough" 等。 其默認值為 "writethrough",即“直寫模式”,它是在調用 write寫入數據的同時將數據寫入磁盤緩存(disk     cache)和后端塊設備(block device)中,其優點是操作簡單,其缺點是寫入數據速度慢。而 "writeback" 即“回寫模式”,在調用 write 寫入數據時只將數據寫入到磁盤緩存中即返回,只有在數據被換出緩存時才將修改的數據寫到后端存儲中,其優  點是寫入數據速度較快,其缺點是一旦更新數據在寫入后端存儲之前遇到系統掉電,數據會無法恢復。

  這兩種方式在讀取數據時盡量使用緩存,若設置了 "cache=none",關閉緩存。

      aio=aio  選擇異步 IO(Asynchronous IO)的方式,有 "threads" 和 "native" 兩個值可選。其默認值為 "threads",即讓一個線程池去處理異步IO;而  "native" 只適用於 "cache=none" 的情況,就是使用Linux 原生的 AIO

 

示例:使用qemu-kvm 創建虛擬機(磁盤部分)

qemu-kvm -cpu host -m 512m -drive file=/images/rhel6.img,if=virtio,cache=writeback -daemoize

 

4.1 qemu-img 命令的使用

qemu-img 是 QEMU 的磁盤管理工具,qemu-img 支持命令分為以下幾種:

(1)check [-f fmt] filename

  對磁盤鏡像文件進行一致性檢查,查找鏡像文件的錯誤,目前僅支持"qcow2"、"qed"、"vdi" 格式文件檢查。

(2)create [-f fmt][-o options] filename [size]

  創建一個格式為 fmt,大小為size,文件名為 filename 的鏡像文件。在使用 create 創建時,-f 選項指定要創建的格式(比如:qcow2), -o 選項可以指定大小,類型等。

[root@192.168.118.11 ~]#qemu-img create -f qcow2 -o size=20G,preallocation=metadata cirros.qcow2
Formatting 'cirros.qcow2', fmt=qcow2 size=21474836480 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off 
[root@192.168.118.11 ~]#ll -tsh cirros.qcow2 
4.1M -rw-r--r-- 1 root root 21G Jul  8 04:25 cirros.qcow2

preallocation='metadata'  支持稀疏文件格式,創建的文件時沒有占用很多的塊存儲。

 

(3)info [-f fmt] filename

展示 filename 鏡像文件信息。如果文件使用的是稀疏文件的存儲方式,會顯示出它本來分配的大小及實際占用的磁盤大小。如果文件中存放有客戶機快照,快照信息也會被顯示出來。

[root@192.168.118.11 ~]#qemu-img info cirros.qcow2 
image: cirros.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 4.1M
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

 

(4)resize filename [+|-] size

改變鏡像文件的大小,使其不同於創建之時的大小。縮小鏡像的大小前,需要在客戶機中保證其中的文件系統有空閑空間,否則會數據丟失,另外,qcow2 格式文件不支持縮小操作。

[root@192.168.118.11 ~]#qemu-img info cirros.qcow2 
image: cirros.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 4.1M
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
[root@192.168.118.11 ~]#qemu-img resize +5G cirros.qcow2 
qemu-img: Parameter 'size' expects a size
[root@192.168.118.11 ~]#qemu-img resize  cirros.qcow2 +5G
Image resized.
[root@192.168.118.11 ~]#qemu-img info cirros.qcow2 
image: cirros.qcow2
file format: qcow2
virtual size: 25G (26843545600 bytes)
disk size: 4.2M
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

 

5. 網絡配置

qemu-kvm 主要向客戶機提供了 4 種不同模式的網絡:
(1)基於網橋(bridge)的虛擬網卡;
(2)基於 NAT 的虛擬網絡;
(3)QEMU 內置的用戶模式網絡(user mode networking);
(4)直接分配網絡設備的網絡(包括 VT-d 和 SR-IOV)

網絡四種模式的實現請參考:四種簡單的網絡模型


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM