1. 程式人生 > >CentOS7安裝KVM虛擬機器詳解

CentOS7安裝KVM虛擬機器詳解

檢測是否支援KVM

KVM 是基於 x86 虛擬化擴充套件(Intel VT 或者 AMD-V) 技術的虛擬機器軟體,所以檢視 CPU 是否支援 VT 技術,就可以判斷是否支援KVM。有返回結果,如果結果中有vmx(Intel)或svm(AMD)字樣,就說明CPU的支援的。

cat /proc/cpuinfo | egrep 'vmx|svm'

flags   : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm arat epb pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm xsaveopt cqm_llc cqm_occup_llc

關閉SELinux,將 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改為 SELinux=disabled

vi /etc/sysconfig/selinux

安裝 KVM 環境

通過 yum 安裝 kvm 基礎包和管理工具

# 安裝 kvm 基礎包
# ------------------------
yum -y install kvm

# 安裝 kvm 管理工具
# ------------------------
yum -y install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools bridge-utils virt-install

# qemu-kvm: KVM模組
# pyhon-virtinst: 包含python模組和工具(virt-install,virt-clone和virt-image), # 用於安裝和克隆虛擬機器使用libvirt。 它完全支援paravirtulized客人和客人虛擬客人。 # 支援的虛擬機器管理程式是Xen,qemu(QEMU)和kvm # libvirt: 虛擬管理模組 # virt-manager: 圖形介面管理虛擬機器 # libguestfs* : virt-cat等命令的支援軟體包 # 重啟宿主機,以便載入 kvm 模組 # ------------------------ reboot # 檢視KVM模組是否被正確載入
# ------------------------ lsmod | grep kvm kvm_intel 162153 0 kvm 525259 1 kvm_intel

開啟kvm服務,並且設定其開機自動啟動

systemctl start acpid.service
systemctl enable acpid.service
systemctl start libvirtd.service
systemctl enable libvirtd.service

檢視狀態操作結果,如Active: active (running),說明執行情況良好

systemctl status libvirtd
systemctl is-enabled libvirtd

● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since 二 2001-01-02 11:29:53 CST; 1h 41min ago
     Docs: man:libvirtd(8)
           http://libvirt.org

安裝虛擬機器

安裝前要設定環境語言為英文LANG="en_US.UTF-8",如果是中文的話某些版本可能會報錯。CentOS 7 在這裡修改 /etc/locale.conf

kvm建立虛擬機器,特別注意.iso映象檔案一定放到/home 或者根目錄重新建立目錄,不然會因為許可權報錯,無法建立虛擬機器。

virt-install \
--virt-type=kvm \
--name=centos78 \
--vcpus=2 \
--memory=4096 \
--location=/tmp/CentOS-7-x86_64-Minimal-1511.iso \
--disk path=/home/vms/centos78.qcow2,size=40,format=qcow2 \
--network bridge=br0 \
--graphics none \
--extra-args='console=ttyS0' \
--force
# ------------------------
virt-install --virt-type=kvm --name=centos88 --vcpus=2 --memory=4096 --location=/tmp/CentOS-7-x86_64-Minimal-1511.iso --disk path=/home/vms/centos88.qcow2,size=40,format=qcow2 --network bridge=br0 --graphics none --extra-args='console=ttyS0' --force

命令列配置系統

上面建立虛擬機器命令最終需要你配置系統基礎設定,帶 [!] 基本都是要配置的,按照順序往下配置,按對用的數字以此進行設定。


Installation

 1) [x] Language settings                 2) [!] Timezone 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)
 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]:

2) Timezone settings 時區設定選擇 5) Asia亞洲,再選擇城市 62) Shanghai上海

Available regions
 1)  Africa                 6)  Atlantic              10)  Pacific
 2)  America                7)  Australia             11)  US
 3)  Antarctica             8)  Europe                12)  Etc
 4)  Arctic                 9)  Indian
 5)  Asia
Please select the timezone.
Use numbers or type names directly [b to region list, q to quit]: 5
--------------------

 8)  Baghdad               35)  Kathmandu             61)  Seoul
 9)  Bahrain               36)  Khandyga              62)  Shanghai
10)  Baku                  37)  Kolkata               63)  Singapore
26)  Hong_Kong             53)  Pontianak
27)  Hovd
Please select the timezone.
Use numbers or type names directly [b to region list, q to quit]: 62

