好像有一段时间没有怎么搞技术了,博客也断更了有一段时间,所以得调整下自己了。一般这个时候我就喜欢收拾家庭卫生,搞搞电脑系统配置,有善始者实繁,好好立 Flag,就好像这些准备好之后真的会认真搞技术一样。具体可以坚持多久我也不清楚,总之先做着看看吧,所以这篇 PVE 虚拟化生产环境配置的文章就此诞生了。

PVE 简介

PVE 的全称是 Proxmox Virtual Environment,是一个基于 QEMU/KVM 的 Linux 下的虚拟机,相比于传统的 Vmware 等虚拟机,主要的优点就是支持硬件直通了。硬件直通这意味着可以把你的显卡等设备直通到虚拟机中,给你的虚拟机注入鸡血,再也不用忍受传统虚拟机孱弱的显卡图形性能了!物理机足够强的话,虚拟机的使用体验基本上也不会差的。如果你还有多显示器的话,无需重启切换系统,就可以一边 Windows 下畅玩 3A 大作游戏,一边使用 macOS 进行视频剪辑渲染,再一边使用 Linux 进行编程开发等,真就工作生活两不误,让你的冗余的电脑配置性能得到充分的释放利用。

硬件概览

先看下国光我目前的主要硬件情况:

硬件 型号规格 备注
CPU I7-10700 8核16线程 10 代是黑苹果的绝唱了
内存 64GB DDR4 2666Mhz 内存插满了就得利用起来呀
显卡-1 蓝宝石 RX6600XT 白金版 物理黑苹果或者 PVE Windows 使用
显卡-2 迪兰恒进 RX470 4GB 物理黑苹果或者 PVE macOS 使用
SSD-1 WD SN570 1TB 专门安装 PVE 系统
SSD-2 WD SN550 512GB 物理黑苹果专用
HDD-1 WD 机械 1TB 做 Exfat 格式数据中转使用
HDD-2 希捷 2TB 做资料存储私有
HDD-3/4 两个希捷 2TB 组 Raid1 做重要资料备份
显示器-1 27寸 4k IPS 显示器 可控 PVE macOS 使用
显示器-2 28寸 4k 144Hz IPS 显示器 可供 PVE Windows 使用
显示器-3 15.6寸 4k 触控便携显示器 灵活调度使用
妙控板 妙控板 2 代 新款 物理黑苹果和 PVE 黑苹果使用
笔记本 Macbook Pro 16 寸 2019 款 本文就是在这台机器上写的
平板 iPad Pro 11寸 iPad 也可以进 Web 界面管理 PVE
键盘搭配 1 IKBC Poker + 罗技 G102 PVE macOS 黑苹果使用
键鼠搭配 2 客制化键盘 + 罗技 G304 + Xbox one 手柄 PVE Windows 下使用

可以看到国光我目前的配置还是很适合做 PVE 的,不体验一下可惜了:

参考资料

另一个比较巧的是 PVE 目前黑苹果已经算是比较成熟的了,不会像之前我搞双屏笔记本黑苹果那样,完全没有任何可参考的资料,踩了很多坑。下面是国光我学习 PVE 中一些很宝贵的资料,基本上结合这些资料都可以很成功的

PVE 安装

PVE 环境

PVE 其实是基于 Debian 封装的,但是不建议大家先安装 Debian 再安装 PVE,这样会给自己找很多不必要的麻烦。建议直接使用 PVE 官方的镜像,官方镜像实际上就是集成了 PVE 的最小化 Debian 环境,完全不用自己去配置安装,非常方便。

BIOS 设置

BIOS 主要关注几个点:

  • 打开,Intel® Virtualization Technology for Directed I/O (VT-d) 的缩写,I/O 的虚拟化技术
    • 硬件直通必备的开关
  • 关闭,Above 4G decoding,4G 以上解码
    • 显卡直通到时候需要关闭(虽然物理机黑苹果建议大家打开)

选择镜像

官方 ISO 镜像下载地址:https://www.proxmox.com/en/downloads/category/iso-images-pve

本次安装使用的并不是最新的 7.1 版本而是 7.0-2 版本,B 站司波图的 PVE 黑苹果视频教程提到过这一点,起初我还不信,最后果然翻车了,显卡直通 PVE macOS 的时候 OC 直接卡日志,因为这个是一个虚拟机环境,日志排错起来难度非常高,我直接放弃了,最后我老老实实安装了这个 7.0-2 版本了。

