首页 如何在Debian系统上安装PVE,实现与Windows的双系统共存
文章
取消

如何在Debian系统上安装PVE,实现与Windows的双系统共存

一、需求概述与硬件配置

1.1 需求概述

我有一台电脑,安装了 WindowsDebian 双系统。Windows 系统主要用于日常娱乐,如打游戏、剪辑视频等操作,而 Debian 系统则主要用于开发、学习和工作,提供了一个高效的开源环境。

然而,为了进一步提升资源利用效率,并且方便同时处理更多任务,我希望在 Debian 系统上安装 Proxmox Virtual Environment (PVE)PVE 作为一款企业级虚拟化平台,不仅支持 KVMLXC 两种虚拟化技术,还提供了强大的 Web 界面管理,能让我轻松在同一台主机上创建和管理多个虚拟机。这不仅能在开发过程中模拟多种环境,还能大幅优化硬件资源的使用。

与常见的虚拟化软件如 VirtualBoxVMware WorkstationMultipass 之类的虚拟化工具相比,PVE 在资源管理、性能和灵活性方面有明显优势。VirtualBoxVMware 等桌面虚拟化软件更适合轻量级的虚拟化应用,但当需要运行多个虚拟机并管理资源时,它们的性能往往会受到限制。而 PVE 作为专门用于服务器虚拟化的平台,可以使用Linux 内核级别的虚拟化功能,不仅更高效,还能更好地利用 Debian 系统的强大功能。

在本文中,我将介绍如何将 PVE 安装在 Debian 系统上,以实现与 WindowsDebian with PVE 的双系统的共存。

2.1 硬件配置

类型型号备注
CPUIntel 12600k 12核16线程 
内存金百达银爵 16G DDR4 3200MHz * 4 总64G 
显卡NVIDIA 4060 
硬盘致钛 7100pro 1T + 惠普某型号固态 4T 

以上硬件只是作为参考,硬盘最终要分配给操作系统使用,这里特指硬盘,硬盘如何分配要根据自己电脑与自身需求的实际情况。

二、Debian系统安装

2.1 安装Debian

首先,我的电脑硬盘使用了 GPT 分区表格式,这是现代操作系统普遍推荐的格式化方式。与传统的 MBR 不同,GPT 格式支持更大的硬盘和更多的分区,并且需要通过 UEFI 引导系统。

Windows 系统中,通过官方安装程序创建的启动盘会自动进行分区,其中包含一个 EFI 分区(可以在磁盘管理工具中查看)。该分区存储了 Windows 的引导程序,是系统启动的关键。在安装 Debian 系统时,Debian 的引导程序也会被写入到这个 EFI 分区,从而实现双系统共存和引导管理。

我的 Windows 安装在 1T 的固态硬盘上,另外 4T 作为备用硬盘,或者说数据盘。这里建议选择性能好的硬盘用来安装系统,剩余的硬盘用来存储数据。我从 Windows 主分区中压缩了 600G 用于安装 Debian 系统。

2.2 Debian系统安装基本软件

Debian 的安装过程这里不再说明,Debian 的安装程序很方便,直接按照提示操作即可。我们可以选择安装桌面环境,不过如果你使用的是 Nvidia 的显卡,建议先安装系统基本组件,等进入系统后,安装显卡驱动之后再安装桌面环境。以下是我的安装过程:

首先安装好 Debian 之后推荐把 apt 源换为国内的源,这样速度会更快。并且安装是基本的软件,如果你的显卡是 Nvidia,那么需要额外安装 Nvidia 的驱动。建议使用 non-free 源直接安装即可,我的 Nvidia 显卡主机安装过程如下

1
2
3
4
5
6
7
8
# 软件源替换为中科大源
echo "deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list
# 更新源
apt update
# 安装vim、网络工具、源代码编译基础依赖,以及nvidia显卡驱动
apt install -y vim net-tools build-essential nvidia-driver
# 安装gnome桌面,以下会安装桌面环境和常用桌面软件
apt install -y task-gnome-desktop

执行 apt install -y task-gnome-desktop 这条命令 Debian 会安装上常用的桌面环境,包括一些小游戏,如果不想要小游戏,可以执行以下命令删除掉

1
2
apt purge gnome-games
apt autoremove

如果你指向安装 Debian 的最基本桌面环境,不需要额外的工具,可以将上述最后一行安装命令替换如下

1
apt install -y gnome-core

执行完以上步骤,则完成基本软件以及 Debian 桌面环境的安装,重启后即可登录桌面环境。

三、PVE环境安装

你可以参考官网教程https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_12_Bookworm

这里我根据官网教程以及个人需求,我的安装过程记录如下

3.1 设置本机域名解析

将本机 IP 地址解析为域名,方便后续使用,如下

1
echo "127.0.0.1 pve.local" >> /etc/hosts

