首先查看kvm是否正常启用,如下命令
lsmod | grep kvm如果显示以下类似的信息,则表示kvm已经启用,可以继续安装
kvm_intel 380928 0
kvm 1146880 1 kvm_intel
irqbypass 16384 1 kvmapt install qemu-system libvirt-daemon-system virt-managersystemctl enable libvirtd
systemctl start libvirtdlibvirtd是libvirt的守护进程,它负责管理虚拟机,启动、停止、配置等,即虚拟化工具的统一接口。
在 libvirt 中,虚拟机需要连接到虚拟网络,而默认网络 (default) 在安装后没有自动激活。
可以通过以下步骤来激活默认网络,运行以下命令以启动并激活 default 网络
virsh net-start default为了避免每次启动虚拟机时手动启动网络,可以设置 default 网络为开机自动启动:
virsh net-autostart default可以使用以下命令查看当前网络的状态,确保 default 网络处于 "active" 状态:
virsh net-list --all输出中应该看到如下类似的结果,代表默认网络已启用
名称 状态 自动启动 持久
--------------------------------------
default active yes yes根据自己电脑的情况,创建一个目录,我这里存放在/opt/data/kvm之下,执行如下命令
# 创建目录
mkdir -p /opt/data/kvm
# 创建一个虚拟机空盘
qemu-img create -f qcow2 /opt/data/kvm/debian12-001.qcow2 20G先创建一个目录 /var/libvirt/qemu/,因为接下来虚拟机需要使用到该目录。
virt-install \
--osinfo=debian11 \
--name=linux-debian12-001 \
--virt-type=kvm \
--ram=2048 \
--vcpus=2 \
--cdrom=/opt/data/iso/debian-12.6.0-amd64-DVD-1.iso \
--boot=hd \
--disk path=/opt/data/kvm/debian12-001.qcow2 \
--channel unix,path=/var/libvirt/qemu/linx-debian12-001.agent,mode=bind,target_type=virtio,name=org.qemu.guest_agent.0 \
--network network=default \
--graphics vnc,listen=0.0.0.0,port=5900 \
--noautoconsole因为在安装虚拟机时,os还没有debian12,所以用debian11,没有影响。
-
virt-install是一个用于创建虚拟机的命令行工具,它可以在 Linux 上使用 KVM(Kernel-based Virtual Machine)等虚拟化技术来创建和管理虚拟机。 -
--osinfo=debian11: 指定操作系统为 Debian 11。该参数用于指定操作系统的详细信息,包括名称、版本等。在旧版本的软件里,可以使用--os-variant参数来指定操作系统的版本。如果要查看所有支持的操作系统,可以使用osinfo-query os命令。如果系统没有这个命令,可以运行apt install libosinfo-bin来安装。 -
--name=linx-debian12: 设置虚拟机的名称为linx-debian12,这将用于标识该虚拟机。 -
--virt-type=kvm: 指定使用 KVM 作为虚拟化技术,KVM 是基于 Linux 内核的虚拟化技术,通常用于提供高性能的虚拟机。 -
--ram=2048: 为虚拟机分配 2048 MB(即 2 GB)的内存。 -
--vcpus=2: 为虚拟机分配 2 个虚拟 CPU 核心。 -
--cdrom: 指定虚拟机使用的安装介质是本地路径。 -
--disk: 指定虚拟机的硬盘映像文件路径为。 -
--boot=cdrom: 指定了硬盘优先从光盘启动。 -
--channel: 信道。以上设置一个virtio类型的通道,用于与虚拟机内的 QEMU Guest Agent 通信。QEMU Guest Agent 可以让主机与虚拟机进行更多的交互,比如同步时间、发送控制命令等。这里指定了使用 Unix 套接字/var/libvirt/qemu/llinx-debian12.agent进行通信。name=org.qemu.guest_agent.0是虚拟机和宿主机之间用于通信的标准名称 -
--network: 为虚拟机指定网络,default是默认网络,通常是一个 NAT 网络,可以让虚拟机通过主机的网络连接到外部网络。 -
--graphics: 配置虚拟机图形界面,上面使用 VNC 来显示图形界面,listen=0.0.0.0表示监听所有 IP 地址,port=5900是 VNC 的端口号。这样可以远程连接到虚拟机的图形界面。 -
--noautoconsole: 不自动打开虚拟机的控制台,防止在命令行上自动附加到虚拟机的控制台输出。
虚拟机启动后,我们可以通过 VNC 客户端来连接虚拟机,在 debian 宿主机上安装 tigervnc-viewer, 并用来连接虚拟机。如下mingl
# 安装
apt install tigervnc-viewer
# 连接
vncviewer <服务器IP>:<端口>打开窗口之后就可以进入正常的虚拟机系统安装流程了,安装完成之后,重启虚拟机。
# 查看正在运行的虚拟机列表
virsh list
# 查看所有虚拟机列表
virsh list --allvirsh dominfo <虚拟机名称>virsh start <虚拟机名称># 停止虚拟机
virsh shutdown <虚拟机名称>
# 强制停止虚拟机
virsh destroy <虚拟机名称>virsh reboot <虚拟机名称>virsh undefine <虚拟机名称>在以上步骤中我们已经创建了一个位于/opt/data/kvm目录下的debian12-001.qcow2文件。这个文件是一个虚拟机磁盘映像文件,它包含已经安装虚拟机的操作系统和数据。因此可以从该文件创建新的虚拟机。复制一份该文件,并修改文件名,以创建新的虚拟机,如下
cp /opt/data/kvm/debian12-001.qcow2 /opt/data/kvm/debian12-002.qcow2先定义新虚拟机与原虚拟机不同的变量,再使用virt-install命令来创建虚拟机。如下命令
# 创建变量
disk_path=/opt/data/kvm/debian12-002.qcow2
name=linux-debian12-002
vnc_port=5901
# 创建虚拟机
virt-install \
--osinfo=debian11 \
--name=${name} \
--virt-type=kvm \
--ram=2048 \
--vcpus=2 \
--disk path=${disk_path} \
--channel unix,path=/var/libvirt/qemu/${name}.agent,mode=bind,target_type=virtio,name=org.qemu.guest_agent.0 \
--network network=default \
--graphics vnc,listen=0.0.0.0,port=${vnc_port} \
--noautoconsole \
--import与创建第一个虚拟机的区别是,使用了 --import 参数,表示导入磁盘映像文件,也不需要再指定--cdrom参数。同时,我们已经指定了 --network network=default,那么 virt-install 默认会为新的虚拟机生成一个唯一的 MAC 地址,即使是复制的虚拟机,MAC 地址也不会冲突。
原始已安装的系统镜像是20G,如果我们需要更大的磁盘,可以修改--disk参数,如下是一个例子,指定磁盘大小为30G
--disk path=${disk_path},size=30创建完成之后,就可以使用vncviewer 来连接虚拟机。
在上述过程中,我们使用默认的 NAT 模式,即虚拟机通过主机的 IP 地址访问外网。接下来,我们将配置桥接模式,让虚拟机通过物理网卡直连到物理网络,这样虚拟机可以访问物理网络内的资源。
宿主机需要添加一个网卡,用于连接物理网卡,并分配一个 IP 地址。添加网卡的命令如下:
brctl addbr br0brctl show当前系统存在的网卡设备会显示在终端中。
# 创建网桥 br0
ip link add name br0 type bridge
# 为桥接 br0 添加 IP 地址并设置广播地址
ip addr add 192.168.0.101/24 broadcast 192.168.0.255 dev br0
# 启用网桥 br0
ip link set dev br0 up
# 添加默认网关
ip route add default via 192.168.0.1 dev br0
# 启用物理网卡 enp5s0(如果还没有启用物理网卡,先启用物理网卡)
ip link set dev enp5s0 up
# 将物理网卡 enp5s0 添加到桥接 br0 中
ip link set dev enp5s0 master br0
# 删除物理网卡 enp5s0 的 IP 地址,物理网卡的IP地址也可以不删除
ip addr flush dev enp5s0这样配置后,br0 网桥将接管物理网卡的通信职责,并可以用作虚拟机的网络接口。
在命令 ip link set dev enp5s0 master br0 中:
enp5s0是物理网卡(通常是有线网卡)。br0是网桥设备。master br0意味着将enp5s0作为br0的从设备(slave),并通过br0来管理enp5s0的网络通信。
桥接网络接口后,enp5s0 不再直接拥有 IP 地址,所有流量会通过 br0 网桥处理,这样多个虚拟机或其他网络接口可以通过网桥共享同一物理网卡的网络连接。
如果操作错误的步骤,可以执行以下命令删除虚拟网桥
ip link set br0 down
ip link delete br0 type bridge使用以下命令打开虚拟机的配置文件
virsh edit <虚拟机名称>找到 interface 标签,修改为以下内容
<interface type='bridge'> <!-- 指定桥接模式 -->
<source bridge='br0'/> <!-- 指定桥接设备 -->
<!-- 其他配置暂时 忽略 -->
</interface>修改完成重启虚拟机之后生效。