21

国光的 PVE 生产环境配置优化记录

 2 years ago
source link: https://www.sqlsec.com/2022/04/pve.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

PVE 简介

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

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

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

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

16489965989433.jpg

另一个比较巧的是 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 版本了。

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

16490054539830.png

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

1649039858812.jpg

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

1649040030702.png

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

16490401506464.jpg

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

16490402651470.jpg

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

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

164904060018.jpg

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

16490407496937.jpg

至此 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 编译即可:

shell
# 拉取项目
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 个镜像,分别是:

1649044126601.png

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

编辑 PVE 配置

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

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

修改完成重启 PVE:

16490459584702.png

虚拟机的创建

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

1649044491416.png

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

164904456429.png

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

16490447031199.png

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

16490449044105.png

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

16490452058418.png

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

1649045438699.png

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

16490455095979.png

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

16490456801669.png

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

虚拟机的配置

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

shell
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」,最终的配置效果如下:

16490471144740.png

初始化虚拟机

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

16490473073077.png

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

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

1649047425455.png

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

16490475281524.png

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

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

16490489885569.jpg

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

PVE 黑苹果(中)

设置开机自启

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

16490491212967.png

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

移除安装镜像

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

16490496077549.png

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

16490496735714.png

移除引导镜像

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

164904456429.png

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

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

16490499084849.jpg

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

16490500648122.png

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

16490501876451.jpg

有黑苹果基础的同学还可以直接优化 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 端口:

16490510777929.png

开启 IOMMU

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

shell
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

shell
update-grub
16490522406533.png

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

16490523743613.png

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

关掉 VMware 兼容显卡

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

1649054605822.png

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

直通 RX 6600XT

添加防黑屏参数

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

1649052923234.png

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

添加 RX 6600XT

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

16490547642030.png

然后勾选全部选项:

16490549777838.png

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

16490556058271.jpg

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

16490628746062.jpg

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

直通 RX 470

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

16490560316943.png

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

16490630189413.jpg

直通 UHD 核显

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

添加 VFIO 模块

PVE shell 环境下操作:

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

屏蔽核显驱动

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

shell
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

然后更新内核重启机器:

shell
update-initramfs -u
reboot

检查 VFIO 模块

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

shell
lsmod | grep vfio
16490795705391.png

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

查找核显设备 ID

shell
lspci -nn | grep Intel
16490803139637.png

从上图可以查询到:

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

编辑 vfio.conf

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

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

添加 PCI 设备

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

16490641157873.png

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

16490887957536.png

EFI 配置优化

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

16490630674421.jpg

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

16490824879988.jpg

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

16490891337485.jpg

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

16490889272881.jpg

直通博通免驱网卡

直通 WiFi

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

16490647508912.png

也给他添加到虚拟机中:

16490648158612.png

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

16490650432239.png

记得取消 USB3 勾选:

16490650713078.png

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

16490684701649.jpg

自定义内存

默认的内存

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

16490685126924.png

OC 自定义内存

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

16490686248886.jpg

自定义内存效果

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

1649068725314.jpg

仿冒 W6600X 显卡

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

16490697141835.jpg

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

<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>

最后的效果如下:

16490699491679.jpg

添加音频设备

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

1649070438189.jpg

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

16490897423948.jpg

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

16490897112836.png

最后的效果如下:

16490901173136.jpg

优化引导界面

提高显示清晰度

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

16491204725092.jpg

修改引导时间

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

16491207904618.jpg

升级 OC 并精简

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

16491209626247.jpg

给他升级一下最新的 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 系统:

16491273633899.png

PVE 黑果 EFI 分享

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

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

164912811660.jpg

PVE 黑果完美度

CPU 跑分

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

16491303531259.png

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

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

16491309292844.png

RX 6600XT 跑分

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

16491312632526.png

RX 470 跑分

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

16491322357629.png

隔空投送与接力

16491325531005.jpg

无线模式随航

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

16490889272881.jpg

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

16491329592672.jpg

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

16491330863475.jpg

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

16491332494338.jpg

PVE 黑苹果坑点

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

手贱改错 EFI

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

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

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

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

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

16490737639109.png

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

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

系统更新黑屏

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

16491232931112.png

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

Intel PG 不工作

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

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

16491284604784.jpg

Video Proc 闪退

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

16491285764518.jpg

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

16491286361013.png

温度传感器异常

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

1649128699398.jpg

核显不能仅计算

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

1649128777110.jpg

Hackintool 平台 ID

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

16491289844031.png

不可以睡眠唤醒

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

16491294014296.png

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

PVE 黑苹果总结

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

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

  • 优点

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

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

PVE Windows 10

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

virtio ISO 下载

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

1649137354586.png

所以需要我们先额外给虚拟机挂载一个专门的 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 镜像:

16491375468321.png

创建虚拟机

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

16491375924095.png

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

安装 Windows 10

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

16491376575380.png

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

16491376866631.png

我们会卡在下面这一步:

16491377572356.png

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

16491380689566.png

然后安装一下这个驱动:

1649138090659.png

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

16491381408957.png

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

16491385778164.png

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

16491399897616.png

直通独显与 USB

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

16491402006403.png

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

独显直通效果

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

1649141522744.jpg

PVE 配置优化

PVE 7.X 换源

shell
# 注释企业源
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

删除订阅弹窗

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

16491445114170.png

执行如下命令即可删除:

shell
# 修改 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 默认只可以看到下面这些基本信息,但是看不到具体的温度:

16491436723062.png

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

安装 lm-sensors

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

shell
apt install lm-sensors -y

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

16491447587200.png

安装 hddtemp

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

shell
apt install hddtemp -y

安装完成查看硬盘温度:

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

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

shell
chmod +s /usr/sbin/hddtemp

编辑后端服务文件

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

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

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

最终效果如下:

1649145382153.png

编辑前端 JS 文件

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

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

16491459412733.png

继续搜索 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>')
  }
}

最终效果如下:

16491463479013.png

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

重启面板服务

shell
systemctl restart pveproxy

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

最终效果如下:

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

最终的成品

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

16491540393898.jpg
±±±

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK