虛擬化技術 ——KVM

一、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)
  1. 打開 virt-manager,右鍵 “QEMU/KVM”→“添加存儲池”
  2. 輸入存儲池名稱(如kvm-pool),選擇 “目錄” 類型,點擊 “前進”
  3. 選擇存儲目錄(如/var/lib/libvirt/images/kvm-pool),點擊 “完成”
  4. 右鍵創建的存儲池,選擇 “啟動” 和 “自動啟動”

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)

  1. 打開 virt-manager,右鍵 “QEMU/KVM”→“新建”
  2. 選擇 “本地安裝介質(ISO 映像或 CDROM)”,點擊 “前進”
  3. 點擊 “瀏覽”→“瀏覽本地”,選擇下載的 CentOS 7 ISO 鏡像,點擊 “前進”
  4. 配置 CPU 和內存(如 2 核 CPU、2GB 內存),點擊 “前進”
  5. 配置存儲:選擇 “使用現有存儲池中的存儲”,選擇kvm-pool和創建的centos7-vm.qcow2磁盤,點擊 “前進”
  6. 輸入虛擬機名稱(如centos7-vm),網絡選擇 “橋接至 br0”,點擊 “完成”
  7. 自動打開 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”

  • 原因
  1. 磁盤文件路徑錯誤或權限不足
  2. 橋接網卡br0未創建或狀態為DOWN
  3. CPU 虛擬化未啟用或 KVM 模塊未加載
  • 解決方法
  1. 檢查磁盤路徑:sudo virsh edit centos7-vm,確認<source file>路徑正確;設置權限:sudo chown libvirt-qemu:kvm /var/lib/libvirt/images/kvm-pool/centos7-vm.qcow2
  2. 檢查橋接網卡:ip addr show br0,確保狀態為UP;重新配置橋接網絡
  3. 檢查 KVM 模塊:lsmod | grep kvm,若未加載執行sudo modprobe kvm-intel(Intel)或sudo modprobe kvm-amd(AMD);進入 BIOS 啟用虛擬化

8.2 虛擬機無法獲取 IP 地址(橋接模式)

  • 原因
  1. 虛擬機網卡未關聯到正確的橋接網卡(如關聯到virbr0而非br0)
  2. DHCP 服務器未分配 IP(如局域網 DHCP 地址池耗盡)
  3. 虛擬機網卡驅動異常(未使用 virtio 模式)
  • 解決方法
  1. 檢查網絡配置:sudo virsh edit centos7-vm,確認<source bridge='br0'/>
  2. 手動配置靜態 IP:在虛擬機中編輯/etc/sysconfig/network-scripts/ifcfg-eth0,設置 IP、網關、DNS
  3. 更換網卡驅動:在 XML 中設置<model type='virtio'/>,重啟虛擬機

8.3 VNC 無法連接虛擬機

  • 原因
  1. VNC 端口被防火墻攔截
  2. 虛擬機 VNC 配置中listen地址不是0.0.0.0(僅允許本地連接)
  3. 宿主機 IP 地址錯誤或虛擬機未啟動
  • 解決方法
  1. 開放防火墻端口(如 5900):sudo ufw allow 5900/tcp(Ubuntu)或sudo firewall-cmd --add-port=5900/tcp --permanent(CentOS)
  2. 修改 VNC 配置:sudo virsh edit centos7-vm,確保<graphics type='vnc'...><listen type='address' address='0.0.0.0'/></graphics>
  3. 驗證虛擬機狀態:sudo virsh list --all,確保虛擬機已啟動;重新查看 VNC 端口:sudo virsh vncdisplay centos7-vm

8.4 虛擬機磁盤擴容后,文件系統未識別新增空間

  • 原因:僅擴展了磁盤文件大小,未擴展分區和文件系統
  • 解決方法
  1. 進入虛擬機,使用lsblk確認磁盤已擴容(如/dev/vda從 20GB 變為 40GB)
  2. 使用growpart擴展分區:sudo growpart /dev/vda 1(擴展 1 號分區)
  3. 擴展文件系統:ext4 格式用resize2fs /dev/vda1,XFS 格式用xfs_growfs /dev/vda1
  4. 驗證:df -h查看文件系統大小是否更新

九、總結