域名需要根据你实际需求来设置,这里我设置为 pve.local

3.2 安装PVE源

首先,新增 PVE 仓库 key 到系统中,如下

1
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg 

然后添加 PVE 官网源地址到 apt 源列表中,如下

1
echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list

如果在国内,更推荐使用镜像,我使用的是中科大源的源地址,如下

1
echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list

3.3 更新源并安装PVE

更新源并安装 PVE,如下

1
2
3
4
5
6
7
8
9
# 更新软件源
apt update && apt full-upgrade
# 安装PVE
apt install proxmox-default-kernel proxmox-ve
# 删除多余的内核
apt purge linux-image-amd64
apt autoremove
# 更新引导程序
update-grub

os-prober 用于包扫描主机的所有分区,以创建双引导 GRUB 条目。但是扫描的分区也可以包括分配给虚拟机的分区,这些分区不想作为引导条目添加,所以官方推荐删除 os-prober 包,如下命令

1
2
apt purge os-prober
apt autoremove

正常情况下,完成以上操作虚拟机就可以正常使用了,通过访问 https://127.0.0.1:8006 地址即可打开 PVE 管理后台。

四、配置硬件直通

4.1 什么是硬件直通?

PVE(Proxmox Virtual Environment) 中的硬件直通 (PCI Passthrough) 指的是将主机的某个硬件设备(如显卡、网络适配器等)直接分配给虚拟机,使虚拟机能够直接控制该硬件。这种方式能够提高虚拟机的性能,因为虚拟机可以直接使用物理设备的能力,而不需要通过虚拟化层进行访问。常用于需要高性能计算的场景,如游戏、图形处理和高性能计算任务。实现硬件直通通常需要支持 VT-dAMD-Vi 的处理器和主板,并在 BIOS 中启用相关设置。

我们需要在系统中启用 IOMMU(Input-Output Memory Management Unit),这对于 PCI 设备直通是必需的。下文是硬件直通配置的步骤。

4.2 启用 BIOS 中的 IOMMU

  • 重启计算机,进入 BIOS 设置。
  • 查找与 IOMMU 相关的选项,通常在 “Advanced” 或 “Chipset” 设置中。
  • 启用 IOMMU(可能标记为 VT-dAMD-Vi,具体取决于你的 CPU)。
  • 保存并退出 BIOS 设置。

4.3 修改 GRUB 配置

  • 在 Debian 系统中,打开终端。
  • 编辑 GRUB 配置文件:
1
sudo vim /etc/default/grub
  • 找到 GRUB_CMDLINE_LINUX_DEFAULT 行,并添加以下内容(根据你的 CPU 类型选择):

对于 Intel CPU:

1
intel_iommu=on

对于 AMD CPU:

1
amd_iommu=on

修改后的行可能类似于

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

保存并退出编辑器,运行以下命令以更新 GRUB 配置

1
sudo update-grub

4.4 重启 PVE 系统

重启计算机,使更改生效。启动后,你可以通过以下命令检查 IOMMU 是否已启用

1
dmesg | grep -e DMAR -e IOMMU

如果启用,应该能看到相关的信息。完成上述步骤后,IOMMU 应该会正常启用,你可以尝试添加 PCI 直通设备。如果仍然遇到问题,请检查 BIOS 设置是否保存成功,并确保你的硬件支持 IOMMU

五、通过无线网卡配置网络

5.1 网段分配

我的主机使用无线网连接的路由器,而无线网通常不支持虚拟网桥绑定。为了使得宿主机能通过网络正常访问虚拟机,且保证虚拟机能访问外网。我们创建一个不绑定网卡的虚拟网桥,使用 NAT 的方式实现网络地址转换,需要在 Proxmox VE (PVE) 宿主机上设置执行下文的步骤。

根据我的电脑硬件以及家庭网络环境的情况,我的宿主机和虚拟机的计划IP或网段分配如下

设备IP或网段备注
路由器192.168.0.1 
宿主机192.169.0.100推荐设置固定IP,且和路由器IP在一个网段内
虚拟机网桥192.168.100.1网段不与宿主机网段重叠
虚拟机192.168.100.0/24与虚拟网桥在同一个网段内

5.2 创建NAT网络

  1. 登录到 Proxmox Web 界面。
  2. 在左侧导航栏中,选择 “数据中心”
  3. 选择 “网络” 标签。
  4. 点击 “创建” 按钮,选择 “Linux Bridge”
  5. 为网桥命名(如 vmbr1),确保 “桥接端口” 留空。
  6. 点击 “添加”

5.3 配置 NAT

1.打开 Proxmox 的终端或 SSH 登录到宿主机。 2.编辑 /etc/network/interfaces 文件,添加如下配置:

1
2
3
4
5
auto vmbr1
iface vmbr1 inet static
    address 192.168.100.1
    netmask 255.255.255.0
    bridge_ports none

