知行迭代
导航
首页
最近更改
随机页面
常用
分类目录
Linux命令
Mediawiki常用
电脑技巧
工具
链入页面
相关更改
特殊页面
页面信息
登录
查看“KVM虚拟机”的源代码
←
KVM虚拟机
页面
讨论
阅读
查看源代码
查看历史
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:[
[1]
]
您可以查看和复制此页面的源代码。
KVM的全称是Kernel-based Virtual Machine(基于内核的[[虚拟机]]),是一种内建于[[Linux]]中的开源[[虚拟化]]技术。[[Linux内核]] 2.6.20 及更新版包含 KVM。 ==简介== ===时间轴=== *2006年,Avi Kivity 在Qumranet初创公司开始了KVM的研发工作。 *2006年10月19日,Avi Kivity 首次公布KVM。 *2007年2月5日,KVM被包含到Linux 2.6.20核心中。 *2008年,红帽公司(Red Hat)收购Qumranet公司。 {{了解更多 |[https://zh.wikipedia.org/wiki/基于内核的虚拟机#历史 维基百科:基于内核的虚拟机#历史] |[https://lwn.net/Articles/705160/ lwn.net:KVM 十周年] }} ===安装=== 以[[Ubuntu]]安装为例: <syntaxhighlight lang="bash" > # 确保你的 CPU 支持虚拟化(Intel VT-x 或 AMD-V) # 输出大于 0 表示支持。 # 确认 BIOS/UEFI 中已启用虚拟化(通常叫 Intel VT-x / AMD-V)。 egrep -c '(vmx|svm)' /proc/cpuinfo # 安装需要的软件包 sudo apt update # 更新软件源 sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager virtinst </syntaxhighlight> * qemu-kvm:提供 KVM 虚拟化后端 * libvirt-*:管理虚拟机的守护进程和工具 * virt-manager:图形化虚拟机管理器(可选但推荐) * virtinst:命令行创建虚拟机工具(如 virt-install) 将当前用户加入相关组(避免每次用 sudo): <syntaxhighlight lang="bash" > sudo usermod -aG libvirt $USER sudo usermod -aG kvm $USER </syntaxhighlight> {{了解更多 |[https://ubuntu.com/blog/kvm-hyphervisor Ubuntu 博客:Tytus Kurek - KVM 虚拟机管理程序:初学者指南] |[https://ubuntu.com/server/docs/virtualization-introduction Ubuntu 服务器文档:虚拟化] }} == 安装系统 == ===图形化界面=== * 官网下载系统镜像,如Windows 11 ISO。 * 启动 Virtual Machine Manager * 点击左上角 “新建虚拟机”(Create a new virtual machine) * 选择 “本地安装介质(ISO)”,点击“前进” == 虚拟化管理软件== 为了方便管理操作,需要安装一个图形化虚拟化管理软件。 {| class="wikitable" ! 名称 ! 描述 ! 网站 |- | virt-manager |virt-manager应用程序是一个桌面用户界面,用于通过 libvirt 管理虚拟机。不同系统安装命令:<syntaxhighlight lang="bash" > yum install virt-manager (Fedora) apt-get install virt-manager (Debian) emerge virt-manager (Gentoo) pkg_add virt-manager (OpenBSD) </syntaxhighlight> | https://virt-manager.org/ |- | Multipass | Ubuntu 发行商 Canonical 推出的虚拟机管理工具。 | https://multipass.run |- | OpenStack | | https://ubuntu.com/openstack/what-is-openstack |} ==快照== {| class="wikitable" style="width:100%; text-align:center;" ! 对比项 ! 内部快照 ! 外部快照 |- ! 存储方式 | 存储在原始qcow2文件的'''内部'''结构体中 || 存储为独立的'''qcow2快照文件'''(通过backing chain关联) |- ! 磁盘格式要求 | 仅支持'''qcow2'''格式 || 任意QEMU支持的镜像格式(推荐qcow2) |- ! 创建方式 | <code>virsh snapshot-create-as</code><br>(需指定<code>--disk-only</code>和内存状态参数) || <code>virsh snapshot-create-as --disk-only --atomic</code> |- ! 是否影响在线状态 | 影响(通常需要'''暂停或停机'''虚拟机) || '''不影响'''(在线创建<ref name="online">创建磁盘外部快照时虚拟机无需停机,但创建内存快照(<code>--memspec</code>)时建议暂停。</ref>) |- ! 内存状态保存 | 支持(保存CPU/内存/设备状态) || 支持(需单独指定<code>--memspec</code>参数) |- ! 回滚能力 | 完整回滚(磁盘+内存状态一次性恢复) || 仅支持磁盘回滚,内存状态需额外处理 |- ! 删除操作 | 简单(<code>virsh snapshot-delete</code>)<br>无需额外操作 || 复杂,Blockcommit或blockpull合并链,然后手动删除文件 |- ! 链式快照支持 | 不支持(libvirt禁止内部快照嵌套) || 支持(可创建多级backing chain) |- ! 性能开销 | 创建快照时较高(需遍历磁盘结构) || 创建时极低(仅创建COW文件) |- ! 磁盘空间释放 | 删除快照后自动释放 || 需手动执行blockcommit合并后才释放 |- ! 官方推荐度 | 不推荐 || 推荐,企业环境标准快照方案 |- ! 使用场景 | 单文件测试环境<br>快速开发调试 || 生产环境备份<br>虚拟机克隆<br>持续集成环境<br>ARM/UEFI虚拟机 |- ! 支持的架构限制 | 所有架构(但UEFI启动不支持内存快照) || 所有架构(ARM/aarch64环境唯一可用方案) |- ! 最大数量限制 | 无硬性限制(但嵌套快照会失败) || 最多199个外部磁盘快照,实际限制取决于宿主机文件系统inode数量和qemu支持。 |} ===内部快照=== ===外部快照=== == 配置桥接网路 == KVM虚拟机的默认网络NAT,共享主机ip上网,对外部网络不可见。而网络桥接(bridge)可以让虚拟机(VM)像物理主机一样直接接入外部网络,从主机外访问虚拟机。 示例,主机Ubuntu创建网桥,配置虚拟机windows使用网桥: * 主机创建网桥接口 Ubuntu24.04桌面版,使用NetworkManager管理网络,使用 NetworkManager 的命令行工具 nmcli 来直接创建和管理网桥,不用手动修改 Netplan 文件。 <syntaxhighlight lang="bash"> # 查看是否NetworkManager管理,物理网卡会显示connected。 nmcli device status nmcli con show # 创建网桥接口(br0) sudo nmcli con add ifname br0 type bridge con-name br0 # 将物理接口(enp5s0)添加为网桥的从接口 sudo nmcli con add type bridge-slave ifname enp5s0 master br0 # 禁用 STP(生成树协议,以减少延迟;可选但推荐) sudo nmcli con mod br0 bridge.stp no # 配置网桥使用 DHCP sudo nmcli con mod br0 ipv4.method auto ipv6.method ignore # 关闭原物理连接(防止冲突) sudo nmcli con down "netplan-enp5s0" # 激活网桥 sudo nmcli con up br0 # 现在,运行 ip addr show 或 nmcli device show 检查:br0 应该有 IP 地址(从 DHCP 获取),enp5s0 应该显示为 br0 的从接口,无独立 IP。 </syntaxhighlight> 方法2,修改netplan配置文件。 <syntaxhighlight lang="bash"> # 查看当前网络接口 # 假设你的主网卡是 enp3s0(有线)或 eth0 ip a # 编辑 Netplan 配置文件 # 通常位于 /etc/netplan/,如 # 可以先备份一个配置文件,便于恢复。 sudo cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bak sudo vim /etc/netplan/01-netcfg.yaml # 配置文件添加或修改内容为: # 注意缩进!YAML 对格式敏感。 network: version: 2 renderer: networkd # 或 NetworkManager,根据系统选择 ethernets: enp0s3: # 替换为您的物理接口 dhcp4: no bridges: br0: interfaces: [enp0s3] # 替换为您的物理接口 dhcp4: yes # 或手动配置:addresses: [192.168.1.100/24], gateway4: 192.168.1.1 parameters: stp: false # 可选,关闭生成树协议以减少延迟 # 应用配置 sudo netplan generate sudo netplan apply # 验证 ip a show br0 </syntaxhighlight> 方法3,创建临时网桥,测试用,重启失效。 <syntaxhighlight lang="bash"> # 使用 ip 命令临时创建网桥(名为 br0) sudo ip link add name br0 type bridge sudo ip link set dev br0 up # 将物理接口添加到网桥 sudo ip addr flush dev enp0s3 # 移除物理接口上的 IP 配置 sudo ip link set dev enp0s3 master br0 sudo ip link set dev enp0s3 up # 将原物理接口的 IP 配置转移到 br0 上。例如,如果原 IP 是 192.168.1.100/24: sudo ip addr add 192.168.1.100/24 dev br0 sudo ip route add default via 192.168.1.1 dev br0 # 替换为您的网关 # 方案2 sudo ip link add name br0 type bridge sudo ip link set enp3s0 master br0 sudo dhclient br0 sudo ip link set br0 up </syntaxhighlight> * 配置虚拟机,使用网桥 方法1,使用virt-manager界面配置。创建或编辑虚拟机,在网络设置中选择:Source mode选Bridge,Network source选一个,Device name填br0。 ==Windows VirtIO 驱动程序== 安装windows虚拟机,使用有点卡,可以安装Windows VirtIO 驱动程序,类似[[VMware]] Tools,还支持拖拽传文件。绝大多数现代 Linux 发行版的“内核”已经自带了完整的 VirtIO 驱动,所以当你创建 Linux 虚拟机时,只要在配置时将磁盘和网卡的类型选择为 VirtIO,系统通常就能直接识别和使用它们。 在https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ 页面选择最新版本下载,选择一种即可: *virtio-win.iso: 在宿主机上下载,挂载到虚拟机,再安装。 *virtio-win-gt-x64.msi:直接在虚拟机里面下载安装,仅包含核心驱动(如网卡、磁盘、内存 balloon 驱动等) *virtio-win-guest-tools.exe:直接在虚拟机里面下载安装,包含核心驱动和EMU Guest Agent。 * https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ * https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers ==常见问题== ===权限问题=== 挂载某个分区,如/run/media/xxx 通常 是由 udisks 自动挂载的,默认 ACL 只允许 xxx 用户访问,可以修改权限,或挂载到其他地方。 <syntaxhighlight lang="bash"> # 查看分区信息, sudo blkid | grep nvme1n1p4 lsblk -f /dev/nvme1n1p4 # 创建专用目录用于虚拟机存储 sudo mkdir -p /var/lib/libvirt/kvm-storage # 卸载当前挂载 sudo umount /run/media/xxx/xxxx # 重新挂载到新位置 sudo mount /dev/nvme1n1p4 /var/lib/libvirt/kvm-storage # 设置正确的所有者和权限 sudo chown libvirt-qemu:kvm /var/lib/libvirt/kvm-storage sudo chmod 755 /var/lib/libvirt/kvm-storage #设置开机自动挂载(可选) # 获取分区的 UUID sudo blkid /dev/nvme1n1p4 # 编辑 fstab sudo nano /etc/fstab # fstab中添加类似这样的行(用实际的 UUID 替换) /dev/disk/by-uuid/xxxx / ext4 defaults 0 0 </syntaxhighlight> ==资源== ===官网=== *KVM官网:https://www.linux-kvm.org/ === 教程 === *[https://ubuntu.com/server/docs/virtualization-introduction Ubuntu 服务器文档:虚拟化] *[https://www.redhat.com/zh/topics/virtualization Red Hat 主题:虚拟化] ===相关文章=== *[https://zh.wikipedia.org/wiki/基于内核的虚拟机 维基百科:基于内核的虚拟机] *[https://www.redhat.com/zh/topics/virtualization/what-is-KVM Red Hat:LINUX虚拟化 - 什么是KVM?] *[https://ubuntu.com/blog/kvm-hyphervisor Ubuntu 博客:Tytus Kurek - KVM 虚拟机管理程序:初学者指南]
本页使用的模板:
模板:了解更多
(
查看源代码
)
返回至“
KVM虚拟机
”。