3) Installation source 安裝源輸入數字2

Choose an installation source type.
 1)  CD/DVD
 2)  local ISO file
 3)  Network
  Please make your choice from above ['q' to quit | 'c' to continue |
  'r' to refresh]: 2

4) Software selection 軟體選擇

Base environment
Software selection

Base environment

 1)  [x] Minimal Install
  Please make your choice from above ['q' to quit | 'c' to continue |
  'r' to refresh]:

5) Installation Destination 安裝目的地

Installation Destination

[x] 1) : 40 GiB (vda)

1 disk selected; 40 GiB capacity; 40 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) 替換現有的Linux系統

[x] 2) Use All Space 使用所有空間

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

================================================================================
Partition Scheme Options 分割槽方案選項

[ ] 1) Standard Partition 標準分割槽

[ ] 2) Btrfs Btrfs

[x] 3) LVM 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

此處也可以只設置 Root 密碼Installation Destination 安裝目的地其它進入系統設定比如時區設定如下:

echo "TZ='Asia/Shanghai'; export TZ" >> /etc/profile

連線虛擬機器

通過 virsh console <虛擬機器名稱> 命令來連線虛擬機器

# 檢視虛擬機器
virsh list              # 檢視在執行的虛擬機器
virsh list –all         # 檢視所有虛擬機器

 Id    Name                           State
----------------------------------------------------
 7     centos72                       running

連線虛擬機器

virsh console centos72

配置虛擬機器網路,編輯vi /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.120.200
PREFIX=24
GATEWAY=192.168.120.1
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=adfa3b7d-bf60-47e6-8482-871dee686fb5
DEVICE=eth0
ONBOOT=yes

新增DNS配置,也可以放到ifcfg-eth0中,DNS不是隨便設定的,你可以通過hostdignslookup命令查詢DNS,如果這些工具不存在可以通過yum install bind-utils -y來安裝一下。

# 如果沒有在網路配置新增DNS可以這種方式新增DNS
echo "nameserver 192.168.188.1" > /etc/resolv.conf

啟用網絡卡

ifup eth0 # 啟用網絡卡

配置物理機網路

目前我只有一個固定IP,通過配置eno2,網橋當做路由器,虛擬機器共享物理機進出網路。物理機網路配置,網路進出走eno2 編輯vi /etc/sysconfig/network-scripts/ifcfg-eno2

TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno2
UUID=f66c303e-994a-43cf-bd91-bb897dc2088d
DEVICE=eno2
ONBOOT=yes

IPADDR=<這裡固定IP配置的地方>  # 設定IP地址
PREFIX=24                   # 設定子網掩碼
GATEWAY=<這裡設定閘道器>        # 設定閘道器
DNS1=<這裡設定DNS>           # DNS

ifcfg-br0 橋接網絡卡配置在同一個目錄中。

TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.120.1
PREFIX=24

ifcfg-eno1 物理網絡卡指定橋接網絡卡BRIDGE="br0"

TYPE=Ethernet
BOOTPROTO=none
NAME=eno1
DEVICE=eno1
ONBOOT=yes
BRIDGE="br0"

配置路由轉發vi /etc/sysctl.conf

# Controls IP packet forwarding
net.ipv4.ip_forward = 0
修改為
# Controls IP packet forwarding
net.ipv4.ip_forward = 1    允許內建路由

再執行 sysctl -p 使其生效,編輯vi /etc/rc.d/rc.local 新增下面命令,達到開機重啟配置網路轉發規則。

# 啟動網路轉發規則
iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.7

通過iptables命令來設定轉發規則,源SNAT規則,源網路地址轉換,SNAT就是重寫包的源IP地址。