KVM 作為 Linux 原生虛擬化技術,憑借高性能、高兼容性和開源免費的優勢,廣泛應用于企業級虛擬化場景。本文從安裝準備、核心配置、虛擬機部署到日常運維,完整覆蓋了 KVM 的全流程操作,重點包括:

  1. 硬件虛擬化驗證和系統環境準備,確保 KVM 正常運行基礎
  2. 橋接網絡和存儲池配置,滿足生產環境網絡和存儲需求
  3. 虛擬機創建(命令行 + 圖形化)、資源調整和快照管理,實現虛擬機全生命周期運維
  4. 實際應用案例(生產環境部署、虛擬機遷移)和常見問題解決,提供實戰參考

在實際使用中,需根據業務需求合理規劃資源(CPU、內存、存儲),定期備份虛擬機快照,同時關注 KVM 性能優化(如啟用 virtio 驅動、大頁內存、嵌套虛擬化),以充分發揮 KVM 的虛擬化優勢,構建穩定、高效的虛擬化平臺。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94511.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94511.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94511.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

線程間Bug檢測工具Canary

Canary1.Introduction2.Approach2.1.數據依賴分析2.2.線程間依賴分析3.Bug檢測4.Evaluation參考文獻1.Introduction 主要做跨線程value-flow bug檢查&#xff0c;下面代碼中兩個函數中存在指向關系&#xff1a;1. x→o1x \rightarrow o_1x→o1?, b→o2b \rightarrow o_2b→o2…

AEB 強制來臨,東軟睿馳Next-Cube-Lite有望成為汽車安全普惠“破局器”

AEB 強制時代正在悄然譜寫“普惠安全”的行業底色。日前&#xff0c;備受關注的強制性國家標準《輕型汽車自動緊急制動系統技術要求及試驗方法》&#xff08;以下簡稱“新國標”&#xff09;意見征求階段已經結束。該標準將替代現行國標GB/T 39901-2021&#xff0c;計劃于2028年…

css的white-space: pre

用戶從別的地方復制的配置文件&#xff0c;粘貼到輸入框內&#xff0c;需要保留原始格式發送給后端。核心步驟&#xff1a;### 1. 格式保持機制 - white-space: pre &#xff1a;這是最關鍵的CSS屬性&#xff0c;確保所有空格、制表符、換行符都被保留 - wrap"off" &…

【AI解讀源碼系列】ant design mobile——Space間距

前言 筆者目前業務主要圍繞ant design mobile組件庫來交付H5前端工作。 故此出此專欄來解讀每一個組件是如何實現的。 本文基于AI來解讀Space組件。 文檔鏈接&#xff1a; https://mobile.ant.design/zh/components/space 源碼&#xff1a; https://github.com/ant-design/ant-…

《用餐》,午餐食堂即景小詩分享(手機/小視頻/光盤/養生)

大媽食堂碎碎念&#xff0c;怪罪手機延工期。 筆記模板由python腳本于2025-08-21 19:34:46創建&#xff0c;本篇筆記適合喜歡友善生活和詩的coder翻閱。 學習的細節是歡悅的歷程 博客的核心價值&#xff1a;在于輸出思考與經驗&#xff0c;而不僅僅是知識的簡單復述。 Python官…

高通平臺WIFI學習-- 基于WCN6750 Tri-Band 2x2 MIMO 802.11ax的講解

一 前言: 官方資料顯示WLAN支持如下的Key features ■ Compliant with IEEE 802.11a/b/g/n/ac/ax ■ Supports 2x2 multi-user multiple-input multiple-output (MU-MIMO) ■ Up to 2.9 Gbps data rate (2x2 160 MHz) ■ Tri-band 2.4 GHz/5 GHz/6 GHz support ■ 20 MHz…

javaweb開發筆記——XML_Tomcat10_HTTP

第四章 XML_Tomcat10_HTTP 一 XML XML是EXtensible Markup Language的縮寫&#xff0c;翻譯過來就是可擴展標記語言。所以很明顯&#xff0c;XML和HTML一樣都是標記語言&#xff0c;也就是說它們的基本語法都是標簽。 可擴展 三個字表面上的意思是XML允許自定義格式。但這不代…

Python從入門到自動化運維

文章目錄IPO編程方式、print、input函數print() -- 輸出信息到屏幕input() -- 讀取用戶的輸入基本數據類型int、float、bool、str常用 str 操作方法格式化字符串的三種方式數據驗證方法字符串拼接字符串去重數據類型轉換函數容器類型列表(list)&#xff1a;可變、可重復、有序元…

【數據可視化-98】2025年上半年地方財政收入Top 20城市可視化分析:Python + Pyecharts打造炫酷暗黑主題大屏

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

【基礎-單選】向服務器提交表單數據,以下哪種請求方式比較合適