U 盘制作

balenaEthcher 直接写入到 U 盘就完事儿了,或者 Windows 下的 Rufus 也都是不错的制作启动盘的工具,硬核的话直接使用原生的 dd 命令写入也可以的。

安装流程

整个 PVE 安装过程很简单,所以下面只放关键的截图。首先选择一个你准备好安装 PVE 的整个磁盘,我选择的是 1TB 的 SN570:

设置 PVE 的 root 用户的密码,因为 PVE 是开源免费软件,邮箱啥的填自己的是没关系的:

选择好自己的网卡,然后配置 1 个静态 IP,根据自己的实际情况配置网关、DNS 等:

最后没问题的话,点击「Install」安装完成自动重启就安装完毕了:

硬盘速度快的话,整个过程安装只需要 5 分钟左右。

完成效果

很快啊,我们就安装完成了,重启即可自动进入 PVE 系统,默认是没有图形化界面的,非常简约。虽然我们可以在这里直接登录操作 PVE 系统:

但是这样不是很优雅,所以我们常常上面标记的 Web 地址去管理访问:

至此 PVE 就大功告成了,下面准备来挑战一下 PVE 黑苹果吧。

PVE 黑苹果(上)

PVE 安装黑苹果的优势比较明显,因为大家虚拟出的环境基本上是差不多的,所以基本上不挑剔硬件,那么就可以直接使用别人配置好的 OpenCore 引导轮子了,如果追求完美性能的话,也只需要准备 1 个 macOS 免驱的独显即可。

准备安装镜像

OpenCore 引导

开源项目地址:https://github.com/thenickdude/KVM-Opencore/releases

直接下载解压然后上传到 PVE 的 ISO 镜像库即可

官方恢复镜像

这种方式用于在线安装 macOS 的原版镜像,优点是纯净,但是对网速比较差的网友不是很友好。

开源项目地址:https://github.com/thenickdude/OSX-KVM

需要我们自己手动编译生成 Monterey-recovery.img 恢复镜像,使用 Linux 或者 macOS 直接 make 编译即可:

# 拉取项目
git clone https://github.com/thenickdude/OSX-KVM.git

# 编译恢复镜像
cd scripts/monterey
make Monterey-recovery.img

# 如果你网速很快的话 直接构建完整版镜像也是 OK 的 (可选操作)
make Monterey-full.img

最后上传 Monterey-recovery.img 到 PVE 的 ISO 镜像库即可

传统黑苹果镜像

对于我们黑苹果职业玩家来说,出来工作随身带个“锤子”是很正常的,所以大家基本上都是有黑苹果镜像的,不过呢我们的镜像是 dmg 格式的后缀,PVE 并不支持 dmg 后缀的镜像上传。解决方法也很简单,直接将镜像重命名为 iso 即可,对,就是这么简单,甚至都不需要使用 dmg2img 这种工具。

最后上传 macOS-12-3.iso 到 PVE 的 ISO 镜像库即可

镜像列表展示

目前一共用到了 3 个镜像,分别是:

国光我偏向于本地安装,速度快一点,这个因人而异,大家自行抉择。

编辑 PVE 配置

为了避免在 macOS 引导期间出现引导循环死机,得先进入 PVE shell 环境运行如下命令:

echo "options kvm ignore_msrs=Y" >> /etc/modprobe.d/kvm.conf && update-initramfs -k all -u

修改完成重启 PVE:

虚拟机的创建

下面是 PVE 虚拟机创建的一些主要细节,PVE 会给你的虚拟机分配一个 VM ID,这个 ID 后面后续会用到:

先添加一个 OpenCore 的引导镜像,系统类别选择「Other」:

显卡选择「VMWare 兼容」,开启 Qemu 代理,BIOS 选择「QVMF UEFI」,机器选择「q35」,详细细节参考下图:

硬盘选择「VirtIO Block」,缓存选择「Write back 不安全」,磁盘大小根据你的需要进行设置,其他默认即可:

CPU 设置好核心数(建议 2、4、8),类别选择「Penryn」,勾选「启用 NUMA」,其他全部默认即可:

根据自己的实际配置分配内存,macOS 12 的话建议至少 8GB 内存:

网络这里选择「VirtIO 半虚拟化」:

