一、KVM 技術簡介
KVM(Kernel-based Virtual Machine,基于內核的虛擬機)是 Linux 內核原生支持的全虛擬化解決方案,依托 CPU 的硬件虛擬化技術(Intel VT-x/AMD-V)實現高效的虛擬機運行。它將 Linux 內核轉變為 Hypervisor,可直接管理硬件資源,支持在同一物理機上運行多個獨立的虛擬機(Guest OS),包括 Linux、Windows 等操作系統。
1.1 核心優勢
- 高性能:依賴硬件虛擬化加速,虛擬機性能接近物理機,無額外性能損耗
- 原生集成:作為 Linux 內核模塊,無需額外安裝 Hypervisor,與 Linux 系統深度融合
- 資源靈活分配:支持 CPU、內存、存儲、網絡資源的動態調整
- 多系統支持:可運行 Linux、Windows、BSD 等多種 Guest OS
- 開源免費:基于 GPL 協議,無商業許可成本,支持自定義擴展
1.2 架構組成
KVM 虛擬化架構主要包含三部分,各組件協同實現虛擬機生命周期管理:
- KVM 模塊:內核級模塊,負責 CPU 和內存虛擬化,直接與硬件交互
- QEMU:用戶態工具,提供設備模擬(如網卡、磁盤、顯卡)和虛擬機創建 / 銷毀能力
- Libvirt:開源 API 和管理工具集,統一管理 KVM、Xen 等虛擬化技術,屏蔽底層差異
- 管理工具:virsh(命令行工具)、virt-manager(圖形化工具),用于日常運維操作
二、安裝前準備
2.1 硬件要求
- CPU:必須支持硬件虛擬化(Intel VT-x 或 AMD-V),需在 BIOS/UEFI 中啟用
- 內存:物理機內存≥4GB(建議 8GB 以上,預留至少 2GB 給宿主機,剩余分配給虛擬機)
- 存儲:預留足夠磁盤空間(單個虛擬機建議 20GB 以上,根據業務需求調整)
- 操作系統:僅支持 Linux 系統(推薦 CentOS 7/8、Ubuntu 20.04/22.04、RHEL 7/8)
2.2 檢查硬件虛擬化支持
在 Linux 終端執行以下命令,驗證 CPU 是否支持硬件虛擬化:
# 方法1:查看CPU標志(Intel顯示vmx,AMD顯示svm)
grep -E 'vmx|svm' /proc/cpuinfo# 方法2:通過kvm-ok工具檢查(需安裝cpu-checker)
sudo apt install cpu-checker # Ubuntu/Debian
# 或
sudo yum install cpu-checker # CentOS/RHEL
sudo kvm-ok
- 若輸出 “INFO: /dev/kvm exists”,說明硬件支持且已啟用;若提示 “KVM acceleration can't be used”,需進入 BIOS/UEFI 開啟虛擬化(常見路徑:BIOS → Advanced → CPU Configuration → Intel VT-x/AMD-V → Enable)
2.3 操作系統環境準備
- 更新系統:確保系統內核和軟件包為最新版本
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y# CentOS/RHEL
sudo yum update -y
- 關閉 SELinux(CentOS/RHEL 需操作,Ubuntu 默認關閉):
# 臨時關閉
sudo setenforce 0# 永久關閉(重啟生效)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
- 關閉防火墻(測試環境可關閉,生產環境建議配置規則):
# Ubuntu/Debian(ufw)
sudo ufw disable && sudo ufw status# CentOS/RHEL(firewalld)
sudo systemctl stop firewalld && sudo systemctl disable firewalld
三、KVM 安裝步驟
3.1 Ubuntu 20.04/22.04 安裝
# 1. 安裝KVM核心組件和管理工具
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager# 2. 將當前用戶添加到libvirt和kvm組(避免每次操作需sudo)
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER# 3. 重啟libvirtd服務
sudo systemctl restart libvirtd# 4. 驗證安裝(查看KVM模塊是否加載)
lsmod | grep kvm
# 輸出kvm_intel(Intel CPU)或kvm_amd(AMD CPU)表示加載成功# 5. 驗證libvirt服務狀態
sudo systemctl status libvirtd
# 顯示“active (running)”表示服務正常
3.2 CentOS 7/8 安裝
# 1. 安裝KVM相關包(CentOS 7)
sudo yum install -y qemu-kvm libvirt libvirt-python virt-manager virt-viewer bridge-utils# CentOS 8(使用dnf)
sudo dnf install -y qemu-kvm libvirt virt-manager virt-viewer bridge-utils# 2. 啟動并設置libvirtd開機自啟
sudo systemctl start libvirtd
sudo systemctl enable libvirtd# 3. 添加用戶到libvirt和kvm組
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER# 4. 驗證安裝
lsmod | grep kvm
sudo systemctl status libvirtd
3.3 圖形化工具(virt-manager)使用
若需圖形化管理虛擬機,確保系統安裝了桌面環境(如 GNOME、KDE),啟動方法:
# 終端啟動virt-manager
virt-manager
首次啟動需輸入密碼,進入后界面如下:
- 左側 “QEMU/KVM” 為默認連接,右鍵可創建虛擬機、管理存儲和網絡
- 右側顯示已創建的虛擬機列表,可直觀查看虛擬機狀態(運行 / 關閉)
四、KVM 核心配置
4.1 網絡配置(橋接模式)
KVM 默認使用 “NAT 模式”,虛擬機通過宿主機 NAT 訪問外網,但無法被局域網其他設備訪問。生產環境常用橋接模式,使虛擬機直接獲取局域網 IP,與宿主機處于同一網絡層級。
4.1.1 Ubuntu 配置橋接網絡
? ? ? ? 1. 查看當前網卡名稱(假設為eth0或enp0s3):
ip addr show
? ? ? ? 2. 安裝橋接工具(已安裝可跳過):
sudo apt install -y bridge-utils
? ? ? ? 3. 編輯網絡配置文件(Ubuntu 20.04 + 使用 Netplan):
sudo vim /etc/netplan/01-network-manager-all.yaml
? ? ? ? 4. 寫入以下配置(替換enp0s3為實際網卡名):
network:version: 2renderer: networkdethernets:enp0s3: # 物理網卡dhcp4: no # 關閉物理網卡DHCPbridges:br0: # 橋接網卡名稱interfaces: [enp0s3] # 關聯物理網卡dhcp4: yes # 橋接網卡使用DHCP獲取IP(或配置static)# 靜態IP配置(可選)# addresses: [192.168.1.100/24]# gateway4: 192.168.1.1# nameservers:# addresses: [114.114.114.114, 8.8.8.8]
? ? ? ? 5. 應用配置:
sudo netplan apply
? ? ? ? 6. 驗證橋接網卡:
ip addr show br0
若br0獲取到 IP 且狀態為UP,說明橋接配置成功。
4.1.2 CentOS 配置橋接網絡
? ? ? ? 1. 編輯物理網卡配置文件(假設網卡為ens33):
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
? ? ? ? 2. 修改內容(僅保留關鍵配置):
TYPE=Ethernet
BOOTPROTO=none # 關閉DHCP
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0 # 關聯到橋接網卡br0
? ? ? ? 3. 創建橋接網卡配置文件ifcfg-br0:
sudo vim /etc/sysconfig/network-scripts/ifcfg-br0
? ? ? ? 4. 寫入配置:
TYPE=Bridge
BOOTPROTO=dhcp # 或static(靜態IP)
NAME=br0
DEVICE=br0
ONBOOT=yes
# 靜態IP配置(可選)
# IPADDR=192.168.1.100
# PREFIX=24
# GATEWAY=192.168.1.1
# DNS1=114.114.114.114
? ? ? ? 5. 重啟網絡服務:
# CentOS 7
sudo systemctl restart network# CentOS 8
sudo nmcli connection reload
????????6. 驗證橋接:
ip addr show br0
4.2 存儲配置(創建存儲池)
KVM 使用 “存儲池” 管理虛擬機磁盤文件,支持本地目錄、LVM、NFS 等存儲類型,推薦使用目錄存儲池(簡單易維護)或LVM 存儲池(支持動態擴容)。
4.2.1 創建目錄存儲池(命令行)
? ? ? ? 1. 創建本地存儲目錄(如/var/lib/libvirt/images/kvm-pool):
sudo mkdir -p /var/lib/libvirt/images/kvm-pool
? ? ? ? 2. 定義存儲池(名稱為kvm-pool):
sudo virsh pool-define-as kvm-pool dir --target /var/lib/libvirt/images/kvm-pool
? ? ? ? 3. 構建存儲池:
sudo virsh pool-build kvm-pool
????????4. 啟動存儲池并設置開機自啟:
sudo virsh pool-start kvm-pool
sudo virsh pool-autostart kvm-pool
? ? ? ? 5. 驗證存儲池:
sudo virsh pool-list --all
# 輸出“kvm-pool”狀態為“active”表示正常
4.2.2 圖形化創建存儲池(virt-manager)
- 打開 virt-manager,右鍵 “QEMU/KVM”→“添加存儲池”
- 輸入存儲池名稱(如kvm-pool),選擇 “目錄” 類型,點擊 “前進”
- 選擇存儲目錄(如/var/lib/libvirt/images/kvm-pool),點擊 “完成”
- 右鍵創建的存儲池,選擇 “啟動” 和 “自動啟動”
4.3 KVM 模塊參數配置(優化性能)
通過調整 KVM 內核參數,優化虛擬機 CPU、內存性能:
? ? ? ? 1. 編輯 KVM 配置文件:
sudo vim /etc/modprobe.d/kvm.conf
? ? ? ? 2. 添加以下參數(根據 CPU 類型選擇):
# Intel CPU(啟用嵌套虛擬化、大頁內存)
options kvm-intel nested=1 ept=1 unrestricted_guest=1# AMD CPU
options kvm-amd nested=1 svm_lock=0 unrestricted_guest=1
-
- nested=1:啟用嵌套虛擬化(允許在虛擬機內再創建虛擬機)
-
- ept=1(Intel)/npt=1(AMD):啟用擴展頁表,提升內存訪問性能
? ? ? ? 3. 重啟系統生效:
sudo reboot
? ? ? ? 4. 驗證嵌套虛擬化:
# Intel
cat /sys/module/kvm_intel/parameters/nested# AMD
cat /sys/module/kvm_amd/parameters/nested
# 輸出“Y”表示啟用成功
五、虛擬機完整部署(以 CentOS 7 為例)
5.1 準備鏡像文件
? ? ? ? 1. 下載 CentOS 7 ISO 鏡像(推薦使用阿里云鏡像源):
cd /var/lib/libvirt/images
sudo wget https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-2207-02.iso
? ? ? ? 2. 驗證鏡像完整性(可選):
md5sum CentOS-7-x86_64-Minimal-2207-02.iso
對比官方 MD5 值,確保鏡像未損壞。
5.2 命令行創建虛擬機(virsh)
5.2.1 步驟 1:創建虛擬機磁盤
在之前創建的kvm-pool存儲池中,創建 20GB 大小的 qcow2 格式磁盤(qcow2 支持動態擴容):
sudo virsh vol-create-as kvm-pool centos7-vm.qcow2 20G --format qcow2
- centos7-vm.qcow2:磁盤文件名
- 20G:磁盤大小
- --format qcow2:磁盤格式(推薦 qcow2,比 raw 格式節省空間)
5.2.2 步驟 2:定義虛擬機 XML 配置
? ? ? ? 1. 創建 XML 配置文件(centos7-vm.xml):
sudo vim /etc/libvirt/qemu/centos7-vm.xml
? ? ? ? 2. 寫入以下配置(根據實際資源調整 CPU、內存、網絡):
<domain type='kvm'><name>centos7-vm</name> <!-- 虛擬機名稱 --><memory unit='GiB'>2</memory> <!-- 最大內存(GiB) --><currentMemory unit='GiB'>2</currentMemory> <!-- 當前內存(GiB) --><vcpu placement='static'>2</vcpu> <!-- CPU核心數 --><os><type arch='x86_64' machine='pc-i440fx-focal'>hvm</type><boot dev='cdrom'/> <!-- 優先從ISO啟動(安裝系統) --><boot dev='hd'/> <!-- 后續從磁盤啟動 --></os><features><acpi/><apic/><vmport state='off'/></features><cpu mode='host-model' check='partial'> <!-- CPU模式(模擬宿主機CPU) --><model fallback='allow'/></cpu><clock offset='utc'><timer name='rtc' tickpolicy='catchup'/><timer name='pit' tickpolicy='delay'/><timer name='hpet' present='no'/></clock><on_poweroff>destroy</on_poweroff><on_reboot>restart</on_reboot><on_crash>destroy</on_crash><devices><!-- 磁盤配置(關聯之前創建的qcow2文件) --><disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/var/lib/libvirt/images/kvm-pool/centos7-vm.qcow2'/><target dev='vda' bus='virtio'/> <!-- virtio總線,提升IO性能 --><address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/></disk><!-- ISO鏡像配置(安裝系統用) --><disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file='/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2207-02.iso'/><target dev='hda' bus='ide'/><readonly/><address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/></disk><!-- 網絡配置(橋接模式,關聯br0) --><interface type='bridge'><mac address='52:54:00:12:34:56'/> <!-- 自定義MAC地址(可選) --><source bridge='br0'/><model type='virtio'/> <!-- virtio網卡,提升網絡性能 --><address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/></interface><!-- 控制臺配置(支持virsh console登錄) --><serial type='pty'><target type='isa-serial' port='0'><model name='isa-serial'/></target></serial><console type='pty' tty='/dev/pts/0'><source path='/dev/pts/0'/><target type='serial' port='0'/></console><!-- 顯卡配置(VGA,支持圖形化安裝) --><graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'><listen type='address' address='0.0.0.0'/></graphics></devices>
</domain>
5.2.3 步驟 3:啟動虛擬機并安裝系統
? ? ? ? 1. 定義虛擬機(加載 XML 配置):
sudo virsh define /etc/libvirt/qemu/centos7-vm.xml
? ? ? ? 2. 啟動虛擬機:
sudo virsh start centos7-vm
? ? ? ? 3. 查看虛擬機 VNC 端口(用于圖形化安裝):
sudo virsh vncdisplay centos7-vm
輸出類似 “:0”,表示 VNC 端口為 5900(:0→5900,:1→5901,以此類推)。
? ? ? ? 4. 使用 VNC 客戶端(如 TightVNC、RealVNC)連接宿主機 IP: 端口(如 192.168.1.100:5900),進入 CentOS 7 安裝界面,按常規步驟完成系統安裝。
? ? ? ? 5. 安裝完成后,關閉虛擬機,刪除 XML 配置中的 ISO 鏡像部分(避免重復從 ISO 啟動):
sudo virsh shutdown centos7-vm
sudo virsh undefine centos7-vm # 刪除舊定義
# 編輯XML,刪除<disk type='file' device='cdrom'>...</disk>段
sudo virsh define /etc/libvirt/qemu/centos7-vm.xml # 重新定義
sudo virsh start centos7-vm # 從磁盤啟動
5.3 圖形化創建虛擬機(virt-manager)
- 打開 virt-manager,右鍵 “QEMU/KVM”→“新建”
- 選擇 “本地安裝介質(ISO 映像或 CDROM)”,點擊 “前進”
- 點擊 “瀏覽”→“瀏覽本地”,選擇下載的 CentOS 7 ISO 鏡像,點擊 “前進”
- 配置 CPU 和內存(如 2 核 CPU、2GB 內存),點擊 “前進”
- 配置存儲:選擇 “使用現有存儲池中的存儲”,選擇kvm-pool和創建的centos7-vm.qcow2磁盤,點擊 “前進”
- 輸入虛擬機名稱(如centos7-vm),網絡選擇 “橋接至 br0”,點擊 “完成”
- 自動打開 VNC 窗口,進入系統安裝界面,完成安裝后重啟虛擬機
六、虛擬機日常運維(virsh 命令)
6.1 虛擬機狀態管理
操作 | 命令 | 說明 |
查看所有虛擬機 | sudo virsh list --all | 顯示運行中(running)和關閉(shut off)的虛擬機 |
啟動虛擬機 | sudo virsh start centos7-vm | 啟動指定虛擬機 |
關閉虛擬機(優雅) | sudo virsh shutdown centos7-vm | 發送關機信號,等待 Guest OS 正常關閉 |
強制關閉虛擬機 | sudo virsh destroy centos7-vm | 強制終止虛擬機(類似拔電源,謹慎使用) |
重啟虛擬機 | sudo virsh reboot centos7-vm | 重啟虛擬機 |
設置開機自啟 | sudo virsh autostart centos7-vm | 宿主機啟動時自動啟動該虛擬機 |
取消開機自啟 | sudo virsh autostart --disable centos7-vm | 取消開機自啟 |
查看虛擬機信息 | sudo virsh dominfo centos7-vm | 顯示 CPU、內存、磁盤等配置信息 |
6.2 虛擬機控制臺登錄
通過virsh console直接登錄虛擬機(無需 VNC),需 Guest OS 開啟串口控制臺:
????????1. 進入虛擬機 VNC 界面,編輯/etc/default/grub,添加串口配置:
sudo vim /etc/default/grub
????????修改GRUB_CMDLINE_LINUX:
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet console=ttyS0,115200"
? ? ? ? 2. 生成新的 grub 配置:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
? ? ? ? 3. 重啟虛擬機,在宿主機執行以下命令登錄控制臺:
sudo virsh console centos7-vm
按Enter鍵,輸入虛擬機用戶名和密碼即可登錄;退出控制臺按Ctrl+]。
6.3 虛擬機資源調整(動態擴容)
6.3.1 內存擴容(需虛擬機支持熱插拔)
? ? ? ? 1. 查看當前內存配置:
sudo virsh dommemstat centos7-vm
? ? ? ? 2. 臨時調整內存(最大內存需在 XML 中預先設置足夠值):
sudo virsh setmem centos7-vm 4G --live # 動態調整為4GB(運行中生效)
? ? ? ? 3. 永久調整內存(需關閉虛擬機):
sudo virsh shutdown centos7-vm
sudo virsh edit centos7-vm # 編輯XML,修改<memory>和<currentMemory>為4G
sudo virsh start centos7-vm
6.3.2 磁盤擴容(qcow2 格式)
? ? ? ? 1. 查看當前磁盤信息:
sudo virsh vol-info --pool kvm-pool centos7-vm.qcow2
? ? ? ? 2. 擴容磁盤(從 20GB 擴展到 40GB):
sudo virsh vol-resize --pool kvm-pool centos7-vm.qcow2 40G
? ? ? ? 3. 進入虛擬機,擴展磁盤分區和文件系統(以/dev/vda1為例):
# 1. 查看磁盤分區
lsblk# 2. 使用fdisk刪除舊分區并創建新分區(或使用growpart)
sudo growpart /dev/vda 1 # 擴展/dev/vda的1號分區# 3. 擴展文件系統(ext4格式)
sudo resize2fs /dev/vda1# 4. 驗證擴容結果
df -h
6.4 虛擬機快照管理(備份與恢復)
KVM 快照支持 “內部快照”(qcow2 格式)和 “外部快照”,推薦使用內部快照(操作簡單):
6.4.1 創建快照
# 創建快照(名稱為snap1,添加描述)
sudo virsh snapshot-create-as --domain centos7-vm --name snap1 --description "Initial setup"
6.4.2 查看快照
# 查看所有快照
sudo virsh snapshot-list centos7-vm# 查看快照詳情
sudo virsh snapshot-info --domain centos7-vm --snapshotname snap1
6.4.3 恢復快照(需關閉虛擬機)
sudo virsh shutdown centos7-vm
sudo virsh snapshot-revert --domain centos7-vm --snapshotname snap1
sudo virsh start centos7-vm
6.4.4 刪除快照
sudo virsh snapshot-delete --domain centos7-vm --snapshotname snap1
七、實際應用案例
7.1 案例 1:搭建 KVM 虛擬化服務器(生產環境)
需求
- 宿主機:CentOS 8,CPU 8 核,內存 32GB,磁盤 500GB(LVM 分區)
- 虛擬機:3 臺 CentOS 7,每臺配置 2 核 CPU、4GB 內存、50GB 磁盤,橋接網絡(獲取局域網 IP)
- 存儲:使用 LVM 存儲池(支持動態擴容),NFS 掛載備份目錄
實施步驟
? ? ? ? 1. 宿主機 LVM 配置:
# 創建LVM卷組(假設磁盤為/dev/sdb)
sudo pvcreate /dev/sdb
sudo vgcreate kvm-vg /dev/sdb
sudo lvcreate -L 400G -n kvm-lv kvm-vg
sudo mkfs.xfs /dev/kvm-vg/kvm-lv
# 掛載到/var/lib/libvirt/images/kvm-pool
sudo mkdir -p /var/lib/libvirt/images/kvm-pool
sudo echo "/dev/mapper/kvm--vg-kvm--lv /var/lib/libvirt/images/kvm-pool xfs defaults 0 0" >> /etc/fstab
sudo mount -a
? ? ? ? 2. 創建 LVM 存儲池:
sudo virsh pool-define-as kvm-pool logical --source-name kvm-lv --source-vg kvm-vg --target /var/lib/libvirt/images/kvm-pool
sudo virsh pool-build kvm-pool
sudo virsh pool-start kvm-pool
sudo virsh pool-autostart kvm-pool
? ? ? ? 3. 批量創建虛擬機:
-
- 復制centos7-vm.xml為centos7-vm1.xml、centos7-vm2.xml、centos7-vm3.xml
-
- 修改每臺虛擬機的name、mac address、source file(磁盤文件名)
-
- 按 5.2 節步驟定義并啟動虛擬機,完成系統安裝
? ? ? ? 4.?配置 NFS 備份:
-
- 在備份服務器搭建 NFS 共享目錄(如/nfs/kvm-backup)
-
- 宿主機掛載 NFS:
sudo mount -t nfs 192.168.1.200:/nfs/kvm-backup /var/lib/libvirt/images/backup
-
- 定期執行快照備份腳本(示例):
#!/bin/bash
VM_LIST="centos7-vm1 centos7-vm2 centos7-vm3"
BACKUP_DIR="/var/lib/libvirt/images/backup"
DATE=$(date +%Y%m%d)for vm in $VM_LIST; do# 創建快照sudo virsh snapshot-create-as --domain $vm --name snap-$DATE --description "Backup $DATE"# 導出快照到NFSsudo virsh snapshot-dumpxml --domain $vm --snapshotname snap-$DATE > $BACKUP_DIR/$vm-snap-$DATE.xmlsudo cp /var/lib/libvirt/images/kvm-pool/$vm.qcow2 $BACKUP_DIR/$vm-$DATE.qcow2
done
7.2 案例 2:KVM 虛擬機遷移(冷遷移)
需求
將宿主機 A(192.168.1.100)上的centos7-vm遷移到宿主機 B(192.168.1.101),兩臺宿主機已配置相同的橋接網絡和存儲池。
實施步驟
? ? ? ? 1. 宿主機 A 操作:
# 1. 關閉虛擬機
sudo virsh shutdown centos7-vm# 2. 導出虛擬機XML配置
sudo virsh dumpxml centos7-vm > centos7-vm.xml# 3. 復制磁盤文件和XML到宿主機B(使用scp)
sudo scp /var/lib/libvirt/images/kvm-pool/centos7-vm.qcow2 root@192.168.1.101:/var/lib/libvirt/images/kvm-pool/
sudo scp centos7-vm.xml root@192.168.1.101:/etc/libvirt/qemu/
? ? ? ? 2. 宿主機 B 操作:
# 1. 確保存儲池已創建且磁盤文件權限正確
sudo chown libvirt-qemu:kvm /var/lib/libvirt/images/kvm-pool/centos7-vm.qcow2# 2. 定義虛擬機
sudo virsh define /etc/libvirt/qemu/centos7-vm.xml# 3. 啟動虛擬機并驗證
sudo virsh start centos7-vm
sudo virsh list --all
? ? ? ? 3. 驗證遷移結果:
-
- 登錄虛擬機,檢查 IP 地址、磁盤數據是否正常
-
- 測試網絡連通性(ping 網關、局域網其他設備)
八、常見問題與解決方法
8.1 虛擬機無法啟動,提示 “Error starting domain: internal error: process exited while connecting to monitor”
- 原因:
- 磁盤文件路徑錯誤或權限不足
- 橋接網卡br0未創建或狀態為DOWN
- CPU 虛擬化未啟用或 KVM 模塊未加載
- 解決方法:
- 檢查磁盤路徑:sudo virsh edit centos7-vm,確認<source file>路徑正確;設置權限:sudo chown libvirt-qemu:kvm /var/lib/libvirt/images/kvm-pool/centos7-vm.qcow2
- 檢查橋接網卡:ip addr show br0,確保狀態為UP;重新配置橋接網絡
- 檢查 KVM 模塊:lsmod | grep kvm,若未加載執行sudo modprobe kvm-intel(Intel)或sudo modprobe kvm-amd(AMD);進入 BIOS 啟用虛擬化
8.2 虛擬機無法獲取 IP 地址(橋接模式)
- 原因:
- 虛擬機網卡未關聯到正確的橋接網卡(如關聯到virbr0而非br0)
- DHCP 服務器未分配 IP(如局域網 DHCP 地址池耗盡)
- 虛擬機網卡驅動異常(未使用 virtio 模式)
- 解決方法:
- 檢查網絡配置:sudo virsh edit centos7-vm,確認<source bridge='br0'/>
- 手動配置靜態 IP:在虛擬機中編輯/etc/sysconfig/network-scripts/ifcfg-eth0,設置 IP、網關、DNS
- 更換網卡驅動:在 XML 中設置<model type='virtio'/>,重啟虛擬機
8.3 VNC 無法連接虛擬機
- 原因:
- VNC 端口被防火墻攔截
- 虛擬機 VNC 配置中listen地址不是0.0.0.0(僅允許本地連接)
- 宿主機 IP 地址錯誤或虛擬機未啟動
- 解決方法:
- 開放防火墻端口(如 5900):sudo ufw allow 5900/tcp(Ubuntu)或sudo firewall-cmd --add-port=5900/tcp --permanent(CentOS)
- 修改 VNC 配置:sudo virsh edit centos7-vm,確保<graphics type='vnc'...><listen type='address' address='0.0.0.0'/></graphics>
- 驗證虛擬機狀態:sudo virsh list --all,確保虛擬機已啟動;重新查看 VNC 端口:sudo virsh vncdisplay centos7-vm
8.4 虛擬機磁盤擴容后,文件系統未識別新增空間
- 原因:僅擴展了磁盤文件大小,未擴展分區和文件系統
- 解決方法:
- 進入虛擬機,使用lsblk確認磁盤已擴容(如/dev/vda從 20GB 變為 40GB)
- 使用growpart擴展分區:sudo growpart /dev/vda 1(擴展 1 號分區)
- 擴展文件系統:ext4 格式用resize2fs /dev/vda1,XFS 格式用xfs_growfs /dev/vda1
- 驗證:df -h查看文件系統大小是否更新
九、總結
KVM 作為 Linux 原生虛擬化技術,憑借高性能、高兼容性和開源免費的優勢,廣泛應用于企業級虛擬化場景。本文從安裝準備、核心配置、虛擬機部署到日常運維,完整覆蓋了 KVM 的全流程操作,重點包括:
- 硬件虛擬化驗證和系統環境準備,確保 KVM 正常運行基礎
- 橋接網絡和存儲池配置,滿足生產環境網絡和存儲需求
- 虛擬機創建(命令行 + 圖形化)、資源調整和快照管理,實現虛擬機全生命周期運維
- 實際應用案例(生產環境部署、虛擬機遷移)和常見問題解決,提供實戰參考
在實際使用中,需根據業務需求合理規劃資源(CPU、內存、存儲),定期備份虛擬機快照,同時關注 KVM 性能優化(如啟用 virtio 驅動、大頁內存、嵌套虛擬化),以充分發揮 KVM 的虛擬化優勢,構建穩定、高效的虛擬化平臺。