关于Fusion on Apple Silicon的谨慎猜测

苹果发布M1芯片的新Mac设备以后,许多用户想要PD或者Fusion运行在Apple Silicon上,并虚拟x86 windows(准确说是模拟)。

从PD的博客看到https://www.parallels.com/blogs/parallels-desktop-apple-silicon-mac/,模拟x86 windows并未在计划中。其中提到了在虚拟的windows on Arm中利用微软的支持来模拟运行x86 windows程序 https://blogs.windows.com/windowsexperience/2020/09/30/now-more-essential-than-ever-the-role-of-the-windows-pc-has-changed/

所以模拟x86 windows OS并未在PD的计划中,同理去模拟其它AMD64 Linux或者x86 macOS也不在计划。

而Fusion并未在博客或者官网中提到类似计划,只在官方twitter和论坛中有所提及会去支持Apple Silicon。

对此,我谨慎做些猜测:

  1. Fusion on Apple Silicon首先会以universal app形式支持Apple Silicon,并首先可以虚拟一些arm64的 Linux虚拟机,正如现在ESXi on Arm所支持的。这个应该不会很久。
  2. 虚拟windows on Arm也会类似PD一样,在微软提供类似授权和模拟运行x86 windows程序后去提供支持。
  3. 至于模拟x86 windows或者其他x86/AMD64系统,我觉得短期不可能实现,这个工作量不是一般的大。如果2做的好话,模拟x86 windows这个意义也没那么重要了。

欢迎PD和Fusion来打脸。

监控安装ESXi on Arm的树莓派4b的CPU温度

在传统的x86服务器上,ESXi可以监控该服务器的cpu温度,如图:

cpu温度显示

我们平时玩树莓派时,是可以获取到cpu温度,并且可以通过程序来联动启停风扇的。(网络上教程很多)

当ESXi on Arm安装在树莓派4b以后,默认肯定是获取不到这个温度的。

前几天一位网友在https://github.com/thebel1/thpimon中提供了thpimon-0.1.0-1OEM.701.1.0.40650718.aarch64.vib 这一驱动,在ESXi on Arm上安装这一vib驱动以后,就可以通过python脚本来获取相应数据了。具体步骤在上述项目的说明中已经包含了。这里就不演示步骤了。看下python脚本的显示结果:

运行结果

这里虽然解决了数据的采集问题,但是还不能形成时间序列数据,那么就需要接着改造python脚本来实现,恰好有另一个https://github.com/fgrehl/esxi-raspi,在前者基础上实现了时间序列数据的生成。

设定interval抓取:

运行结果:

运行结果

仅仅是在Console里打印时间序列数据,显然达不到“监控”级别,于是又加入了将数据发送至Graphite主机的CARBON端口,这样就可以在Graphite前端来图形化显示时间序列数据了。

设定发送主机:

参数设置

因为涉及到从ESXi向外(CARBON)发送数据,可以尝试关闭防火墙:esxcli network firewall set –enabled false,在重要环境中,请单独为此行为设定防火墙规则,不要整体关掉。

看下运行时Console的显示:

发送数据
可以看到格式为指标,数据,时间

Graphite主机的搭建不详细说明了,可以参照https://graphite.readthedocs.io/en/latest/install.html通过Docker安装并运行,我就是在一台虚拟机Photon OS中运行的此Docker,这里顺便安利下Photon OS,很适合玩Docker。

访问Graphite webui:

树形结构

可以从树形结构的Metrics下找到我们发送过来的数据。

双击cputemp即可在右侧显示图形,并可自定义图形的一些属性。

除此之外,我们还可以在Dashboard中添加该指标,如果有多台机器或者多项指标,就可以定义出我们自己想要的Dashboard:

保存后,该访问地址http://192.168.1.235/dashboard/ESXi-pi2%20cputemp%20Dashboard可以之后随时访问查看。

从图中看,这段时间该ESXi on Arm所运行的树莓派4b的cpu温度基本在46-48.5度之间。

vSphere虚拟网络02 – 虚拟交换机

在之前的 vSphere虚拟网络01中,提到了vSphere中的两种虚拟交换机类型:标准交换机和分布式交换机。这篇里就虚拟交换机的知识进行一些深入的了解。

首先,虚拟交换机就是从软件层面来模拟一个Layer2的交换机。在物理网络中,交换机在Layer2利用它维护的CAM表来做点到点的数据包传输。在虚拟网络中,虚拟交换机检测到连接到它的虚拟端口的虚拟机,然后用MAC来转发流量到正确的目的地(点到点)。虚拟交换机基本上是用来在虚拟网络和物理网络之间建立连接的。

这里可以再看一下上一篇中用到的示意图

vSphere虚拟网络示意图