向服務器提交表單數據&#xff0c;以下哪種請求方式比較合適A.RequestMethod.GET B.RequestMethod.PUT C.RequestMethod.POST D.RequestMethod.DELETE 解釋如下&#xff1a; 在HarmonyOS應用開發中&#xff0c;向服務器提交表單數據&#xff0c;C. RequestMethod.POST 是比較合…

論文閱讀:Code as Policies: Language Model Programs for Embodied Control

地址&#xff1a;Code as Policies: Language Model Programs for Embodied Control 摘要 針對代碼補全任務訓練的大型語言模型&#xff08;LLMs&#xff09;已被證實能夠從文檔字符串&#xff08;docstrings&#xff09;中合成簡單的 Python 程序。研究發現&#xff0c;這些…

Vue 3 customRef 完全指南:自定義響應式引用的終極教程

&#x1f4d6; 概述 customRef() 是 Vue 3 中用于創建自定義響應式引用的組合式 API。它允許開發者完全控制響應式數據的讀取和寫入行為&#xff0c;為復雜的響應式邏輯提供了強大的靈活性。 &#x1f3af; 基本概念 什么是 customRef&#xff1f; customRef() 是一個工廠函數…

Java項目-蒼穹外賣_Day1

項目來源&#xff1a; 【黑馬程序員 Java項目實戰《蒼穹外賣》】 [https://www.bilibili.com/video/BV1TP411v7v6] ZZHow(ZZHow1024) 軟件開發整體介紹 軟件開發流程 需求分析&#xff1a;需求規格說明書、產品原型。設計&#xff1a;UI 設計、數據庫設計、接口設計。編碼…

面試可能問到的問題思考-MySQL

MySQL 1. 數據庫與緩存的一致性 引入緩存&#xff0c;因為緩存只是數據庫數據的副本&#xff0c;那么就可能存在副本和原數據不一致的情況 一致性 ACID里面的C&#xff0c;和CAP中的C不是一個概念&#xff0c;雖然都叫一致性。CAP中的C&#xff0c;指的是多個副本之間邏輯上…

【Java】 Spring Security 賦能 OAuth 2.0:構建安全高效的現代認證體系

還在為高昂的AI開發成本發愁?這本書教你如何在個人電腦上引爆DeepSeek的澎湃算力! 在當今數字化時代,認證與授權已成為應用系統安全的核心。OAuth 2.0 作為一種開放標準協議,廣泛應用于第三方授權場景中,而 Spring Security 則提供了強大的框架支持來實現這一協議。本文深…

實際工作幾月后常用相關命令筆記記錄

目前&#xff0c;我這只工程師幼崽經歷幾個月的工作&#xff0c;不能說是收獲很多&#xff0c;也算是成長經驗1吧。主要工作后才知道好多東西都是自己不會的不了解的&#xff0c;但是工作需要不一定自己完全吃透&#xff0c;在合適的地方正確的使用一般情況就ok了&#xff0c;所…

突破傳統文本切片的瓶頸:AntSK-FileChunk語義切片技術詳解前言:為什么我們需要重新思考文本切片?

在當今大語言模型&#xff08;LLM&#xff09;應用蓬勃發展的時代&#xff0c;我們面臨著一個看似簡單卻至關重要的問題&#xff1a;如何有效地處理長文本&#xff1f;無論是構建知識庫、實現RAG&#xff08;檢索增強生成&#xff09;系統&#xff0c;還是進行文檔智能分析&…

LeetCode-542. 01 矩陣

1、題目描述給定一個由 0 和 1 組成的矩陣 mat &#xff0c;請輸出一個大小相同的矩陣&#xff0c;其中每一個格子是 mat 中對應位置元素到最近的 0 的距離。兩個相鄰元素間的距離為 1 。示例 1&#xff1a;輸入&#xff1a;mat [[0,0,0],[0,1,0],[0,0,0]] 輸出&#xff1a;[[…

Elasticsearch如何確保數據一致性?

Elasticsearch 通過多種機制確保數據在分布式環境中的一致性&#xff0c;但由于其分布式和近實時&#xff08;Near Real-Time, NRT&#xff09;的特性&#xff0c;它提供的是最終一致性&#xff08;Eventual Consistency&#xff09;&#xff0c;而非強一致性。以下是核心機制和…

2026畢設選題-大數據-基于 Spring Boot的化妝品推薦系統的設計與實現

技術范圍&#xff1a;大數據、物聯網、SpringBoot、Vue、SSM、HLMT、小程序、PHP、Nodejs、Python、爬蟲、數據可視化、安卓App、機器學習等設計與開發。 主要內容&#xff1a;功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文降重、長…