创建完虚拟机后先不要着急开机,我们再添加一个我们的之前上传好的黑苹果本地的网站镜像:

如果没有黑苹果本地完整镜像,这一步添加之前的 Monterey-recovery.img 官方恢复镜像也是完全 OK 的(我们常说的在线安装形式)。

虚拟机的配置

我们之前 macOS 的虚拟机的 ID 为 100,所以我们可以通过这个 ID 直接来编辑虚拟机的配置( Web 界面功能有限,直接编辑配置可以更灵活定制):

nano /etc/pve/qemu-server/100.conf 

根据自己的 CPU 类别,在第 1 行添加如下配置:

  • intel CPU
args: -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc
  • AMD CPU
args: -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -cpu Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+avx2,+aes,+fma,+fma4,+bmi1,+bmi2,+xsave,+xsaveopt,check

接着修改我们的 CD 光盘配置,删掉「media=cdrom」换成「cache=unsafe」,最终的配置效果如下:

初始化虚拟机

直接启动我们配置好的虚拟机,可以看到了熟悉的界面:

那么下面就像黑苹果那样正常操作走一遍流程吧。

先进入磁盘工具,选择我们之前创建的 300GB 的磁盘,正常擦除为 APFS 格式:

后面就是常规的安装了,没啥可说的了:

对这个安装不熟悉的网友可以参考我的这篇文章:安装 macOS · 国光的黑苹果安装教程

最后很顺利的就成功安装进入系统了:

可以看到目前的显卡还是没有驱动的,但是问题不大,我们下面的文章接着优化。

PVE 黑苹果(中)

设置开机自启

PVE 因为没有有桌面的原因,每次开启启动都需要通过 Web 界面来启动,我们也可以直接将虚拟机设置开机自启动:

这样在直通显卡的操作后也会和物理机黑苹果有差不点多的体验。

移除安装镜像

安装好系统后就可以不用使用黑苹果镜像了,可以直接移除掉了:

移除镜像后重启。可以看到没有了之前的安装 macOS 选项了,直接就可以选择进入 Macintosh 已经安装好系统的磁盘:

移除引导镜像

回到之前的一张图,可以看到我们的虚拟机默认还挂载了 OpenCore 的 ISO 镜像:

大家可以把他比作是 USB 安装盘,我们以后每次开机总不能都插着 U 盘(ISO)启动吧,这样一点也不优雅,而且这个 ISO 镜像我们也不方便修改定制,所以需要把这个 OpenCore 的 ISO 镜像的 EFI 引导文件夹拷贝到硬盘当中。

使用 OCC 挂载硬盘盒 ISO 光盘后,直接将 ISO 光盘的 EFI 拷贝到硬盘里面即可:

拷贝完成后关机,就可以移除 OpenCore ISO 镜像了:

移除后重启,之后我们就可以直接编辑本地的 EFI 配置文件了,就像物理机黑苹果那样:

有黑苹果基础的同学还可以直接优化 EFI 配置,或者升级 OC 版本,没有基础的同学也没有关系,可以参考我写的这个教程慢慢来:国光的黑苹果安装教程:手把手教你配置 OpenCore

PVE 黑苹果(下)

直通 USB

细心的小伙伴会发现,目前通过 PVE 的 Web 界面操作我们的键鼠实际上是有延迟的,毕竟还是走得 VNC 网络传输协议,为了更好的体验,我们可以分配一个键鼠直通到 PVE 虚拟机中:

PVE 支持几种 USB 设备添加,下面简单的挑着解释一下:

  • 使用 USB 供应商/设备 ID
    • 根据你的设备名称添加
    • 就算你的 USB 拔掉换其他接口也可以正常直通到虚拟机的
  • 使用 USB 端口
    • 根据 USB 物理端口添加
    • 你这个接口插鼠标,那么鼠标就直通到虚拟机了
    • 根据实际情况勾选,USB3 是USB2 和 USB3 的合体,所以如果你的 物理端口是 USB 3 请勾选 USB 3

因为国光我不怎么拔插这些 USB 设备,所以我更偏向于后者,使用 USB 端口:

开启 IOMMU

接下来我们要准备将其他硬件直通到 PVE 虚拟机了,要实现这个功能就得开启 IOMMU 了,并关闭 PVE 物理机显卡占用,直接编辑配置下 PVE 的 GRUB 即可:

nano /etc/default/grub