在ESXi安装之后,默认的配置有一个标准虚拟交换机,一个叫VM Network的端口组和一个作为ESXi管理口的叫vmk0的VMkernel port。这个默认配置可以用来实现基本的虚拟网络和物理网络的连通,如果你有更复杂的虚拟网络需求,我们就要自己来创建额外的VMkernel port,端口组或者虚拟交换机。

那么我们来查看下vSphere7版本的虚拟网络的一些限制https://configmax.vmware.com/guest?vmwareproduct=vSphere&release=vSphere%207.0&categories=2-0

从中我们能看到,ESXi主机支持最多4096个端口,其中8个作为预留口,但是最多活动端口是1024,其中8个作为预留口,那么最多可用并且活动端口就是1016。

关于隔离

在之前的vSphere虚拟网络01中提到了虚拟网络中的隔离,可以通过一个虚拟交换机的不同端口组设置不同VLAN ID来隔离,如下图

单虚拟交换机 – VLAN

那么也可以通过多个虚拟交换机来直接做“物理隔离”,如下图

多虚拟交换机 – 无VLAN

两种方式都可以做到隔离,但有什么不同呢?

首先,虚拟交换机是通过软件来模拟物理交换机的行为。那么在ESXi上创建越多的虚拟交换机就应该需要越多的资源来做交换功能。

其次,如果我们想做流量隔离,在单虚拟交换机上就需要配置VLAN,或者不用VLAN,用多虚拟交换机来“物理隔离”。因为在很多网络中,可能物理网络中也没有配置VLAN来做隔离,比如部门1连接物理交换机01,部门2连接物理交换机02,这样的物理隔离,那么我们就可以把部门1要用的虚拟资源连在虚拟交换机01上并且通过上行链路->物理网卡连接到物理交换机01上,然后部门2要用的虚拟资源连在虚拟交换机02上并且通过上行链路->物理网卡连接到物理交换机02上,这样部门1和部门2所需要的虚拟资源就“物理隔离”了,同时,Management和vMotion连接不同的物理交换机也可以实现管理和迁移的“物理隔离”。从整体上来说,我们也做到了业务部门的流量(部门1和部门2)和IT管理的流量(Management和vMotion)隔离。

最后我们看到图中每个虚拟交换机我们都设置了2个上行链路(冗余),这样单虚拟交换机需要2个物理网卡,4个虚拟交换机就需要8个物理网卡,这时候我们就要考量这台服务器是否有能力通过PCI插槽来接入这么多网卡了,因为PCI插槽还可能有连接阵列卡等设备的需求。

Tips:

不要因为你能创建多个虚拟交换机就去创建,要根据实际需求和硬件设备来具体分析,建议通过尽量少的虚拟交换机来实现需求。

标准交换机

标准交换机是通过ESXi主机来创建和管理的,这就意味着当你有多台ESXi主机时,你就要分别去每一台ESXi上创建标准交换机里的端口组等设置,可能这个工作量还不算什么,但是当一年之后你要去修改端口组,或者扩展端口组呢?(这种需求应该可以叫做Day2 operation吧)。

因为标准交换机不能集中管理,也许我们可以通过一些自动化脚本来实现,但自动化脚本也要适应上面提到的Day2 operation, 所以管理员的开销还是挺大的。

通过创建或者编辑标准交换机的操作界面,我们大致能了解到一些它的功能:

Layer2交换

IPv6

VLAN

网卡绑定

出口流量整形

安全策略

绑定和故障切换策略

总的来说,标准交换机可以解决大部分小型部署中的虚拟网络需求,我们应该避免在中型或大型部署中使用标准交换机,或者可以保留的使用有限的功能。更多的虚拟网络需求通过分布式交换机或者NSX来实现。

分布式交换机

分布式交换机在标准交换机的基础上,增加了一些额外的功能,而且提供了集中管理的接口。

比如:

入口流量整形

网卡绑定和故障切换策略中基于负载的绑定

端口洪泛控制

私有VLANs

以端口为单位的策略设置

端口镜像

NetFlow监控

端口状态监控

分布式交换机示意图

如图是个基于2台ESXi主机设置的分布式交换机示意图

所谓的集中管理,分布式交换机不是在ESXi主机上创建的,而是vCenter。在vCenter中在数据中心的Actions菜单中可以选择分布式交换机,然后创建或者导入。分布式交换机上的流量并不会通过vCenter来转发,来看一个分布式交换机的架构图。

分布式交换机架构图

从图中我们可以看到,vCenter上是分布式交换机的一个模板,设定了端口组,上行链路的个数。需要把ESXi主机加入分布式交换机,这时候就把交换机的模板推送到了加入的ESXi主机上,并且可以指定ESXi上的哪个物理网卡为分布式交换机的上行链路使用。ESXi主机上有一个Host proxy switch,它用来接收vCenter推送的模板,这样交换功能其实还是在ESXi主机上实现的。Day2 operation需要的设置可以在vCenter的模板上修改,就会推送到各个连接该分布式交换机的ESXi主机上,这就是集中管理。

这种架构,在vCenter上的分布式交换机实例被叫做控制平面/Control plane,交换机的管理是在这里实现的。在ESXi上的Host proxy switch被叫做数据平面/Data plane,交换机的数据交换是在这里发生的。

最后,来看一个多台ESXi所连接的分布式交换机的拓扑图吧。

分布式交换机拓扑图

左侧为端口组,我把vCenter自己单独放了一个端口组,把VMkernel放在一个端口组,剩余VM放在一个端口组。因为没有设置VLAN,实际上这几个端口组是可以互通的。

右侧为上行链路,这里我每个ESXi主机只设置了一个上行链路,对应一个ESXi上的vmnic。

如果win10这台虚拟机在esxi01这台主机上,u2004这台虚拟机在esxi02这台主机上,两台同在一个端口组的虚拟机,从拓扑图看来,直接在虚拟交换机就能交换数据,实际上,还是要通过各自的上行链路走到物理交换机才能交换数据的。

vSphere虚拟网络01 – 入门

本篇为vSphere虚拟网络的一些基本理解,属于入门知识,先看下面的图来理解虚拟网络是如何构成的。

以单ESXi主机为例

vSphere虚拟网络示意图

从最上面虚拟机开始,上面配有虚拟网卡/vNIC(或者叫虚拟网络适配器),适配器的类型参考官方文档,以vSphere7.0为例https://docs.vmware.com/cn/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-AF9E24A8-2CFA-447B-AC83-35D563119667.html

最近几个版本的vSphere都限定了一台虚拟机最多可以配置10个虚拟网络适配器。

再看图中间的虚拟交换机,在vSphere的网络配置里,虚拟交换机分为标准交换机(Virtual Standard Switch)和分布式交换机(Virtual Distributed Switch),如下图。这里先以标准交换机为例,分布式交换机留到后面章节再展开讲。

虚拟交换机

在一个标准虚拟交换机里,我们可以设置三类连接类型

虚拟交换机连接类型

1. VMkernel网络适配器,这种连接类型是ESXi用来主机管理(通常所说的ESXi管理口),vMotion,iSCSI,NFS等服务的流量使用的连接类型,我们可以把不同的服务分到不同的VMkernel适配器上,也可以分配到同一个VMkernel适配器上,一般简写成vmk0,vmk1……VMkernel适配器需要分配IP地址,以vmk0作为主机管理端口为例,如它设置了IP地址192.168.1.50,我们就可以在局域网内通过192.168.1.50来管理这台ESXi主机。

2. 虚拟机端口组/PortGroup,端口组可以理解成虚拟机和虚拟交换机之间连接的一种模板,一般说来,虚拟机是将虚拟网卡连接到虚拟交换机上的端口组/PortGroup的一个端口上(想像成一台电脑的网线从物理网卡连接到了物理交换机上)来做网络交换(虚拟机使用直通的网络设备除外)。在创建端口组时还可以设置VLAN ID,这样同一个虚拟交换机下面还可以通过不同端口组来做VLAN隔离。

端口组VLAN ID

3.物理网络适配器,这是虚拟交换机和物理交换机连接的物理载体,桥梁。从示意图中,我们看到虚拟交换机中有一个端口(可以有多个)叫做上行链路/Uplink port,上行链路和物理网卡连接在一起,这个物理网卡在vSphere里可以标记为VMNIC, PNIC,UPLink,物理网卡作为连通虚拟网络和物理网络的桥梁,通常来说它本身不和IP地址绑定,所以当我们给ESXi主机分配IP时,并不是直接分配给了它的物理网卡,而是分配给了VMkernel适配器。

现在再回到开头的示意图,虚拟机虚拟网卡->虚拟交换机端口组->虚拟交换机内部交换->虚拟交换机上行链路->物理网卡->物理交换机,完成了虚拟机和物理网络的连通。

Tips:

如果物理交换机是VLAN交换机,我们还可以把ESXi物理网卡连接的物理交换机端口设置成Trunk口,tag上物理网络中的VLAN ID,在虚拟交换机的端口组里做VLAN ID的设置之后,就把虚拟机连接到了物理网络的VLAN里。

这就是vSphere虚拟网络的一些基本知识和示意图理解,后面我会深入的就其它虚拟网络内容进行展开。

ESXi忘记root密码后重置

声明:本文参考https://www.top-password.com/knowledge/reset-esxi-root-password.html中提到的挂载Ubuntu Live CD来清除ESXi原有密码,使ESXi再启动时可以通过空密码登陆后台,然后重新设置密码。如果英文阅读没问题的可以直接去看原文。

官方KB中虽然说ESXi的root密码只能通过重新安装来重置,但还是有网友成功通过上面提到的办法来重置。

由于物理机操作和拍照比较麻烦,我用ESXi中嵌套安装的ESXi挂载Live CD做演示。

以最新的ESXi7.0 Update1和Ubuntu 20.04 Live CD为例。

假设现在我们忘记root密码,无法登陆后台或者ESXi网页端了。

忘记root密码

关闭ESXi主机,插上Ubuntu Live CD启动盘(可以是光驱,U盘等),我这里是嵌套ESXi,直接挂载ISO。

为ESXi挂载Ubuntu Live CD

开机进入BIOS设置,确保LIVE CD启动在ESXi(硬盘)之前。

ESXi主机BIOS启动顺序

选择Try Ubuntu。

Try Ubuntu

系统加载完毕后,点选Show Applications(左下角)。

Show Applications

搜索并运行gparted。

运行GParted

在ESXi7中我们要找的分区应该是这个BOOTBANK1的/dev/sda5。

找到BOOTBANK1

关闭GParted并运行Terminal。

运行Terminal

运行下面这几行命令,将该分区挂载到/mnt。

sudo -s

mount /dev/sda5 /mnt

cd /mnt

ls

找到我们需要的state.tgz压缩包。

找到state.tgz

然后将压缩包复制到临时目录/tmp,解压,查找local.tgz压缩包。

cp state.tgz /tmp

cd  /tmp

tar xzf  state.tgz

ls

找到了local.tgz压缩包。

找到local.tgz

解压local.tgz进入etc目录,找到shadow文件。

tar xzf local.tgz

ls

cd etc

ls

找到shadow

使用vi或者nano编辑shadow文件,以nano为例。

nano shadow

nano编辑shadow

删除root后面第一个冒号和第二个冒号之间的内容(保留2个冒号)。

删除两个冒号之间的内容

在nano编辑器中,Ctrl+X退出,提示是否保存修改时Y。

保存修改

然后回车(使用当前文件名)。

不修改文件名直接保存

接下来我们退回到etc上级目录,将修改的文件反向的打包压缩并覆盖/mnt/挂载点里的内容,然后取消挂载。

cd ..

tar czf  local.tgz  etc

tar czf  state.tgz  local.tgz

cp  state.tgz  /mnt/

umount  /mnt

用修改内容后的文件替换挂载点里的源文件

这时候物理机可以关闭Ubuntu Live CD系统,并弹出光驱或者拔掉Live CD U盘,我这里在嵌套的ESXi虚拟机设置中把ISO文件停止挂载。

取消挂载Live CD

保存,开机,等待ESXi加载完成。

ESXi启动完成

按F2,使用root空密码,回车。

请使用空密码

成功,可以去设置新密码了。

可以配置新密码了

让ESXi7.0不支持的板载网卡发挥余热

今年上半年ESXi7.0发布后,大家发现螃蟹网卡和一些老旧的Intel网卡因为没有Native驱动而不被ESXi7.0支持了。

当然还可以继续使用ESXi6.7,因为里面有支持这些网卡的vmklinux驱动。

如果实在想使用7.0,有个折中的办法,接一个此驱动里提到的USB3.0网卡来做管理口(将驱动封装进7.0镜像,制作定制版启动U盘,此处步骤网上很多,就省略了)。

声明:以下纯属瞎折腾,请不要在重要环境里折腾。

下面以我的一台工控机为例,该机器使用6口Intel 82583V网卡,ESXi7.0已经不支持了。如果已经配置过USB3.0网卡,可以直接跳过从直通板载网卡部分开始看。

使用USB3.0网卡安装配置ESXi7.0

将USB3.0网卡(我的是使用AX88179芯片的某款绿联)连接工控机的USB3.0口,另一头插入网线,连接交换机或者路由器LAN口。

启动ESXi安装,小硬盘用户请记得调节autoPartitionOSDataSize=xxxx (参考如何不让ESXi7.0的虚拟闪存占掉你的小硬盘)。

安装一切顺利,直到遇到如下81%时的错误:

No vmknic
详细错误信息

从上面的错误信息来看,说的是没有成功的选取网卡作为管理口。真实原因是此过程正常是在查找vmnic#名字的网卡,我们的板载网卡在ESXi7.0中不支持,而usb网卡的名字是vusb#,所以没有匹配到。

经过测试,其实这个81%的时候ESXi已经安装好了,只是USB3.0网卡没有被成功当作管理口,还需要几步额外操作。

1. 移除安装U盘(已经不需要了)。

2. 重启。

3. 当ESXi加载完成后按F2, 使用root空密码登陆 (之前安装时虽然设置了密码,因为81%的错误,配置没有保存)。

4. 选择Network Restore Options

5. 保存退出,然后再F2进来。

6. 这时候Configure Management Network不是灰色了,可以选择了。

7. 在Network Adapters中选择vusb0,保存。

选择vusb0作为管理口

8. 这个时候稍等一下ESXi就会通过DHCP获取到IP了,如果需要设置静态IP,可以去IPv4 Configuration里设置。

9. 注意,因为USB3.0网卡的默认虚拟交换机设置会在ESXi下次重启后失效,所以要依照驱动中的Persisting USB NIC Bindings部分去设置/etc/rc.local.d/local.sh保存设置。

在/etc/rc.local.d/local.sh中添加图中部分

至此USB3.0网卡作为管理口已经设置好并且可以正常使用了,我们通过网页可以访问ESXi了。

在此基础上,创建虚拟机时就可以使用默认的vSwitch0的端口组VM Network了。

直通板载网卡

我们这里单独直通第六个口。

直通其中一个网口

创建一个虚拟机,这里以Windows10为例。网卡默认使用vSwitch0的端口组VM Network。安装成功后,确保Windows已经可以获取到局域网IP,比如192.168.1.188.

将Windows关机,添加PCI设备(直通的板载网卡第六口),预留内存。保存设置,开机。

添加PCI直通网卡

Windows网络连接中,显示有2个网卡(一个虚拟的,一个直通的82583V),两个一起选择,然后右键,选择桥接。

桥接虚拟网卡和直通网卡
查看桥接属性

这个时候,为了验证桥接的结果,用网线将工控机第六口和我的一台电脑连接,等一会后就能看到电脑的以太网连接自动获取到了局域网IP,为192.168.1.189。 这样工控机的板载网卡也被使用上了。

将直通的网口连接物理机

此时,每个直通的网口,只能被一个物理机使用,或者连接物理交换机,路由器继续扩展,而不能被ESXi的管理口或者其它虚拟机使用。

我们来进一步利用ESXi里的虚拟交换机来使用直通的网卡。

将直通的网卡桥接传回给vSwitch

添加一个标准虚拟交换机,记得把安全下面的设置从拒绝改成接受。

新建虚拟交换机

此虚拟交换机不需要上行链路。

如果想做管理口,那么去VMkernel网卡中添加一个vmk1,使用vSwitch1。

创建VMkernel
此时还获取不到IP

创建一个Bridge端口组。

Bridge端口组

查看vSwitch1的拓扑,vmk1还获取不到局域网IP。

vSwitch1拓扑

将之前的Win10虚拟机网络连接的桥接删除,关机,删除虚拟的VM Network网卡,添加一个新的虚拟网卡,使用Bridge端口组,保留直通的网卡。将直通的第六口用网线和局域网的交换机或者路由器LAN连接。开机。

修改虚拟网卡使用Bridge端口组

进入Windows网络连接,此时直通的网卡应该能够获取到局域网IP。

直通网卡的IP

将虚拟的Bridge和直通的网卡桥接。

稍等一会,去查看vSwitch1的拓扑。vmk1获取到了局域网IP:192.168.1.190

vmk1

如果想使此管理口在ESXi开机后可用,那么就要在ESXi中将此虚拟机改成随ESXi开机自动启动。

自动启动设置

接下来创建其它虚拟机,虚拟网卡使用Bridge端口组,就会通过此桥接的直通网卡获取到IP了。

其它虚拟机
vSwitch1拓扑

至此,板载的Intel 82583V也可以在ESXi7.0中做管理口(可以通过https://192.168.1.190访问ESXi网页客户端)和给虚拟机使用了。

使用Bridge端口组下的虚拟机进行局域网测速。

局域网iperf3测速

移除USB3.0网卡上的网线,单独使用直通的网卡

如果我们既使用USB3.0网卡,又使用桥接后的直通网卡做ESXi管理口,看起来是有点多余,当然我们也可以一个接WAN,一个接LAN,同时做管理口。

我们先尝试不用USB网卡来管理ESXi。

把ESXi关机,拔掉USB网卡上的网线,注意,这里只能拔掉网线,不能把USB网卡也拔掉,因为ESXi开机启动时,如果检测不到vusb0,就会报一个没有网卡的错误而不能正常完成启动,后面的win10虚拟机也没法跟着自动启动了,所以我们插着USB网卡不插网线可以让ESXi正常启动。

ESXi开机,用局域网里其它机器一直ping新的管理口192.168.1.190。因为我们上面修改过local.sh,在网口状态是down的情况下会最多重试20次,每次sleep10秒钟,再加上本身我们设置虚拟机开机自动启动还有60秒延时,导致整个过程比较长(可以酌情去修改local.sh中的重试次数和sleep时长),要好几分钟(ping icmp_seq大概有500+),耐心的一直等到ping通了,就可以通过https://192.168.1.190访问ESXi网页客户端,此时桥接的windows虚拟机已经自动启动。(请记得把Win10系统的自动休眠等电源选项关闭,防止一段时间后虚拟机休眠了,桥接就断了。)

ESXi中查看物理适配器vusb0是链路已断开的状态(没插网线)。

vusb0链路已断开

不过这里还是建议大家也发挥下USB3.0网卡的功能,给它插上网线,接WAN也好,接LAN也好。

一点不完美

不太完美的就是使用Win10做桥接会占用较多的系统资源,因为要预留内存,比如我给Win10分配了2G内存。如果把桥接的虚拟机从Windows换成Linux,分配少点资源应该也足够。我这里就不试了,想试的去研究下Linux中的bridge-utils即可。也非常简单,把虚拟的Bridge端口组网卡和直通的网卡一桥接就行了。

USB Network Native Driver for ESXi更新到支持ESXi7.0.1

USB Network Native Driver for ESXi今天更新到新版本,支持ESXi7.0.1了,我之前有ESXi7.0.0机器因为使用了USB网卡驱动一直没法升级到7.0.1。(ESXi升级补丁会报该USB网卡驱动缺少依赖,因为那个依赖从7.0.0的版本更新到7.0.1,版本就对不上了)

下面演示由vCenter管理的EXSi主机更新7.0.1(包含该USB网卡驱动)。

首先将USB网卡驱动更新下载,再将ESXi7.0.1离线包VMware-ESXi-7.0.1-16850804-depot.zip下载,然后用ESXi Customizer PS来封装镜像。具体步骤参照ESXi-Customizer-PS

封装驱动

将这个封装好的ISO上传到vCenter的Lifecycle Manager里。

在Lifecycle Manager中导入ISO

创建基准。

创建基准1

选择刚才上传好的ISO。

选择ISO

完成。

创建基准完成

然后去要升级的ESXi Host,把所有虚拟机置于挂起或关机状态。进入维护模式。

进入维护模式

在更新选项卡下方,附加基准。

附加基准

选择刚才创建的基准,附加。

选择基准

勾选该基准并修复。

使用该基准修复

接受协议和确定后,开始修复。

修复中

完成后ESXi自动重启,等待一会,vCenter显示连接上了ESXi,能看到7.0.1版本号了。

升级完成

更新说明里提到了USB NIC Bindings are now automatically persistent。

所以我们可以去ssh里把相应的之前设置的启动脚本注释掉了。

树莓派4b安装Android TV 10

TechFigure的视频

How to Install Full Android TV 10 on Raspberry Pi 4 with Hardware Acceleration! 看到树莓派4b可以安装安卓TV10系统了,就按照视频体验了下。整个过程大概需要20分钟。

以下为简单步骤:

1. 下载所需要的文件

https://konstakang.com/devices/rpi4/网站中,打开LineageOS 17.1 Android TV – KonstaKANG (Android 10)页面,下载其中的lineage-17.1-20200815-UNOFFICIAL-KonstaKANG-rpi4-atv.ziprecovery2boot,再去https://sourceforge.net/projects/opengapps/files/arm/20200927/中下载open_gapps-arm-10.0-tvstock-20200927.zip

2. 写sd卡和U盘。

macOS下使用balenaEtcher将atv.zip写入sd卡(工具会自动解压img文件)。

写入sd卡

将其它两个文件放入U盘。

3. 将写好的SD卡和U盘插入树莓派4b,连接键盘鼠标,开机。

开机界面

开机后基本都是常规的设置。

熟悉的Android TV界面

此时是没有Google Play的。

设置完成后,点击设备偏好设置,可以先修改语言。

关于-》最下面的内部版本号,一直点到提示已开启开发者模式。

退到上一层菜单(我连接的USB键盘是F2键后退,F1为Home),进入新增加的开发者选项。开启Root access。并开启本地终端。

回到主屏幕,点击左侧Apps,从右侧菜单选择本地终端。

su

rpi4-recovery.sh   //需要一点时间完成

reboot

4. 重启进入recovery。

选择右下角的”Swipe to Allow modifications”。

选择Install。

选择右下角的”Select Storage”,选择U盘。

选择”open_gapps-arm-10.0-tvstock-20200927.zip”, “Swipe to confirm Flash”。此处需要一点时间来完成。

安装完毕后,选择”Wipe Dalvik”,”Swipe to Wipe”。

点击屏幕左上角的上下箭头标志,返回主菜单。

选择”Wipe”,”Swipe to Factory Reset”。

再次点击上下箭头标志,返回主菜单。

选择Mount。

勾选上Boot和System,继续保留Data和USB-OTG。

再次点击上下箭头标志,返回主菜单。

选择Install。

选择”lineage-17.1-rpi-recovery2boot.zip”,”Swipe to confirm Flash”。

Reboot。

5. 重启后,系统需要重新设置(因为我们上面进行了Factory Reset)。

此时的设置步骤和其它国际版Android TV盒子基本一致,比如Shield TV等。请保证网络畅通。可以从左侧Apps调出Google Play,安装更多的应用。

设置完毕
添加Youtube

6. 装好以后才发现,可以和Xbox One X的一个旧游戏手柄连上,控制起来方便多了。其它支持的蓝牙遥控器应该也是可以的,但我手里只有Shield TV Pro 2019的遥控器,不想给树莓派用。

7. 可能因为设备为非认证设备,在Google Play里是搜索不到Netflix的。不过可以从Apkmirror下载一些旧版本(比如6.26.1),通过adb从电脑安装到树莓派4上(树莓派Android TV里重新开启开发者选项,勾选USB调试,USB连接电脑和树莓派4)。经测试该Netflix应用可以使用键盘鼠标控制,因为是非原生应用,需要从系统右上角的设置齿轮点开,选择应用,从所有应用中找到后启动。如果想为此类非适配应用添加Android TV的图标和Launcher可以搜索网上已有的各种教程。

8. https://konstakang.com/devices/rpi4/LineageOS17.1/ 文中提到了硬件编解码不能正常工作,所以都是软件编解码,这样性能就有所吃紧,实际测试中,本地Kodi播放1080P还算流畅,4K播放就已经很卡。就没再测试在线的Netflix和Youtube 4K。Youtube 1080P和Netflix 1080P播放还是比较流畅的。

综上,此版本系统在树莓派4b上,用于体验Android TV 10系统还算可以,但作为日常使用的电视盒子是不合格的。(作者频道里还有安装Android 10 Mobile的视频)

Android 10

PS: 另外不知道是固件问题还是我的HDMI线问题,接到有扬声器的显示器上,声音很小,需要把扬声器音量调到很大。

ESXi on Arm 10/22 更新

前些天在ESXi on Arm — 树莓派4b安装ESXi中体验了在树莓派4b上使用ESXi on Arm。一些Arm64虚拟机用了十几天体验还可以。用Arm虚拟机体验了一些应用,比如Pi-hole,HomeAssistant,OpenMediaVault,AdGuard Home等等。

今天看到ESXi Arm Edition这里在10/22更新了新版本,有了一些Bug修复和新功能。

Changelog中首先声明的就是不能升级安装。但是可以选择Preserve VMFS的方式安装。安装好以后原有的虚拟机的Datastore里的虚拟机文件夹都还在,可以通过注册虚拟机的方式重新添加就可以用了。

下载镜像VMware-VMvisor-Installer-7.0.0-17068872.aarch64.iso,写入一个新的U盘(非之前已安装ESXi的U盘)。macOS下我用balenaEtcher写入。

原有ESXi关闭所有虚拟机,进入维护模式(其实没太大意义,因为我们不是升级),关机。

插入新写好的U盘,接上键盘。开机。(比如说我原有ESXi在三星U盘上,新写好的是金士顿)。

在白色树莓界面,按ESC,进入UEFI启动菜单,选择从新写好的金士顿U盘启动。启动界面还是跟之前一样记得按Shift+O去修改autoPartitionOSDataSize=xxxx。

加载完毕,选择安装在三星U盘后,会弹出如下提示:

在当前安装介质发现了已有VMFS

选择preserve。然后后面安装步骤都一样了。

安装好以后,拔掉安装的金士顿U盘,重启。

启动完毕后,应该默认是DHCP,如果分配到的IP和之前不一样,可以进去修改一下静态地址,设置dns之类的。(ESXi系统本身是全新的,只是虚拟机文件的的VMFS datastore还在。所以其它NTP之类的设置也要重新去设置。)

一切设置完毕后。浏览器访问该VMFS datastore。选择注册虚拟机。

注册虚拟机

选择虚拟机文件夹,选择可选的vmx文件,点击注册。

注册

注册成功。

注册成功

在虚拟机菜单下可以看到该虚拟机。可以选择操作编辑设置去确认是否有丢失的配置。

虚拟机菜单

重复以上步骤注册其它虚拟机,不需要的虚拟机可以按文件夹去删除。

全部注册完毕

检查完设置没问题以后,虚拟机开机检查。

除了我暂时不用的Pi-hole,都开机了。

开机

最后简单过一下更新说明:

Fix for https://flings.vmware.com/esxi-arm-edition/bugs/1098 (PSOD adding to VDS) 修复加入分布式交换机时紫屏的bug,我之前版本也加入VDS了,没遇到bug。

Support for Arm N1 SDP platform 新设备支持。

Support for VMs on Neoverse N1 CPU 没太懂,之前使用这个CPU不支持创建VM吗?和上面一行是相关的吧。

Support for UEFI-less VMs 支持非UEFI的VM,是指DeviceTree么?

Pass-thru stability improvements to LS1046A and LX2160A platforms 对两个平台的直通稳定性的提升。

Fix for vCenter/DRS incorrect CPU usage 对vCenter/DRS中错误显示CPU使用率的修复。

Fix for VM crash when VM storage fills up 修复VM在VM存储占满后崩溃的问题。

Stability fix for non-coherent DMA device support 不太懂,提升该种设备的稳定性。

Installer: tolerate RAM size within 4% of 4GB instead of 3.125 (for the otherwise unsupported RK3399 boards) 对4GB内存的限制的允许误差修改为在-4%以内,之前为-3.125%。相当于放宽了一点点内存限制,应该是因为RK3399达不到-3.125%之内。

Serial port handling improvements (for unsupported/unknown boards, to be a bit more resilient of firmware configuration errors) 对串口处理的一些改进。

ESXi on ARM中安装Raspios-buster-arm64

看到标题是不是就觉得这是瞎折腾?

没错。如果树莓派4b中安装了ESXi on ARM,在ESXi中再安装Raspios,性能肯定不如直接使用树莓派4b裸装Raspios。

但是如果你使用一台8G版本树莓派4b,单独用一个Raspios又有点浪费了。可以试着在ESXi中多装几个Arm Linux系统,比如CentOS,Raspios,Ubuntu。然后可以在ESXi中随意切换虚拟机开关机。甚至可以同时运行几个Arm Linux系统,榨干它的性能。ESXi是可以超配的。如下图(各个虚拟的Linux空载时)。另外,还可以用到虚拟机的快照,克隆等功能,方便在上面开发测试软件,比如Pi-hole之类的。

同时开启5个Arm Linux虚拟机

Ubuntu,PhotonOS,Debian,CentOS在https://flings.vmware.com/esxi-arm-edition中附带的Pdf文档都说明了是支持并验证过的,方法也就是挂载ISO文件,去安装虚拟机。我就不做演示了。下面演示下装Raspios的过程。

因为官方下载到的2020-05-27-raspios-buster-arm64.img 并不默认支持EFI启动,而ESXi on Arm又只支持EFI启动,所以无法直接使用该镜像,我们要借助Debian的rescue mode来解决这个问题。

1. 下载raspios的img。使用StarWind V2V Converter转成vmdk(2个文件,上传至ESXi的datastore后显示成1个)。

2. 下载debian-10.6.0-arm64-netinst.iso,上传至datastore。

3. 创建虚拟机,类型Linux-Debian 10 x64。删掉原有虚拟的硬盘,添加上面转过的vmdk作为硬盘。光驱里加载Debian的iso文件,记得勾选上已连接,并去虚拟机选项里把引导选项的强行执行EFI设置的下次引导钩上。然后保存。cpu可以分2个核,内存1G或者2G都可以。网卡确保是能连外网的。

记得勾选这个

4. 启动虚拟机,去EFI设置的boot选项里,选择光驱启动 EFI DVD/CDROM。

5. 加载Debian,选择Advanced options,然后Rescue mode。

Advanced options
Rescue mode

6. 语言,国家,键盘都默认即可。

7. 随意设置一个Hostname, Domain name, time zone.

8. Device to use as root file system 选择 /dev/sda2,一定不要选错。然后Mount separate /boot选Yes。在/dev/sda2中运行shell。

/dev/sda2
Yes
/dev/sda2

9. Continue。

Continue

10. 接下来在下方依次输入下面几行命令,注意因为需要联网下载,所以每一步都需要很长时间(根据网络情况而定)。如果某一步没有成功,一定要再执行一遍确保成功了再下一行。如果提示空间不足之类的,那就apt autoremove; apt autoclean之类的试试。

apt update
apt install linux-image-arm64
apt install grub-efi-arm64
grub-install --efi-directory=/boot/
update-grub
exit

整个过程其实就是通过debian的rescue去给raspios加了grub-efi启动选项支持。

11. 关闭虚拟机。 把Debian的ISO虚拟光驱断开连接并且去掉打开电源时连接。

12. 开机,等待第一个启动选项自动加载。完成后就看到熟悉的树莓派系统了。

13. 初始化设置。先不要更新,因为应该会遇到空间不足的问题。

14. 关机。加大硬盘的容量,比如扩大到20G。

扩大硬盘

15. 保存,开机。进入系统后去sudo raspi-config。选择第7项 Advanced Options。

第七项

16. 选择A1 Expand Filesystem。

A1

17. 然后重启检查下硬盘是不是扩大了。

已扩容

18. 可以apt update或upgrade啦。

19. 如果想安装open-vm-tools,可以按照ESXi-Arm-Fling-Doc.pdf文档中的第12步操作编译,该文档是Ubuntu中的步骤,Debian同样适用。

VMware Tools