原文:https://github.com/jaywcjlove/handbook/blob/master/CentOS/CentOS7%E5%AE%89%E8%A3%85KVM%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%AF%A6%E8%A7%A3.mdhtml
http://www.cnblogs.com/kevingrace/p/8377645.html----------------------Centos7.4安裝kvm虛擬機(使用virt-manager管理)python
基於 CentOS Linux release 7.2.1511 (Core) 的環境下命令行的方式安裝KVM的詳細過程。linux
KVM 是基於 x86 虛擬化擴展(Intel VT 或者 AMD-V) 技術的虛擬機軟件,因此查看 CPU 是否支持 VT 技術,就能夠判斷是否支持KVM。有返回結果,若是結果中有vmx(Intel)或svm(AMD)字樣,就說明CPU的支持的。git
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
es6
vi /etc/sysconfig/selinux
經過 yum 安裝 kvm 基礎包和管理工具github
kvm相關安裝包及其做用:shell
qemu-kvm
主要的KVM程序包python-virtinst
建立虛擬機所須要的命令行工具和程序庫virt-manager
GUI虛擬機管理工具virt-top
虛擬機統計命令virt-viewer
GUI鏈接程序,鏈接到已配置好的虛擬機libvirt
C語言工具包,提供libvirt服務libvirt-client
爲虛擬客戶機提供的C語言工具包virt-install
基於libvirt服務的虛擬機建立命令bridge-utils
建立和管理橋接設備的工具# 安裝 kvm # ------------------------ # yum -y install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools bridge-utils virt-install yum -y install qemu-kvm libvirt virt-install bridge-utils # 重啓宿主機,以便加載 kvm 模塊 # ------------------------ reboot # 查看KVM模塊是否被正確加載 # ------------------------ lsmod | grep kvm kvm_intel 162153 0 kvm 525259 1 kvm_intel
開啓kvm服務,而且設置其開機自動啓動vim
systemctl start libvirtd
systemctl enable libvirtd
查看狀態操做結果,如Active: active (running)
,說明運行狀況良好windows
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
。centos
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
----補充------------------------------
qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G
yum install -y virt-install
chown root:root ***.iso---注意權限問題
virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 2048 \
--cdrom=/var/www/RHEL-server-7.0-x86_64-LinuxProbe.Com.iso --disk path=/opt/CentOS-7-x86_64.raw \
--network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
-------------------------------------------end------------------
上面建立虛擬機命令最終須要你配置系統基礎設置,帶 [!]
基本都是要配置的,按照順序往下配置,按對用的數字以此進行設置。
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]:
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
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
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]:
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不是隨便設置的,你能夠經過host、dig、nslookup命令查詢DNS,若是這些工具不存在能夠經過yum install bind-utils -y
來安裝一下。
# 若是沒有在網絡配置添加DNS能夠這種方式添加DNS echo "nameserver 192.168.188.1" > /etc/resolv.conf
激活網卡
ifup eth0 # 激活網卡
virsh start centos72 # 虛擬機開啓(啓動): virsh reboot centos72 # 虛擬機從新啓動 virsh shutdown centos72 # 虛擬機關機 virsh destroy centos72 # 強制關機(強制斷電) virsh suspend centos72 # 暫停(掛起)KVM 虛擬機 virsh resume centos72 # 恢復被掛起的 KVM 虛擬機 virsh undefine centos72 # 該方法只刪除配置文件,磁盤文件未刪除 virsh autostart centos72 # 隨物理機啓動而啓動(開機啓動) virsh autostart --disable centos72 # 取消標記爲自動開始(取消開機啓動)
目前我只有一個固定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
使其生效
如今咱們還以上述VM爲例,目前該KVM的公網IP爲211.11.61.7
,VM的IP爲192.168.188.115
,如今我要求經過訪問KVM的2222端口訪問VM的22端口。
編輯vi /etc/rc.d/rc.local
添加下面命令,達到開機重啓配置網絡轉發規則。
# 啓動網絡轉發規則 iptables -t nat -A : -s 192.168.188.0/24 -j SNAT --to-source 211.11.61.7 iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 211.11.61.7 iptables -t nat -A PREROUTING -d 211.11.61.7 -p tcp --dport 2222 -j DNAT --to-dest 192.168.188.115:22 iptables -t nat -A PREROUTING -d 211.11.61.7 -p tcp --dport 2221 -j DNAT --to-dest 192.168.188.115:21 # 實際效果能夠經過外網鏈接虛擬機 ssh -p 2222 root@211.11.61.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
經過公網ip 192.168.188.222
端口2280
,轉發到虛擬機192.168.111.133:80
上面
iptables -t nat -A PREROUTING -d 192.168.188.222 -p tcp --dport 2280 -j DNAT --to-dest 192.168.111.133:80
重啓並保存 iptables
配置。
# 保存 service iptables save # 重啓 service iptables restart
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(Network Address Translation網絡地址翻譯),NAT方式是kvm安裝後的默認方式。它支持主機與虛擬機的互訪,同時也支持虛擬機訪問互聯網,但不支持外界訪問虛擬機。
virsh net-edit default # 若是要建立或者修改NAT網絡,要先編輯default.xml: 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-define /etc/libvirt/qemu/networks/default.xml
標記爲自動啓動:
virsh net-autostart default
# Network default marked as autostarted virsh net-start default
啓動網絡:
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
查看修改結果
建立名爲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
動態調整,若是超過給虛擬機分配的最大內存,須要重啓虛擬機。
virsh list --all
# Id 名稱 狀態 # ---------------------------------------------------- # 2 working112 running # 更改CPU virsh setvcpus working112 --maximum 4 --config # 更改內存 virsh setmaxmem working112 1048576 --config # 查看信息 virsh dominfo working112
mkdir /home/vms
查看鏡像信息
virt-filesystems --long --parts --blkdevs -h -a working112.qcow2
# Name Type Size Parent # /dev/sda1 partition 200M /dev/sda # /dev/sda2 partition 9.8G /dev/sda # /dev/sda device 10G - qemu-img info working112.qcow2 # image: working112.qcow2 # file format: qcow2 # virtual size: 140G (150323855360 bytes) # disk size: 33G # cluster_size: 65536 # Format specific information: # compat: 1.1 # lazy refcounts: true
給虛擬機鏡像添加200G
大小,注意須要中止working112
虛擬機
qemu-img resize working112.qcow2 +200G
# Image resized.
首先,咱們製做以下所示的磁盤的備份副本。
cp working112.qcow2 working112-orig.qcow2
而後咱們運行下面的命令來增長 /dev/sda
virt-resize --expand /dev/sda1 working112-orig.qcow2 working112.qcow2
查看鏡像信息
qemu-img info working112.qcow2
# image: working112.qcow2 # file format: qcow2 # virtual size: 140G (150323855360 bytes) # disk size: 33G # cluster_size: 65536 # Format specific information: # compat: 1.1 # lazy refcounts: true
進入虛擬機virsh console working112
查看信息:
vgdisplay # 顯示卷組大小 lvdisplay # 顯示邏輯卷大小
卷組大小已增長,下面須要分配容量給邏輯卷
lvextend -L +60G /dev/centos/root
還有最後一步,分配好了須要作系統調整
# ext 系統格式使用: resize2fs /dev/centos/root # xfs 系統格式使用下面命令 xfs_growfs /dev/centos/root
經常使用參數說明
–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 list --all # 查看全部運行和沒有運行的虛擬機 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+]
ERROR Format cannot be specified for unmanaged storage. virt-manager 沒有找到存儲池,建立儲存池便可
KVM VNC客戶端鏈接閃退 使用real vnc或者其它vnc客戶端鏈接kvm閃退,把客戶端設置中的ColourLevel值設置爲rgb222或full便可
virsh shutdown 沒法關閉虛擬機 使用該命令關閉虛擬機時,KVM是向虛擬機發送一個ACPI的指令,須要虛擬機安裝acpid服務: