一. 前言
小型工控机-软路由配置拾遗 | Lian (kyouichirou.github.io)
虚拟机配置拾遗 | Lian (kyouichirou.github.io)
在上述文章中讨论了使用小型机的一些内容, 在用了一段时间之后, 发现小型机还是存在很多问题的:
- 性能偏弱
- 扩展性太差, 例如无法接入太多的硬盘(要增加一定的扩展的成本不菲)
作为软路由, 简单的nas...等简单任务, 小型机很适合, 功耗低, 体积小, 但是扩展性这个问题很麻烦(扩展好的现成设备, 价格都不便宜, 而且性能偏弱), 几经折腾还是将目光转会普通的pc上.
既然现成的没有, 那么改造现有设备, 手上的老古董 华硕PRIME B250-PRO
, 老古董的好处就在于扩展性非常好, 而且各个插槽之间的位置也相对合理, 不会用一个插槽, 其他被盖的奇葩情况..
2 * PCIE x1
2 * PCI
2 * PCIE x16
6 * sata
2 * m2
在这个基础上增加了一块pcie x1
转 4 * 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
需要:
- 需要直通的硬件支持直通, 如最关键的网卡, 关于英特尔® 以太网服务器适配器中 SR-IOV 的常见问题解答
- 需要主板支持直通
- 必须需要
windows server 2016
以上的服务器版本的系统支持
三者必须同时满足才能实现硬件的直通.
服务器版本的hyperv
在设置网络的时候就可以看到比专业版的hyperv
多了一个sr-iov
的选项.
(专业版, 是看不到这个项的)
运行时, 假如成功开启sr-iov
, 将在网络中看到.
常用的powershell
命令用以实现硬件的直通.
(设备的路径)
$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
可以通过更换部分系统识别文件来开启硬件直通相关的功能.
win10
对应的服务器版本是 windows server 2019
.
下载镜像文件, 找到上述路径, 存在有多个版本(上图中文件中存在4个版本系统的文件)系统的文件信息, 可以逐个打开文件夹, 可以看到系统的版本信息.
把 wim 镜像里面 Datacenter 版本的
Windows\Branding
和Windows\System32\spp\tokens\skus
两个文件夹提取出
将文件复制出来, 由于更改上述两个文件需要TrustedInstaller
权限, 所以在进入PE
系统将文件替换即可.
替换之后, 重启系统, 一些服务器上才具有的功能会被打开. 同时专业版的一些功能会被隐藏, 如系统休眠将被移除, 无法通过开关选项进入休眠.
PsTools - Sysinternals | Microsoft Learn, 微软提供了独立的命令行工具可以实现相关功能.
psshutdown.exe -h -t 0 -accepteula
不是很建议安装服务器版本的系统作为常用的系统, 由于服务器版本的系统的一个基础功能就是实现系统持续高强度运行, 可能会对家用的硬件带来较大的压力.
三. 网络设置
需要注意不同版本windows
的hyperv
在网络设置上存在不少的差异.
win11默认的网卡, 是看不到default switch
虚拟机网卡的.
win11
专业版, 添加wifi
网卡到外部网络时, 会出现自动生成一个桥接网卡.
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)
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)
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
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 创建网卡
在vsm
中添加物理网卡进来.
将两个物理网卡分别设置为
- wan, 接入光猫
- lan, 接入路由器作为无线, 和exsi中一样, 只作为中继.
同时创建, 一个ilan
内部网卡, 用于内部主机连接外部网络和其他虚拟机使用这个网卡连接外部网络.
假如使用的是服务器版本的hyperv会多一个sr-iov
选项.
不要使用default switch
这个默认网卡作为内部网络连接, 新建一个内部网卡作为内部主机和虚拟机以及虚拟机之间的通信.
这个网卡每次重启主机系统后会自动重新分配一个的保留地址.
这里碰到一个很诡异的问题, 我刚安装好tiny10
系统(使用默认网卡), 当时第一次进入系统, 分配的地址很诡异, 不是172开头的, 而是被分配了192.168开头的本地地址, 虚拟机和主机之间可以ping通, 但是重启虚拟机后, 再没有出现分配192.168的地址的情况.
修改注册表也没用, 如何在不使用 DHCP 服务器的情况下使用自动 TCP/IP 寻址 | Microsoft Learn.
3.3 istoreos
其他的安装没什么好说的, istoreos
不提供镜像文件, 需要使用starwindconverter
将压缩文件转为vhdx
文件(直接转vhdx
就好, vhd
是旧版本的文件), 磁盘设置为按需增长(growable image).
具体见: Windows11 Hyper-V OpenWrt 配置指南 - 少数派
需要注意, hyperv
的安全启动三个引导项均无法正常引导istoreos
启动, 这个和安装Ubuntu server
不同(ubuntu可以通过安全引导正常启动), 虽然都是Linux
.
将在vsm
中设置好的网卡, 通过add hardware
添加设备.
默认状态, win10
的hyperv
不会自动勾选mac地址欺骗
, win11的会自动勾选, 这个选项是解决虚拟机/主机之间访问可能存在冲突导致无法相互访问的问题.
将转换好的磁盘挂载上去.
分配一个cpu, 内存的需要很小, 1G就够.
采用动态分配, 这样系统可以更好的调节内存分配.
设置虚拟机随主机开机启动, 不需要主机登陆进账户, 虚拟机就可以正常启动.
很多时候, 网卡不会一一对应上, 可以根据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
.
- 这是默认网卡, 这里暂不使用.
- 内部网卡, 主机和其他虚拟机连接外部网络, 均使用这个网卡.
- 对应的是"物理网卡"中的lan口(当然也可以当主机和虚拟机的网卡用), 这实际就是一个外部的虚拟网卡, 为了方便区分, 这里专门用于连接外部的无线路由.
- 对应的是"物理网卡"中的wan口
不建议开启自动快照功能, 这个功能可能会导致每次开启虚拟机都会提示是否要回滚虚拟机.
3.4 smb共享问题
在win10 hyperv
虚拟机怎么设置都无法访问主机的smb分享, 但是主机可以正常访问虚拟机的smb分享.
win11, 将wifi网卡添加到虚拟机中设置为外部连接, 虚拟机使用这个网卡, 主机和虚拟机处于同一IP段下, 虚拟机时可以正常访问主机的smb分享的.
四. 其他
4.1 自动(定时)关机
需要设置不管用户登陆与否都执行, 这个选项可以保证设备处于锁屏的状态, 任务也可以正常执行.
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批处理中.
添加到右键菜单, 方便随意切换功耗模式.
由于长期不关机, 需要机器在特定的时间段闲置后自动进入低功耗模式.
在9点半后, 机器限制超过5分钟, 自动执行power saving脚本.
五. 小结
由于并不需要实现太过复杂的功能, 主要是为了方便管理网络和局域网内各个设备之间相对简单的文件分享和设备间的相互访问, 直接使用普通的pc设备能够获得更好的使用体验, 相比于小型机.
更为重要的是, 很多组件的价格更为便宜, 由于有大量服务器的拆机甚至全新的设备流入市场, 如上面提到的华为sp210网卡, 几十块钱就可以买到多网口的全新网卡.