# 資料包進行 源NAT(SNAT),系統先路由——>再過濾(FORWARD)——>最後才進行POSTROUTING SNAT地址翻譯
# -t<表>:指定要操縱的表;
# -A:向規則鏈中新增條目;
# -s:指定要匹配的資料包源ip地址;
# -j<目標>:指定要跳轉的目標;
# -j SNAT:源網路地址轉換,SNAT就是重寫包的源IP地址
# --to-source ipaddr[-ipaddr][:port-port] 
#   它可以指定單個新的源IP地址,IP地址的包含範圍,以及可選的埠範圍(僅當規則還指定-p tcp或-p udp時才有效)。 
#   如果沒有指定埠範圍,則低於512的源埠將對映到512以下的其他埠:512和1023之間的埠將對映到低於1024的埠,
#   其他埠將被對映到1024或更高。 在可能的情況下,不會發生港口更改。
#   在核心高達2.6.10,您可以新增幾個 - 源選項。 
#   對於這些核心,如果通過地址範圍或多個源選項指定多個源地址,則會在這些地址之間進行簡單的迴圈(迴圈中迴圈)。 
#   後來的核心(> = 2.6.11-rc1)不再具有NAT到多個範圍的能力。
iptables -t nat -A POSTROUTING -s 192.168.120.0/24 -j SNAT --to-source <固定IP>
# cat /etc/sysconfig/iptables

配置宿主機網路

  1. KVM 虛擬機器是基於 NAT 的網路配置;
  2. 只有同一宿主機的虛擬鍵之間可以互相訪問,跨宿主機是不能訪問;
  3. 虛擬機器需要和宿主機配置成橋接模式,以便虛擬機器可以在區域網內可見;

Bridge模式配置

Bridge方式即虛擬網橋的網路連線方式,是客戶機和子網裡面的機器能夠互相通訊。可以使虛擬機器成為網路中具有獨立IP的主機。橋接網路(也叫 物理裝置共享)被用作把一個物理裝置複製到一臺虛擬機器。網橋多用作高階設定,特別是主機多個網路介面的情況。

┌─────────────────────────┐      ┌─────────────────┐
│          HOST           │      │Virtual Machine 1│
│ ┌──────┐      ┌───────┐ │      │    ┌──────┐     │
│ │ br0  │──┬───│ vnet0 │─│─ ─ ─ │    │ br0  │     │
│ └──────┘  │   └───────┘ │      │    └──────┘     │
│     │     │             │      └─────────────────┘
│     │     │   ┌───────┐ │      ┌─────────────────┐
│ ┌──────┐  └───│ vnet1 │─│─     │Virtual Machine 2│
│ │ eno0 │      └───────┘ │ │    │    ┌──────┐     │
│ └──────┘                │  ─ ─ │    │ br0  │     │
│ ┌──────┐                │      │    └──────┘     │
│ │ eno1 │                │      └─────────────────┘
│ └──────┘                │
└─────────────────────────┘

通過ip 命令檢視宿主機配置檔案的名字

ip addr

6: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 38:63:bb:44:cf:6c brd ff:ff:ff:ff:ff:ff
    inet 192.168.188.132/24 brd 192.168.188.255 scope global dynamic eno1
       valid_lft 2822sec preferred_lft 2822sec
    inet6 fe80::3a63:bbff:fe44:cf6c/64 scope link
       valid_lft forever preferred_lft forever

可以看到上面eno1是有獲取到ip地址的,相對應的檔案在/etc/sysconfig/network-scripts/目錄中,ifcfg-eno1 宿主機的物理網絡卡配置檔案

# cat ifcfg-eno1
TYPE=Ethernet
BOOTPROTO=static
NAME=eno1
DEVICE=eno1
UUID=242b3d4d-37a5-4f46-b072-55554c185ecf
ONBOOT=yes

BRIDGE="br0" # 指定橋接網絡卡的名稱

ifcfg-br0 橋接網絡卡配置在同一個目錄中。

# cat ifcfg-br0
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=br0
UUID=242b3d4d-37a5-4f46-b072-55554c185ecf
DEVICE=br0
ONBOOT=yes
TYPE=bridge  # 將制定為橋接型別
IPADDR=192.168.188.133  # 設定IP地址
PREFIX=24               # 設定子網掩碼
GATEWAY=192.168.188.1   # 設定閘道器

配置好之後,通過systemctl 命令重啟網絡卡。

ifup eno1 # 啟用網絡卡
ifup br0 # 啟用橋接網絡卡
# 兩種重啟網路的方法
systemctl restart network.service
service network restart

# 校驗橋接介面
brctl show

bridge name bridge id   STP enabled interfaces
br0   8000.3863bb44cf6c no    eno1
              vnet0
virbr0    8000.525400193f0f yes   virbr0-nic

NAT模式

