王锐
王锐
发布于 2025-03-23 / 7 阅读
0
0

ubuntu server下创建windows虚拟机

感觉可以参考:https://ostechnix.com/setup-headless-virtualization-server-using-kvm-ubuntu/

在 Ubuntu Server 上通过命令行创建 Windows 10 虚拟机并进行远程访问,可以使用 KVM(基于内核的虚拟机)和 virt-install 命令来创建虚拟机,远程访问可以通过 RDP(远程桌面协议)或者通过 VNC 来进行。以下是完整的步骤:

步骤 1: 安装虚拟化软件

首先,确保你的 Ubuntu 服务器上已安装了 KVM 和相关虚拟化工具。

  1. 更新系统:

复制代码

sudo apt update sudo apt upgrade

  1. 安装 KVM 和相关工具:

复制代码

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

  • qemu-kvm: KVM虚拟化模块

  • libvirt-daemon-system: KVM 管理工具

  • bridge-utils: 网络桥接工具

  • virt-manager: 图形管理工具(可选,用于其他操作)

步骤 2: 启动并启用 libvirtd 服务

确保 KVM 服务已启用并在系统启动时自动启动:

复制代码

sudo systemctl enable libvirtd sudo systemctl start libvirtd

1. libvirt-qemu 用户授予访问权限

虚拟机的进程是由 libvirt-qemu 用户运行的。要解决此问题,需要确保 libvirt-qemu 用户对文件有访问权限。

使用 setfacl 命令授予访问权限:

执行以下命令以为 libvirt-qemu 用户授予读取权限:

bash

复制代码

# 授予 libvirt-qemu 用户对目录的搜索权限 sudo setfacl -m u:libvirt-qemu:rx /home/ubuntu 
sudo setfacl -m u:libvirt-qemu:rx /home/ubuntu/virtual_machine sudo setfacl -m u:libvirt-qemu:rx /home/ubuntu/virtual_machine/iso # 授予 libvirt-qemu 用户对文件的读取权限 sudo setfacl -m u:libvirt-qemu:r /home/ubuntu/virtual_machine/iso/windows10.iso

步骤 3: 创建虚拟机

你可以使用 virt-install 命令来创建一个 Windows 10 虚拟机。

  1. 准备 Windows 10 安装 ISO 镜像

确保你已经准备好了 Windows 10 的 ISO 镜像文件,并且知道它的路径。假设镜像路径为 /path/to/windows10.iso

  1. 创建虚拟机

使用 virt-install 创建 Windows 10 虚拟机。以下是命令示例:

bash

复制代码

sudo virt-install \
--name win10-desktop \
--ram 4096 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/win10-desktop.qcow2,size=50 \
--cdrom /home/ubuntu/virtual_machine/iso/windows10.iso \
--os-variant win10 \
--network bridge=virbr0 \
--graphics spice,listen=0.0.0.0

参数说明

  • --name:虚拟机名称

  • --ram:分配的内存(4GB)

  • --vcpus:分配的 CPU 核数

  • --disk:虚拟机硬盘的位置和大小(50GB)

  • --cdrom:Windows 10 安装 ISO 镜像路径

  • --os-type--os-variant:操作系统类型和版本(Windows 10)

  • --network bridge=virbr0:桥接网络,使虚拟机可以访问外部网络

  • --graphics vnc,listen=0.0.0.0:启用 VNC 图形接口,允许远程连接到虚拟机的图形界面,listen=0.0.0.0 使 VNC 接口可从任何地方连接

  • --extra-args:启用串行控制台,以便通过命令行安装操作系统

  1. 使用无头虚拟机

如果不需要图形界面,可以在无头模式下运行虚拟机,并且通过ssh访问,这对服务器环境非常有用;

可以移除 --graphics 参数,运行虚拟机仅以命令行方式进行操作,例如:

sudo virt-install \
--name windows10-vm \
--ram 4096 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/windows10-vm.qcow2,size=50 \
--cdrom /home/ubuntu/virtual_machine/iso/windows10.iso \
--os-variant win10 \
--network bridge=virbr0