将默认的GRUB_CMDLINE_LINUX_DEFAULT="quiet" 根据自己的 CPU 替换成如下内容即可:

  • intel CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction nofb textonly nomodeset video=efifb:off"
  • AMD CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt pcie_acs_override=downstream,multifunction nofb textonly nomodeset video=efifb:off"

编辑完成后,更新一下 grub

update-grub

更新完成后重启 PVE 物理机,可以看到我们的物理机确实已经不占用显卡了,开机的界面都变了:

此时已经无法在物理机上操作 PVE 了(不过我们本来也用不到),因为之前安装配置静态 IP 的原因,所以我们依然可以通过 Web 端来正常管理我们的 PVE 虚拟机。

关掉 VMware 兼容显卡

关掉显卡后的,我们就不可以通过 Web 界面走 VNC 协议来操作 PVE 虚拟机了:

所以下面第需要将物理显卡直通到虚拟机了。

直通 RX 6600XT

添加防黑屏参数

因为 OC 引导黑苹果的话,使用 RX5500/5600/5700/6600/6800/6900 新的免驱系列显卡启动过程中会黑屏,所以先需要编辑我们的 OC 配置文件,在启动项添加 agdpmod=pikera 参数:

保存配置文件后关闭 PVE 黑苹果虚拟机。

添加 RX 6600XT

添加 PCI 设备,找到我们的 RX 6600XT,这里没有显示出来,但是 Navi 23 确实是这个显卡的架构:

然后勾选全部选项:

直通效果

RX 6600XT 直通很简单,此时已经可以丝滑的像物理机那样体验 macOS 了:

显卡工作了,感觉虚拟机瞬间流畅多了:

不过从图上可以看出来,目前内存这块还是未知的,速率也看不到,不要慌,我们后面来自定义内存一下就行了。

直通 RX 470

5000/6000 系列直通很顺利哎,试试看能不能再直通一个 RX 470 显卡,因为已经有 6600XT 了,所以不勾选「主 GPU」:

然后直接开机,居然也这么顺利:

直通 UHD 核显

核显不可以像上面独显那样直接就直通过去,直接就是模仿上述操作那样,直通过去的话,实际上核显并不能真正的工作。那么在 macOS 下怎么测试核显是否正常工作呢?国光我是使用随航测试的,因为随航很吃核显性能,如果随航都流畅丝滑工作的话,那么核显一定也是 OK 的。

添加 VFIO 模块

PVE shell 环境下操作:

echo "vfio" >> /etc/modules
echo "vfio_iommu_type1" >> /etc/modules
echo "vfio_pci" >> /etc/modules
echo "vfio_virqfd" >> /etc/modules

屏蔽核显驱动

接着添加 intel 核显模块(驱动)黑名单,即让 GPU 设备在下次系统启动之后不使用这些驱动,把设备腾出来给vfio驱动用:

echo "blacklist snd_hda_intel" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist i915" >> /etc/modprobe.d/pve-blacklist.conf

然后更新内核重启机器:

update-initramfs -u
reboot

检查 VFIO 模块

检查之前配置的 VFIO 模块是否正常加载:

lsmod | grep vfio

上图这样表示是成功加载了的。

查找核显设备 ID

lspci -nn | grep Intel

从上图可以查询到:

  • 核显的硬件 ID:8086:9bc5
  • 核显自带的音频硬件 ID:8086:06c8

编辑 vfio.conf

将上述查询到的两个 ID 添加到 vfio.conf 文件中:

echo "options vfio-pci ids=8086:9bc5,8086:06c8" >> /etc/modprobe.d/vfio.conf

添加 PCI 设备

上述配置完成后,我们就可以再 PVE Web 界面里面将核显添加到 PVE 黑苹果虚拟机下了:

测试了 N 次,发现只需要勾选「所有功能」即可:

EFI 配置优化

因为这套 PVE 的 OC EFI 文件配置的默认机型是 iMac Pro1,1 这种是专门为无核显优化的,所以需要我们先将机型改为 iMac 20,1 这种更接近我们的实际硬件配置:

使用 Hackintool 工具拷贝出核显的设备地址:

然后使用 OCC 里面注入你的核显的显示 ID,玩过黑苹果的人可能会注入无头 ID (仅计算 ID),经过国光我多次测试,如果注入仅计算 ID 的话,那么此时的核显必然无法使用随航,具体原因不详:

另外一个测试就是多独显+核显的情况下,核显也无法正常工作,但是单个独显的情况下就是正常的,最终核显成功随航的效果如下:

直通博通免驱网卡

直通 WiFi

因为我的 BCM94360CD 插的也是 PCIE 接口,所以我们可以在 PCI 设备里面找到我们的无线网卡:

也给他添加到虚拟机中:

直通蓝牙

要想实现免驱网卡的所有功能,光有 WiFi 是不够的,蓝牙也得需要直通进去,蓝牙走的是 USB 协议,所以我们可以在 USB 设备中添加我们的蓝牙设备:

记得取消 USB3 勾选:

直通效果

WiFi、蓝牙 隔空投送均可以正常工作:

自定义内存

默认的内存

默认的内存为单条 16GB 内存,而且速度显示是未知的,看起来好奇怪哦:

OC 自定义内存

使用 OC 简单操作一下,将这个 16GB 内存自定义为 4 个 4GB 内存:

自定义内存效果

改完重启看看效果,舒服了,看上去和白苹果一样:

仿冒 W6600X 显卡

macOS 12.3 之后,非苹果自家出的卡性能多多少少都大打折扣,不过兵来将挡水来土掩,我们可以把我们的 RX 6600XT 仿冒成 白苹果的 W6600X 专业卡来提高性能,操作也不复杂,详细可见下方 OC 的显卡属性配置:

下面的仿冒配置参数供网友参考复制:

<key>PciRoot(以你的实际显卡路径为准)</key>
<dict>
  <key>@0,name</key>
  <string>ATY,Henbury</string>
  <key>@1,name</key>
  <string>ATY,Henbury</string>
  <key>@2,name</key>
  <string>ATY,Henbury</string>
  <key>@3,name</key>
  <string>ATY,Henbury</string>
  <key>ATY,DeviceName</key>
  <string>W6600X</string>
  <key>ATY,EFIVersion</key>
  <string>01.01.270</string>
  <key>ATY,FamilyName</key>
  <string>Radeon Pro</string>
  <key>device_type</key>
  <string>ATY,HenburyParent</string>
  <key>model</key>
  <string>AMD Radeon RRO W6600X</string>
  <key>name</key>
  <string>ATY,Henbury</string>
</dict>

最后的效果如下:

添加音频设备

其实音频设备不添加的话也没有关系,默认我可以直通的两个独显是可以通过 DP/HDMI 传输音频数据的,也可以通过蓝牙来传输音频数据:

或者使用下图中这种 USB 声卡也是可以的:

UBS 设备直通到虚拟机前面也说过了,非常方便简单:

最后的效果如下:

优化引导界面

提高显示清晰度

默认的 EFI 引导的分辨率为 1920x1080@30,这样在 4k 显示器上图标就很糊,很不优雅,我们只需要将控制台分辨率调整为:Max,然后将 UIScale 改为 2 就可以在 4k 显示器上完美输出了:

修改引导时间

默认的 EFI 引导的等待时间为0,这意味着不人为回车干预的话,会一直停留在 OC 的引导界面,这样不符合 PVE 的 风格,我们可以手动改一下等待时间为 5 秒,然后顺便取消一下平时不怎么使用的工具:

升级 OC 并精简

可以看出这个项目的默认 OC 还是很混乱的,这不能忍:

给他升级一下最新的 OC 0.7.9 然后精简一下吧,下面是国光我精简优化的思路:

  • ACPI 设置

  • 只留几个实际加载的 SSDT:DTGP、EC、EHCI、PLUG

  • 删除「删除」和「补丁」中没有加载的选项

  • 内核设置

    • 修改仿冒 CPU 数据
      • 不清楚作者的这个数据哪来的,所以我换成自己比较熟悉的数据了
      • Cpuid1Data:55060A00 00000000 00000000 00000000
      • Cpuid1Mask:FFFFFF00 00000000 00000000 00000000
    • 只留下面 3 个必备的 Kexts 并保持最新:
      • Liu.kext
      • WhateverGreen.kext
      • USBPorts.kext

    其他优化的话上文中都差不多提到了,目前感觉就上述两个部分需要调整的最多。

最终的优化效果

升级最新的 OC 0.7.9 版本,优化了 4k 屏幕显示,去除无用的引导项目,默认 5 秒自动进入 macOS 系统:

PVE 黑果 EFI 分享

本次优化后的 OpenCoren 引导配置文件也开源了,感兴趣的朋友可以去 Github 查收

Github 项目地址:https://github.com/sqlsec/PVE-OpenCore

PVE 黑果完美度

CPU 跑分

i7-10700 分配 4 核 CPU 的情况下,跑分情况,单核跑分:多核跑分:

单核跑分和物理黑苹果跑分对比损耗大概 **4%**:多核跑分因为我们直接砍了一半核心的原因,所以多核跑分也下降了近 1 半。

核显跑分

UHD 630 核显直通的跑分情况,OpenCL 跑分: 5043 Metal 跑分:4863,和物理核显相比损耗大概:3%

RX 6600XT 跑分

RX 6600XT 直通并仿冒白苹果 W6600X 的跑分情况,OpenCL 跑分:69022 Metal 跑分:90245 和物理独显相比损耗大概:3%

RX 470 跑分

RX 470 直通的跑分情况,OpenCL 跑分: 35310 Metal 跑分:40967,这个 RX 470 好像和物理独显相比没有损坏,五五开了应该。

隔空投送与接力

无线模式随航

这个之前直通核显的时候测试过了,随航也是正常使用的:

三码相关

三码正常的话,信息、iCloud、查找、应用商店这些应该也都很丝滑:

屏幕共享

macOS 12 新功能:隔空播放接收器,iOS、iPad OS 也可以直接投屏到 PVE 黑苹果中:

通用控制

macOS 12.3 新功能通用控制也是正常使用的,可以直接 Macbook Pro、iMac、iPad 共享一套键鼠:

PVE 黑苹果坑点

说了这么多,肯定又小伙伴要跃跃欲试了,但是 PVE 黑苹果真的没有缺点了吗?当然不是,有!而且还不少。

手贱改错 EFI

假如你 OC 不熟悉不小心改错了本地硬盘的 EFI(没错 就我自己了),这个时候不要慌,我们重新编辑配置文件:

nano /etc/pve/qemu-server/100.conf 

将之前分离的 OpenCore ISO 光盘重新添加回来即可:

ide0: local:iso/OpenCore-v16.iso,cache=unsafe

然后在选项里面调整一下引导顺序,将 OpenCore 光盘移动到第一位:

这样应该可以成功进系统,然后直接纠正之前改错的 EFI 就行了。

或者你直接准备一个物理 USB U盘,里面放着自己对应的 OC EFI,直接添加物理 USB 设备引导也是完全 OK 的,这个修复思路和物理黑苹果一样。

系统更新黑屏

系统更新的时候显示器会黑屏很长很长时间,这个时候你可能因为更新挂了,但是添加虚拟显示通过 PVE 来看又发现是正常的:

耐心等待系统更新完成即可,不能急躁。

Intel PG 不工作

Intel Power Gadget 无法正常工作,CPU 温度、频率以及核显频率都无法查看:

不过我们可以借助第三方的工具,比如 iStat Menus 这种来看 CPU 频率:

Video Proc 闪退

经典的双硬解查看软件,Video Proc 闪退:

这个是查看双硬解码的,不过从 Hackintool 结果来看硬解应该都是正常的:

温度传感器异常

第三方工具均无法正常识别各项传感器参数:

核显不能仅计算

这个实际上上文中直通核显的部分提到过,这里再啰嗦一下。实际上对于黑苹果来说,核显仅计算模式是最完美的,也最符合白苹果 iMac 的调度策略的,但是 PVE 黑苹果下如果开启仅计算的话,核显工作就不正常,表现为随航无法显示画面,所以只能给开启核显输出的正常 ID 了:

Hackintool 平台 ID

虽然核显也驱动了,但是平台 ID 依然是未知的:

不可以睡眠唤醒

虽然这个有点大可不必,都 PVE 了,谁还在意睡眠唤醒呀,但是还是要说一下,PVE 确实无法正常睡眠唤醒。点击睡眠后,在 PVE 控制台可以看到 PVE 虚拟机处于暂停的状态:

得我们手动点击「再继续」才可以,但是大概率会出现黑屏的情况,无法正常继续,所以这块就酱吧,不搞这么细了。不过手动在 PVE 控制台中暂停你的 PVE 黑苹果虚拟机是完全 OK 的,此时你的黑苹果虚拟机画面会卡主不动,真的和传统的虚拟机一样。