NAT(Network Address Translation網路地址翻譯),NAT方式是kvm安裝後的預設方式。它支援主機與虛擬機器的互訪,同時也支援虛擬機器訪問網際網路,但不支援外界訪問虛擬機器。

virsh net-list --all

 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     no            no

default是宿主機安裝虛擬機器支援模組的時候自動安裝的。

ip a l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens1f0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 2c:44:fd:8c:43:44 brd ff:ff:ff:ff:ff:ff
3: ens1f1: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 2c:44:fd:8c:43:45 brd ff:ff:ff:ff:ff:ff
4: ens1f2: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 2c:44:fd:8c:43:46 brd ff:ff:ff:ff:ff:ff
5: ens1f3: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 2c:44:fd:8c:43:47 brd ff:ff:ff:ff:ff:ff
6: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP qlen 1000
    link/ether 38:63:bb:44:cf:6c brd ff:ff:ff:ff:ff:ff
7: eno2: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 38:63:bb:44:cf:6d brd ff:ff:ff:ff:ff:ff
8: eno3: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 38:63:bb:44:cf:6e brd ff:ff:ff:ff:ff:ff
9: eno4: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 38:63:bb:44:cf:6f brd ff:ff:ff:ff:ff:ff
10: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
    link/ether 52:54:00:19:3f:0f brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
11: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 500
    link/ether 52:54:00:19:3f:0f brd ff:ff:ff:ff:ff:ff
12: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 38:63:bb:44:cf:6c brd ff:ff:ff:ff:ff:ff
    inet 192.168.188.132/24 brd 192.168.188.255 scope global dynamic br0
       valid_lft 3397sec preferred_lft 3397sec
    inet 192.168.188.133/24 brd 192.168.188.255 scope global secondary br0
       valid_lft forever preferred_lft forever
    inet6 fe80::3a63:bbff:fe44:cf6c/64 scope link
       valid_lft forever preferred_lft forever
19: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN qlen 500
    link/ether fe:54:00:72:12:a8 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe72:12a8/64 scope link
       valid_lft forever preferred_lft forever

其中virbr0是由宿主機虛擬機器支援模組安裝時產生的虛擬網路介面,也是一個switch和bridge,負責把內容分發到各虛擬機器。幾個虛擬機器管理模組產生的介面關係如下圖:

┌───────────────────────┐                      
│         HOST          │                      
│ ┌──────┐              │   ┌─────────────────┐
│ │ br0  │─┬──────┐     │   │Virtual Machine 1│
│ └──────┘ │      │     │   │   ┌──────┐      │
│     │    │  ┌───────┐ │ ─ │   │ br0  │      │
│     │    │  │ vnet0 │─│┘  │   └──────┘      │
│ ┌──────┐ │  └───────┘ │   └─────────────────┘
│ │virbr0│ │  ┌───────┐ │   ┌─────────────────┐
│ │ -nic │ └──│ vnet1 │─│┐  │Virtual Machine 2│
│ └──────┘    └───────┘ │   │                 │
│ ┌──────┐              │└ ─│   ┌──────┐      │
│ │ eno0 │              │   │   │ br0  │      │
│ └──────┘              │   │   └──────┘      │
│ ┌──────┐              │   └─────────────────┘
│ │ eno1 │              │
│ └──────┘              │
└───────────────────────┘

從圖上可以看出,虛擬介面和物理介面之間沒有連線關係,所以虛擬機器只能在通過虛擬的網路訪問外部世界,無法從網路上定位和訪問虛擬主機。

virbr0是一個橋接器,接收所有到網路192.168.122.*的內容。從下面命令可以驗證:

brctl show
# 輸出結果
# ---------------------
# bridge name bridge id   STP enabled interfaces
# br0   8000.3863bb44cf6c no    eno1
#               vnet0
# virbr0    8000.525400193f0f yes   virbr0-nic

ip route
# default via 192.168.188.1 dev br0
# 169.254.0.0/16 dev br0  scope link  metric 1012
# 192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1
# 192.168.188.0/24 dev br0  proto kernel  scope link  src 192.168.188.132

同時,虛擬機器支援模組會修改iptables規則,通過命令可以檢視:

iptables -t nat -L -nv
iptables -t filter -L -nv

如果沒有default的話,或者需要擴充套件自己的虛擬網路,可以使用命令重新安裝NAT。

virsh net-define /usr/share/libvirt/networks/default.xml