步骤 4: 启动虚拟机

虚拟机创建完成后,使用以下命令启动虚拟机:

复制代码

sudo virsh start windows10-vm

步骤 5: 远程访问虚拟机

1. 使用 VNC 连接到虚拟机

如果你启用了 VNC 图形界面,可以使用 VNC 客户端(如 TigerVNCRealVNC)来连接到虚拟机的图形界面。

获取虚拟机的 IP 地址:

使用以下命令查看虚拟机的 IP 地址:

复制代码

sudo virsh console windows10-vm

在虚拟机中运行 ip a 来查看 IP 地址。假设虚拟机的 IP 地址是 192.168.1.100

  • 使用 VNC 客户端连接:

    通过 VNC 客户端连接到虚拟机,地址为 IP地址:端口,例如 192.168.1.100:5900。如果在宿主机上访问,你可以在本地的 VNC 客户端中使用该地址进行连接。

2. 使用 RDP 连接到虚拟机(Windows 安装后)

安装并配置好 Windows 10 操作系统后,你可以通过 RDP(远程桌面协议)来远程访问虚拟机。你需要确保虚拟机安装了 Windows 远程桌面服务。

  • 在虚拟机中启用远程桌面:

    1. 打开 Windows 设置 > 系统 > 远程桌面

    2. 启用远程桌面。

    3. 确保防火墙允许 RDP 流量。

  • 获取虚拟机的 IP 地址(通过 ip a 或使用 virsh console 连接查看)。

使用 RDP 客户端(如 Remminardesktop 或 Windows 自带的远程桌面)连接到虚拟机:

复制代码

rdesktop 192.168.1.100

或者,如果使用 Windows 自带的远程桌面,输入虚拟机的 IP 地址进行连接。

3. 通过 SPICE 协议远程访问虚拟机

SPICE 是一种专门用于虚拟机的远程协议,通常在 KVM 环境中使用。virt-viewer 是一个 SPICE 客户端,可以连接到虚拟机。

步骤:

在虚拟机上启用 SPICE 访问: 在 virt-install 命令中,使用 --graphics spice 参数来启用 SPICE 访问。例如:

复制代码

sudo virt-install \ 
--name ubuntu-vm \ 
--ram 2048 \ 
--vcpus 2 \ 
--disk path=/var/lib/libvirt/images/ubuntu-vm.qcow2,size=20 \ 
--cdrom /path/to/ubuntu.iso \ 
--os-type linux \ 
--os-variant ubuntu20.04 \ 
--network bridge=virbr0 \ 
--graphics spice \ 
--extra-args "console=ttyS0,115200n8 serial"

使用 virt-viewer 连接虚拟机: 安装 virt-viewer 客户端:

复制代码

sudo apt install virt-viewer

然后使用 virt-viewer 连接虚拟机:

复制代码

virt-viewer ubuntu-vm

这将启动一个图形界面,连接到虚拟机。

优点:

  • 支持高效的图形界面,适用于虚拟机图形化操作。

  • 通过 SPICE 协议,性能比 VNC 更高。

步骤 6: 配置虚拟机的自动启动

如果希望虚拟机在宿主机启动时自动启动,可以执行以下命令:

复制代码

sudo virsh autostart windows10-vm

这会确保虚拟机在宿主机开机时自动启动。

虚拟机基本操作

  • 查看当前运行的虚拟机

ubuntu@y410p:~$ sudo virsh list
 Id   Name           State
------------------------------
 9    windows10-vm   running

ubuntu@y410p:~$ sudo virsh list --all
 Id   Name           State
------------------------------
 9    windows10-vm   running
  • 停止虚拟机

ubuntu@y410p:~$ sudo virsh shutdown windows10-vm
Domain 'windows10-vm' is being shutdown
  • 强制停止虚拟机

ubuntu@y410p:~$ sudo virsh destroy windows10-vm
Domain 'windows10-vm' destroyed
  • 删除虚拟机

ubuntu@y410p:~$ sudo virsh undefine windows10-vm
Domain 'windows10-vm' has been undefined


评论