PVE 黑苹果总结

总的来说 PVE 黑苹果难度蛮高的,除了要求你有 Linux 基础之外,最好还得懂黑苹果技术,否则优化对你来说是一件很困难的事情,当然默认的 PVE 开源项目也可以直接使用,但是能用和用的舒服之间的差距还是蛮大的。

下面简单总结下 PVE 黑苹果优缺点

  • 优点

    • 可以多虚拟机同时运行,提高硬件利用率
    • 也可以通过模板快速创建管理多个虚拟机
    • 不需要从 0 开始定制 EFI,只需要简单优化
    • 可以灵活添加各种硬件,按需求添加
    • 基本上性能没有损耗,足够满足日常生产力需求
  • 缺点

    • 安装难度高,系统性参考资料不多
    • 黑苹果有些细节还不够完美,部分软件无法正常使用

PVE Windows 10

实际上最难的就是 macOS 安装了,PVE 安装 Windows 10 对比一下简直就是小菜一碟了。

virtio ISO 下载

我们虚拟机创建的是硬盘,但是 Windows 默认无法识别,需要我们先手动安装了驱动才能识别:

所以需要我们先额外给虚拟机挂载一个专门的 ISO 镜像包,这个镜像包里包含有一系列可能需要的驱动。

官方镜像的下载地址为:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.215-2/virtio-win-0.1.215.iso

镜像上传

到镜像库先上传我们的 Windows 10 镜像和上面下载的 virtio 镜像:

创建虚拟机

这个没啥可说的,网上很多,我就不一一贴图了,直接看我最后的硬件配置吧:

可以看到添加了两个 ISO 光盘,为了方便我这里还直通了 1 个 USB 键盘。

安装 Windows 10

将 Windows 10 安装盘优先引导启动:

然后很顺利的进入安装界面:

我们会卡在下面这一步:

选择光盘里面的驱动加载即可:

然后安装一下这个驱动:

后没有啥难点了,正常安装就行了:

驱动更新

Windows 10 老传统了,安装完先更新一波:

但是这样更新远远不够,我们查看设备管理器依然发现了有感叹号的设备,解决方法很简单,依然从之前的 virtio ISO 光盘里面搜索安装驱动就行了:

直通独显与 USB

移除之前的两个 ISO 光盘,然后将 RX 6600XT 和键鼠直通到 Windows 10 虚拟机里面:

然后去 AMD 官网下载对应的显卡驱动即可:https://www.amd.com/zh-hans/support

独显直通效果

哇舒服了,这个 4k 高刷显示器在 Windows 下终于跑满了,之前在 macOS 下最高只能跑 100Hz:

PVE 配置优化

PVE 7.X 换源

# 注释企业源
echo "#deb https://enterprise.proxmox.com/debian/pve bullseye pve-enterprise" > /etc/apt/sources.list.d/pve-enterprise.list

# PVE 软件源更换
wget https://mirrors.ustc.edu.cn/proxmox/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg

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

echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-pacific bullseye main" > /etc/apt/sources.list.d/ceph.list

sed -i.bak "s#http://download.proxmox.com/debian#https://mirrors.ustc.edu.cn/proxmox/debian#g" /usr/share/perl5/PVE/CLI/pveceph.pm

# Debian 系统源更换
sed -i.bak "s#ftp.debian.org/debian#mirrors.aliyun.com/debian#g" /etc/apt/sources.list
sed -i "s#security.debian.org#mirrors.aliyun.com/debian-security#g" /etc/apt/sources.list
echo "deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription" >>  /etc/apt/sources.list

# 更新测试一下
apt update

删除订阅弹窗

每次登录看到这个是不是有点烦人:

执行如下命令即可删除:

# 修改 JS 源码
sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

# 重启 PVE 服务
systemctl restart pveproxy.service

执行完成后,浏览器强制刷新缓存一下就可以了。

PVE 温度传感器

默认的样式

PVE 默认只可以看到下面这些基本信息,但是看不到具体的温度:

这都能忍,赶紧来安装配置一下。

安装 lm-sensors

lm-sensors 用于 CPU 以及主板温度检测,安装起来也很简单:

apt install lm-sensors -y

安装完成后就可以在命令下查看 CPU 以及主板温度了:

安装 hddtemp

hddtemp 用于 硬盘温度检测,安装起来也很简单:

apt install hddtemp -y

安装完成查看硬盘温度:

root@pve:~# hddtemp /dev/sd?
/dev/sda: WDC WD10EZEX-08M2NA0: 30°C
/dev/sdb: ST2000DM006: 26°C

因为我们后面需要放到 Web 界面显示,所以需要改这个软件 Web 端的权限:

chmod +s /usr/sbin/hddtemp

编辑后端服务文件

vim /usr/share/perl5/PVE/API2/Nodes.pm

搜索 pveversion 位置,加入下面 2 行代码:

$res->{cpu_temperatures} = `sensors`;  # 添加此行以获取 CPU 与主板温度
$res->{hdd_temperatures} = `hddtemp /dev/sd?`;  # 添加此行以获取硬盘温度

最终效果如下:

编辑前端 JS 文件

vim /usr/share/pve-manager/js/pvemanagerlib.js

搜索到 widget.pveNodeStatus 位置,修改 height: 300,每多一个硬盘,那么这个数据得增加 20,大家这里可以一个个尝试,我暂定修改为:400,最终效果如下:

继续搜索 pveversion ,添加 2 个item,根据自己上面显示的 CPU 核心数自行修改,我的是 8 核心,改成如下:

{
  itemId: 'cpu_temperatures',
  colspan: 2,
  printBar: false,
  title: gettext('CPU温度'),
  textField: 'cpu_temperatures',
  renderer:function(value){
  	const c0 = value.match(/Core 0.*?\+([\d\.]+)Â/)[1];
  	const c1 = value.match(/Core 1.*?\+([\d\.]+)Â/)[1];
    const c2 = value.match(/Core 2.*?\+([\d\.]+)Â/)[1];
    const c3 = value.match(/Core 3.*?\+([\d\.]+)Â/)[1];
    const c4 = value.match(/Core 4.*?\+([\d\.]+)Â/)[1];
    const c5 = value.match(/Core 5.*?\+([\d\.]+)Â/)[1];
    const c6 = value.match(/Core 6.*?\+([\d\.]+)Â/)[1];
    const c7 = value.match(/Core 7.*?\+([\d\.]+)Â/)[1];
    return `Core 0: ${c0} °C | Core 1: ${c1} °C | Core 2: ${c2} °C | Core 3: ${c3} °C | Core 4: ${c4} °C | Core 5: ${c5} °C | Core 6: ${c6} °C | Core 7: ${c7} °C`
  }
},
{
	itemId: 'hdd-temperatures',
	colspan: 2,
	printBar: false,
	title: gettext('硬盘温度'),
	textField: 'hdd_temperatures',
	renderer: function(value) {
    value = value.replace(/Â/g, '');
    return value.replace(/\n/g, '<br>')
  }
}

最终效果如下:

最后保存文件,虽然代码看上去缩进不太对啊,还好我不是强迫症,引用罗老师那句话:又不是不能用!

重启面板服务

systemctl restart pveproxy

执行完成后,浏览器强制刷新缓存一下就可以了。

最终效果如下:

细心的小伙伴发现貌似还是少了 NVME 硬盘温度,可以不愧是你,其实之前通过 sensors 命令已经可以看到 NVME 硬盘温度了,那么如何让 NVME 硬盘温度在网页上显示呢?其实原理还是差不多的,不清楚大家为啥没研究这个,国光我也不想折腾了,前端水平本身就不太行,而且我也不是强迫症,就酱了,拜拜。

最终的成品

实际上 PVE 搞起来的话,只要键鼠、显示器足够,同时运行 Linux、macOS、Windows 是非常容易的事情,但是有 macOS 了谁还要 Linux?(拉仇恨),所以下面就演示一下 Windows 10 和 macOS 同时工作的最终形态:

支持一下

本文可能实际上也没有啥技术含量,但是写起来还是比较浪费时间的,在这个喧嚣浮躁的时代,个人博客越来越没有人看了,写博客感觉一直是用爱发电的状态。如果你恰巧财力雄厚,感觉本文对你有所帮助的话,可以考虑打赏一下本文,用以维持高昂的服务器运营费用(域名费用、服务器费用、CDN 费用等)

微信
支付宝

没想到文章加入打赏列表没几天 就有热心网友打赏了 于是国光我用 Bootstrap 重写了一个页面用以感谢支持我的朋友,详情请看 打赏列表 | 国光