Hyper虚拟机折腾记录

一. 前言

小型工控机-软路由配置拾遗 | Lian (kyouichirou.github.io)

虚拟机配置拾遗 | Lian (kyouichirou.github.io)

在上述文章中讨论了使用小型机的一些内容, 在用了一段时间之后, 发现小型机还是存在很多问题的:

  • 性能偏弱
  • 扩展性太差, 例如无法接入太多的硬盘(要增加一定的扩展的成本不菲)

作为软路由, 简单的nas...等简单任务, 小型机很适合, 功耗低, 体积小, 但是扩展性这个问题很麻烦(扩展好的现成设备, 价格都不便宜, 而且性能偏弱), 几经折腾还是将目光转会普通的pc上.

既然现成的没有, 那么改造现有设备, 手上的老古董 华硕PRIME B250-PRO, 老古董的好处就在于扩展性非常好, 而且各个插槽之间的位置也相对合理, 不会用一个插槽, 其他被盖的奇葩情况..

img

2 * PCIE x1

2 * PCI

2 * PCIE x16

6 * sata

2 * m2

在这个基础上增加了一块pcie x14 * sata转接卡,再加上一块pcie x4 intel I350千兆双网口网卡(具体型号为: 华为sp210, exsi8.x支持直通), 经过扩后, 拥有3个千兆网口, 10个sata接口, 可以很好满足需求.

在挑选网卡的时候应该注意其特性, 例如exsi高版本的硬件直通支持 hyperv硬件直通支持等.

二. 硬件直通

很多人误将exsi, pve上的概念移植了过来, 很多博客和文章关于硬件直通的介绍是错误, hyperv的硬件直通还是比较麻烦的.

使用离散设备分配规划设备部署 | Microsoft Learn

单根 I/O 虚拟化 (SR-IOV) 概述 - Windows drivers | Microsoft Learn

需要:

三者必须同时满足才能实现硬件的直通.

服务器版本的hyperv在设置网络的时候就可以看到比专业版的hyperv多了一个sr-iov的选项.

img

(专业版, 是看不到这个项的)

运行时, 假如成功开启sr-iov, 将在网络中看到.

常用的powershell命令用以实现硬件的直通.

img

(设备的路径)

$locationpath = 'PCIROOT(0)#PCI(0100)#PCI(0000)'
$VmName = 'iStoreOS'
# 卸载硬件
Dismount-VMHostAssignableDevice -LocationPath $locationpath -Force
# 直通设备的虚拟机不能被暂停或热迁移, 所以自动关机动作必须为 ACPI shutdown 或者硬关机
Set-VM -Name $VmName -AutomaticStopAction TurnOff
# 将设备添加给指定虚拟机
Add-VMAssignableDevice -VMName $VmName -LocationPath $locationpath
# 查看虚拟机直通设备情况
Get-VMAssignableDevice -VMName

除了命令界面, 也有大神开发的图形界面的操作的方式, Release First Release - chanket/DDA - GitHub

硬件直通, 如网卡, 可以解决高速数据传输时占用CPU过高的问题, 但并不是说一定要硬件直通才能实现相关功能.

2.1 win10专业版转服务器版

由于安装的win10专业版, 并不想为了测试这个硬件直通重新安装服务器版本, 把 Windows 11/10 不完全转换为 Windows Server 2022 | 蚊BloG

可以通过更换部分系统识别文件来开启硬件直通相关的功能.

img

win10 对应的服务器版本是 windows server 2019.

下载镜像文件, 找到上述路径, 存在有多个版本(上图中文件中存在4个版本系统的文件)系统的文件信息, 可以逐个打开文件夹, 可以看到系统的版本信息.

把 wim 镜像里面 Datacenter 版本的 Windows\BrandingWindows\System32\spp\tokens\skus 两个文件夹提取出

将文件复制出来, 由于更改上述两个文件需要TrustedInstaller权限, 所以在进入PE系统将文件替换即可.

替换之后, 重启系统, 一些服务器上才具有的功能会被打开. 同时专业版的一些功能会被隐藏, 如系统休眠将被移除, 无法通过开关选项进入休眠.

PsTools - Sysinternals | Microsoft Learn, 微软提供了独立的命令行工具可以实现相关功能.

psshutdown.exe -h -t 0 -accepteula

不是很建议安装服务器版本的系统作为常用的系统, 由于服务器版本的系统的一个基础功能就是实现系统持续高强度运行, 可能会对家用的硬件带来较大的压力.

三. 网络设置

需要注意不同版本windowshyperv在网络设置上存在不少的差异.

img

win11默认的网卡, 是看不到default switch虚拟机网卡的.

img

win11专业版, 添加wifi网卡到外部网络时, 会出现自动生成一个桥接网卡.

img

win10, 则完全是另一番景象.

3.1 HyperV网卡类型

3.1.1 外部网卡

简单来说, 除了虚拟机之间的通信还有外部设备的通信.

External

External virtual networks are used where you want to allow communications between

  • Virtual machine to virtual machine on the same physical server
  • 同意设备虚拟机之间的通信
  • Virtual machine to parent partition (and visa-versa)
  • 虚拟机和parent partition 的通信
  • Virtual machine to externally located servers (and visa-versa)
  • 虚拟机和外部服务器之间的通信
  • (Optional) Parent partition to externally located servers (and visa-versa)
external

3.1.2 内部网络

内部通信, 包括主机.

Internal

Internal virtual networks are used where you want to allow communications between

  • Virtual machine to virtual machine on the same physical server
  • Virtual machine to parent partition (and visa-versa)
internal

3.1.3 私有网络

简单来说就是虚拟机之间的通信, 不和外部通信, 包括主机.