此命令定義一個虛擬網路,default.xml的內容:

<network>
  <name>default</name>
  <bridge name="virbr0" />
  <forward/>
  <ip address="192.168.122.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.122.2" end="192.168.122.254" />
    </dhcp>
  </ip>
</network>

也可以修改xml,建立自己的虛擬網路。

標記為自動啟動:

virsh net-autostart default
# Network default marked as autostarted

啟動網路:

virsh net-start default
# Network default started

網路啟動後可以用命令brctl show 檢視和驗證。

修改vi /etc/sysctl.conf中引數,允許ip轉發,CentOS7是在vi /usr/lib/sysctl.d/00-system.conf 這裡面修改

net.ipv4.ip_forward=1

通過 sysctl -p 檢視修改結果

自定義NAT網路

建立名為management的NAT網路,vi /usr/share/libvirt/networks/management.xml

<network>
  <name>management</name>
  <bridge name="virbr1"/>
  <forward/>
  <ip address="192.168.123.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.123.2" end="192.168.123.254"/>
    </dhcp>
  </ip>
</network>

啟用新建的NAT網路

virsh net-define /usr/share/libvirt/networks/management.xml
virsh net-start management
virsh net-autostart management

驗證

brctl show
# bridge name bridge id   STP enabled interfaces
# br0   8000.3863bb44cf6c no    eno1
#               vnet0
# virbr0    8000.525400193f0f yes   virbr0-nic
# virbr1    8000.52540027f0ba yes   virbr1-nic

virsh net-list --all
#  Name                 State      Autostart     Persistent
# ----------------------------------------------------------
#  default              active     no            no
#  management           active     yes           yes

退出虛擬機器

exit # 退出系統到登入介面

Ctrl+5 # 從虛擬機器登入頁面,退出到宿主機命令列頁面
Ctrl+] # 或者下面

修改虛擬機器配置資訊

直接通過vim命令修改

vim  /etc/libvirt/qemu/centos72.xml

通過virsh命令修改

virsh edit centos72

克隆虛擬機器

# 暫停原始虛擬機器
virsh shutdown centos72
virt-clone -o centos72 -n centos.112 -f /home/vms/centos.112.qcow2 -m 00:00:00:00:00:01
virt-clone -o centos88 -n centos.112 --file /home/vms/centos.112.qcow2 --nonsparse

virt-clone 引數介紹

  • --version 檢視版本。
  • -h,--help 檢視幫助資訊。
  • --connect=URI 連線到虛擬機器管理程式 libvirt 的URI。
  • -o 原始虛擬機器名稱 原始虛擬機器名稱,必須為關閉或者暫停狀態。
  • -n 新虛擬機器名稱 –name 新虛擬機器名稱。
  • --auto-clone 從原來的虛擬機器配置自動生成克隆名稱和儲存路徑。
  • -u NEW_UUID, --uuid=NEW_UUID 克隆虛擬機器的新的UUID,預設值是一個隨機生成的UUID。
  • -m NEW_MAC, --mac=NEW_MAC 設定一個新的mac地址,預設為隨機生成 MAC。
  • -f NEW_DISKFILE, --file=NEW_DISKFILE 為新客戶機使用新的磁碟映象檔案地址。
  • --force-copy=TARGET 強制複製裝置。
  • --nonsparse 不使用稀疏檔案複製磁碟映像。

通過映象建立虛擬機器

建立虛擬機器映象檔案

# 複製第一次安裝的乾淨系統映象,作為基礎映象檔案,
# 後面建立虛擬機器使用這個基礎映象
cp /home/vms/centos.88.qcow2 /home/vms/centos7.base.qcow2

# 使用基礎映象檔案,建立新的虛擬機器映象
cp /home/vms/centos7.base.qcow2 /home/vms/centos7.113.qcow2

建立虛擬機器配置檔案

# 複製第一次安裝的乾淨系統映象,作為基礎配置檔案。
virsh dumpxml centos.88 > /home/vms/centos7.base.xml

# 使用基礎虛擬機器映象配置檔案,建立新的虛擬機器配置檔案
cp /home/vms/centos7.base.xml /home/vms/centos7.113.xml

# 編輯新虛擬機器配置檔案
vi /home/vms/centos7.113.xml

主要是修改虛擬機器檔名,UUID,映象地址和網絡卡地址,其中 UUID 在 Linux 下可以使用 uuidgen 命令生成

<domain type='kvm'>
  <name>centos7.113</name>
  <uuid>1e86167a-33a9-4ce8-929e-58013fbf9122</uuid>
  <devices>
    <disk type='file' device='disk'>
      <source file='/home/vms/centos7.113.img'/>
    </disk>
    <interface type='bridge'>
      <mac address='00:00:00:00:00:04'/>
    </interface>    
    </devices>
</domain>
virsh define /home/vms/centos7.113.xml
# Domain centos.113 defined from /home/vms/centos7.113.xml

掛載磁碟

建立磁碟

mkdir /home/vms

建立映象檔案

sudo qemu-img create /home/vms/centos78.img

建立普通的qcow2格式映象檔案

# 建立 guest 所需的磁碟
# create 表示建立,-f qcow2 表示建立一個格式為 qcow2 的磁碟, 
# /home/vms/centos78.qcow2 表示建立的磁碟名稱及磁碟檔案,40G 表示該磁碟可用大小。
qemu-img create -f qcow2 -o preallocation=metadata /home/vms/centos78.qcow2 40G

常用命令說明

virt-install

常用引數說明

–name指定虛擬機器名稱
–memory分配記憶體大小。
–vcpus分配CPU核心數,最大與實體機CPU核心數相同
–disk指定虛擬機器映象,size指定分配大小單位為G。
–network網路型別,此處用的是預設,一般用的應該是bridge橋接。
–accelerate加速
–cdrom指定安裝映象iso
–vnc啟用VNC遠端管理,一般安裝系統都要啟用。
–vncport指定VNC監控埠,預設埠為5900,埠不能重複。
–vnclisten指定VNC繫結IP,預設繫結127.0.0.1,這裡改為0.0.0.0。
–os-type=linux,windows
–os-variant=rhel6

--name      指定虛擬機器名稱
--ram       虛擬機器記憶體大小,以 MB 為單位
--vcpus     分配CPU核心數,最大與實體機CPU核心數相同
–-vnc       啟用VNC遠端管理,一般安裝系統都要啟用。
–-vncport   指定VNC監控埠,預設埠為5900,埠不能重複。
–-vnclisten  指定VNC繫結IP,預設繫結127.0.0.1,這裡改為0.0.0.0。
--network   虛擬機器網路配置
  # 其中子選項,bridge=br0 指定橋接網絡卡的名稱。

–os-type=linux,windows
–os-variant=rhel7.2

--disk 指定虛擬機器的磁碟儲存位置
  # size,初始磁碟大小,以 GB 為單位。

--location 指定安裝介質路徑,如光碟映象的檔案路徑。
--graphics 圖形化顯示配置
  # 全新安裝虛擬機器過程中可能會有很多互動操作,比如設定語言,初始化 root 密碼等等。
  # graphics 選項的作用就是配置圖形化的互動方式,可以使用 vnc(一種遠端桌面軟體)進行連結。
  # 我們這列使用命令列的方式安裝,所以這裡要設定為 none,但要通過 --extra-args 選項指定終端資訊,
  # 這樣才能將安裝過程中的互動資訊輸出到當前控制檯。
--extra-args 根據不同的安裝方式設定不同的額外選項

virsh

基礎命令

virsh list                 # 檢視在執行的虛擬機器
virsh dumpxml vm-name      # 檢視kvm虛擬機器配置檔案
virsh start vm-name        # 啟動kvm虛擬機器
virsh shutdown vm-name     # 正常關機

virsh destroy vm-name      # 非正常關機,強制關閉虛擬機器(相當於物理機直接拔掉電源)
virsh undefine vm-name     # 刪除vm的配置檔案

ls  /etc/libvirt/qemu
# 檢視刪除結果,Centos-6.6的配置檔案被刪除,但磁碟檔案不會被刪除

virsh define file-name.xml # 根據配置檔案定義虛擬機器
virsh suspend vm-name      # 掛起,終止
virsh resumed vm-name      # 恢復被掛起的虛擬機器
virsh autostart vm-name    # 開機自啟動vm
virsh console <虛擬機器名稱>   # 連線虛擬機器

錯誤解決

console test
Connected to domain test
Escape character is ^]

如果出現上面字串使用 CTRL+Shift+5 CTRL+Shift+]

參考文章