3.保存文件并退出。

5.4 启用 IP 转发

1.运行以下命令启用 IP 转发:

1
2
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

5.5 配置 iptables 规则

1.设置 iptables 规则以允许 NAT:

1
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o <你的外网接口> -j MASQUERADE

<你的外网接口> 替换为宿主机的实际外网接口(我的无线网口是 wlo1)。

宿主机重启后,iptables 规则被重置是因为这些规则并没有被保存。要确保在重启后保持 NAT 规则,可以按照以下步骤操作。

使用以下命令将当前的 iptables 规则保存到文件中:

1
iptables-save > /etc/iptables/rules.v4

如果没有 /etc/iptables/rules.v4 文件,系统可能需要安装 iptables-persistent 包,该包可以在系统启动时自动加载这些规则:

1
apt install iptables-persistent

在安装过程中,系统会询问您是否要保存当前的规则。选择“是”以确保当前规则在重启后仍然生效。

2.为了使规则在重启后生效,可以将这些规则写入 /etc/rc.local 或使用 iptables-persistent

5.6 配置虚拟机

  1. 在 PVE 中选择你的虚拟机,进入 “硬件” 选项。
  2. 点击 “添加” > “网络设备”
  3. 将网络设备连接到刚创建的 vmbr1
  4. 启动虚拟机。

5.7 在虚拟机中配置网络

  1. 在虚拟机中,设置一个静态IP(如 192.168.100.2),子网掩码为 255.255.255.0,网关为 192.168.100.1

5.8 测试连接

在虚拟机中,尝试 ping 外部地址,如 ping 192.168.0.1以确认能访问内网路由器,ping www.baidu.com以确保能访问互联网。

六、通过有线网卡配置网络

6.1 宿主机配置网络

由于无线网卡的特性,通常不支持桥接模式。因此,虚拟机无法直接连接到无线网络,这时需要使用 NAT(网络地址转换)来实现网络访问。

使用 NAT 可以让虚拟机通过宿主机的 IP 地址访问互联网或其他局域网设备。这意味着虚拟机会使用与内网不重叠的网段进行配置,以避免 IP 冲突,同时宿主机负责将虚拟机的网络请求转发到外部网络。

PVE 中(或者说 Linux 中),有线网卡(例如通过以太网连接)可以直接与局域网进行桥接,允许虚拟机获得与物理网络相同的 IP 网段的地址,这样它们可以直接与局域网中的其他设备通信。我们可以在宿主机上配置一个虚拟网桥,并将其连接到物理网卡上,这样虚拟机就可以通过网桥访问局域网。

编辑 /etc/network/interfaces 文件,添加如下配置:

1
2
3
4
5
6
7
8
9
iface enp3s0 inet manual

auto vmbr0
iface vmbr0 inet static
    address 192.168.0.100/24
    gateway 192.168.0.1
    bridge-ports enp3s0
    bridge-stp off
    bridge-fd 0

以上配置将 enp3s0 接口设置为一个桥接接口 vmbr0,并为 vmbr0 分配了一个静态 IP 地址,同时配置了网关。这个桥接用于虚拟化环境,让虚拟机能够通过宿主机的网络连接到外部网络,同时宿主机也可以通过 vmbr0 访问虚拟机。

6.2 虚拟机网络配置

在创建虚拟机之后,需添加一个网络设备,将网络设备连接到 vmbr0,那么虚拟机就可以使用网络了,建议虚拟机在设置 IP 地址时使用和宿主机相同的网段。

七、修复Windows引导

7.1 修改grub配置

在安装 pve 之后,grub 中的 window 引导条目将丢失。即使系统安装了 os-prober 也没有扫描出来,我不知道是我主机的本身的原因,还是是因为我所安装 pve 版本的原因。实际上我们有办法手动添加windows引导。

一般 Windows 的 EFI 系统分区是第一个硬盘的第一个分区。你可以在 /etc/grub.d/40_custom 中使用以下配置来添加 Windows 引导:

1
2
3
4
5
6
menuentry 'Windows 10' {
    insmod part_gpt
    insmod fat
    set root='hd0,gpt1'  # hd0 指的是第一块磁盘,gpt1 表示 GPT 分区表中的第一个分区
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

之后执行:

1
update-grub

看看是否能看到 Windows 的引导选项。如果仍有问题,一般是你指定的硬盘位置不正确,以在 GRUB 命令行界面手动测试引导,

7.2 grub页面手动测试引导

在 GRUB 启动时,按下 c 进入命令行,手动尝试引导 Windows:

1
2
3
set root=(hd0,gpt1)
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
boot

如果报错,可以尝试修改一下 root 参数,如hd0 修改 hd1,再尝试。

本文由作者按照 CC BY 4.0 进行授权

用Rust和Pingora轻松构建高效负载均衡器

-