Private

Private virtual networks are used where you want to allow communications between

  • Virtual machine to virtual machine on the same physical server
private

Hyper-V: What are the uses for different types of virtual networks? | Microsoft Learn

windows 10 - Can't connect to host drive from Hyper-V VM when using external switch - Super User

3.2 创建网卡

img

vsm中添加物理网卡进来.

将两个物理网卡分别设置为

  • wan, 接入光猫
  • lan, 接入路由器作为无线, 和exsi中一样, 只作为中继.

同时创建, 一个ilan内部网卡, 用于内部主机连接外部网络和其他虚拟机使用这个网卡连接外部网络.

假如使用的是服务器版本的hyperv会多一个sr-iov选项.

不要使用default switch这个默认网卡作为内部网络连接, 新建一个内部网卡作为内部主机和虚拟机以及虚拟机之间的通信.

img

这个网卡每次重启主机系统后会自动重新分配一个的保留地址.

这里碰到一个很诡异的问题, 我刚安装好tiny10系统(使用默认网卡), 当时第一次进入系统, 分配的地址很诡异, 不是172开头的, 而是被分配了192.168开头的本地地址, 虚拟机和主机之间可以ping通, 但是重启虚拟机后, 再没有出现分配192.168的地址的情况.

img

修改注册表也没用, 如何在不使用 DHCP 服务器的情况下使用自动 TCP/IP 寻址 | Microsoft Learn.

3.3 istoreos

其他的安装没什么好说的, istoreos不提供镜像文件, 需要使用starwindconverter将压缩文件转为vhdx文件(直接转vhdx就好, vhd是旧版本的文件), 磁盘设置为按需增长(growable image).

具体见: Windows11 Hyper-V OpenWrt 配置指南 - 少数派

img

需要注意, hyperv的安全启动三个引导项均无法正常引导istoreos启动, 这个和安装Ubuntu server不同(ubuntu可以通过安全引导正常启动), 虽然都是Linux.

将在vsm中设置好的网卡, 通过add hardware添加设备.

img

默认状态, win10hyperv不会自动勾选mac地址欺骗, win11的会自动勾选, 这个选项是解决虚拟机/主机之间访问可能存在冲突导致无法相互访问的问题.

img

将转换好的磁盘挂载上去.

分配一个cpu, 内存的需要很小, 1G就够.

img

采用动态分配, 这样系统可以更好的调节内存分配.

img

设置虚拟机随主机开机启动, 不需要主机登陆进账户, 虚拟机就可以正常启动.

img

很多时候, 网卡不会一一对应上, 可以根据mac地址信息调整即可.

root@iStoreOS:~# cat /etc/config/network

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd73:48145:2406::/48'

config interface 'wan'
        option device 'eth0'
        option proto 'pppoe'
        option username '....'
        option password '.....'
        option ipv6 'auto'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'eth2'
        list ports 'eth1'

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option ipaddr '192.168.2.10'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option defaultroute '0'

有时istoreos没有正常识别到网卡, 可以手动添加上述的参数. 理论上, 安装好'istoreos, 上述配置信息通常会自动生成好.

如果不知道那个网卡是主机和虚拟机连接的, 可以将所有网卡先添加到config device, 确保主机可以通过浏览器进入istoreos.

img

  1. 这是默认网卡, 这里暂不使用.
  2. 内部网卡, 主机和其他虚拟机连接外部网络, 均使用这个网卡.
  3. 对应的是"物理网卡"中的lan口(当然也可以当主机和虚拟机的网卡用), 这实际就是一个外部的虚拟网卡, 为了方便区分, 这里专门用于连接外部的无线路由.
  4. 对应的是"物理网卡"中的wan口

不建议开启自动快照功能, 这个功能可能会导致每次开启虚拟机都会提示是否要回滚虚拟机.

img

3.4 smb共享问题

img

img

win10 hyperv虚拟机怎么设置都无法访问主机的smb分享, 但是主机可以正常访问虚拟机的smb分享.

img

win11, 将wifi网卡添加到虚拟机中设置为外部连接, 虚拟机使用这个网卡, 主机和虚拟机处于同一IP段下, 虚拟机时可以正常访问主机的smb分享的.

四. 其他

4.1 自动(定时)关机

shutdown | Microsoft Learn

img

需要设置不管用户登陆与否都执行, 这个选项可以保证设备处于锁屏的状态, 任务也可以正常执行.

img

img

img

4.2 电源设置

为了降低机器的功耗, 在不使用机器的时候进入低功耗模式.

Powercfg 命令行选项 | Microsoft Learn

(base) PS C:\Users\Lian> powercfg /list

Existing Power Schemes (* Active)
-----------------------------------
Power Scheme GUID: 381b4222-f694-41f0-9685-ff5bb260df2e  (Balanced) *
Power Scheme GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c  (High performance)
Power Scheme GUID: a1841308-3541-4fab-bc81-f71556f20b4a  (Power saver)

将设置写到bat批处理中.

img

添加到右键菜单, 方便随意切换功耗模式.

img

由于长期不关机, 需要机器在特定的时间段闲置后自动进入低功耗模式.

img

img

在9点半后, 机器限制超过5分钟, 自动执行power saving脚本.

五. 小结

由于并不需要实现太过复杂的功能, 主要是为了方便管理网络和局域网内各个设备之间相对简单的文件分享和设备间的相互访问, 直接使用普通的pc设备能够获得更好的使用体验, 相比于小型机.

更为重要的是, 很多组件的价格更为便宜, 由于有大量服务器的拆机甚至全新的设备流入市场, 如上面提到的华为sp210网卡, 几十块钱就可以买到多网口的全新网卡.