摘要
本文详细介绍了通过VMWare旗下免费虚拟机产品ESXi的硬件直通特性实现两个拥有完整输入输出设备的客户机同时独立运行(一拖二),以及通过裸设备映射特性实现前述客户机中操作系统脱离虚拟机分别独立运行的方法。
关键词
虚拟化,ESXi,一拖二 ,直通(PassThrough),裸设备映射(RDM)
免责声明
1 本文轻理论、重实践,所有方法但求有效,不求甚解,切莫通过本文学习理论知识;
2 本文涉及较多硬盘操作,请确保所有硬盘中均无重要数据或做好备份;
3 一拖二更适合在已有兼容机基础上进行改造,否则建议直接购买两台电脑(硬件成本相对增加了CPU、主板、电源、机箱以及空间等,但更加简便、稳定);
4 需要重点注意的地方已加粗标注,如操作不当可能导致重头再来(当然这就是最严重的后果);
5 部分内容可能与笔者本身的硬件环境或软件版本有关,不确定在其他环境下是否成立,这样的内容会以斜体标注。
1 概述
家里有一台15年组装的兼容机,配置尚可。最近想满足两人同时使用的需求,因此想到了一拖二。经过研究,ESXi双虚拟机硬件直通方案最靠谱。同时,考虑到毕竟不是所有时间都是两人同时使用,在只有一个人使用的情况下,继续一拖二显然会造成一半硬件资源的浪费。因此还希望各客户机系统在保留虚拟机中上下文环境的同时,脱离虚拟机,直接在物理机上运行,单个系统享用所有硬件资源。
具体方案是:
1 将ESXi和两个日常使用的操作系统[1]分别安装在不同的存储介质,利用ESXi的裸设备映射特性,让虚拟机直接使用两个系统所在的硬盘,实现各系统在虚拟机中的运行;
2 利用ESXi的PCI硬件直通功能将宿主机的显卡、USB控制器、网卡等直接给虚拟机使用,实现一拖二效果;
3 两个系统分别直接引导,实现独立运行。
为了方便表述,明确或约定以下用语:
1 宿主机(Host):物理上的PC机+ESXi系统;
2 客户机(Guest):运行在ESXi之上的虚拟机;
3 分系统(本文约定):可以在物理主机上独立运行,也可以依托ESXi客户机运行的操作系统;
4 一拖二(本文约定):一台物理主机上同时独立运行两个分系统,且每个分系统都拥有独立的输入输出设备(如显示器、键盘、鼠标、光驱等);
5 多头显示/多屏显示/多显(Multihead):一个分系统连接两个或多个显示器。
本文会兼顾只有一拖二需求,不想各分系统独立运行的读者,在后文中需要针对分系统独立运行的设置都会提前说明。
2 先决条件
为实现一拖二效果,除ESXi官方基本硬件要求外[2],宿主机还应满足如下硬件要求:
CPU支持IOMMU[3](Intel:vt-d,AMD:AMD-Vi)
2块显卡(或1核显/集显+1独显);
(如需上网)2块独立网卡(有线、无线均可,主板上的以太网口不算在内);
主板有2个的USB控制器(请查阅主板说明书,一般都满足,如不确定可以安装ESXi后在虚拟机硬件中查看,参见第6章内容)。
如需实现各分系统独立运行,在以上条件的基础上,还需满足:
2块硬盘(用于分别安装操作系统)+1个U盘或SD卡(用于安装ESXi,ESXi空间要求较小,但还要使用U盘空间作为存储存放分系统的安装镜像及各种驱动,所以建议空间8G以上);
第三个USB控制器(一般主板上只有两个,几十元淘一块PCI转USB扩展卡即可)[4];
两块显卡最好是不同平台的(如N卡+A卡,Intel核显+N卡/A卡),因为同一品牌两个不同型号显卡Windows下驱动可能会冲突(自己的情况是两块A卡,一新一旧,安装新显卡驱动后旧显卡就会失效,后来换了一块N卡)。
除了以上宿主机的硬件条件外,还必须事先准备:
另一个台电脑,和宿主机用网线连接,用于配置ESXi(以下简称配置机);
一个用于制作ESXi安装程序的U盘或光盘;
操作系统安装镜像(.iso文件),以及包含Windows下需要手动安装硬件驱动的.iso文件。
3 ESXi安装与基本设置
1.下载ESXi安装镜像并制作安装U盘/光盘,制作过程略,只提供几点建议:
版本选择:可以从最新版本的ESXi开始安装,但遇到无法解决的问题是,应该考虑到尝试更换其他版本[5];
镜像下载:建议从官网下载[6],下载之前需要注册,下载时会分配免费许可号,或之后登录个人账号在查询,保存下来供后面使用;
U盘制作:在Windows下推荐使用Rufus[7][8],Linux下参见官方文档[9]。
2.安装之前,先对BIOS进行如下配置(不同主板具体设置可能不同):
开启虚拟化相关技术(Intel:vt-x、vt-d,AMD:AMD-V、AMD-Vi);
关闭快速启动;
如果主板支持UEFI,关闭UEFI安全启动(Secure Boot),或将UEFI安全启动模式由“Windows UEFI模式”改为“其他操作系统”(否则ESXi、Linux以UEFI方式引导时可能会出错);
关闭USB设置中的xHCI模式(否则USB控制器直通后客户机不识别);
关闭板载声卡(否则安装ESXi时会卡在“Initializing IOV”,安装完毕后可以重新开启)。
3.ESXi的安装非常简单,按照提示下一步即可。如果需要分系统独立运行,在安装过程中注意选择安装在U盘上。
4.安装完成后,BIOS设置从ESXi所在的存储设备启动。启动后,按F2键进入ESXi设置,配置静态IP。
5.用配置机(需要配置同一网段静态IP)打开浏览器,输入ESXi主机IP地址,即进入vSphere Web Client,输入root和密码登录。后文如未作特殊说明均在vSphere Web Client中操作。
6.在“主机-管理-许可”页面,分配上面保存好的许可证。
4 将ESXi所在U盘作为数据存储
如果你的ESXi并不安装在U盘,请跳过本章。
将ESXi安装在U盘中时,在vSphere Web Client是看不到U盘设备的,而且ESXi只会利用U盘开头固定的区域建立系统必要的分区,剩下的空间尚未分区,可以利用这部分空间作为ESXi的数据存储,用于存放客户机操作系统的安装镜像和驱动镜像等。
1.“主机-操作-服务-启用安全shell”,在配置机用ssh工具访问ESXi主机,本章后面的操作都在远程shell中进行。
2.进入/vmfs/devices/disks目录(cd /vmfs/devices/disks),列出所有文件(ls),一个文件对应一个存储设备或一个分区[10],其中有一个设备名称并不在vSphere Web Client的存储设备中出现,但在/vmfs/devices/disks目录下出现多次,且分别以:1、:5、:6、:7、:8、:9结尾,那么这个设备就是ESXi所在的U盘。以下以本人设备“t10.SanDisk00Cruzer_Blade000000004C530310011128118342”为例。
3.利用partedUtil命令[11]的getptbl选项查看U盘的分区信息(注意设备名称不带“:1”之类的分区号):
partedUtil getptbl t10.SanDisk00Cruzer_Blade000000004C530310011128118342
显示输出为:
gpt
1896 255 63 30464000
1 64 8191 C12A7328F81F11D2BA4B00A0C93EC93B systemPartition 128
5 8224 520191 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
6 520224 1032191 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
7 1032224 1257471 9D27538040AD11DBBF97000C2911D1B8 vmkDiagnostic 0
8 1257504 1843199 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
9 1843200 7086079 9D27538040AD11DBBF97000C2911D1B8 vmkDiagnostic 0
介绍一下上面输出结果的含义:
第一行为设备的分区表类型,比较新的版本都是gpt。
第二行为设备的机械结构信息,只需知道最后一个数字(30464000)代表U盘总共的扇区数(ESXi一个扇区为512Byte)。
第三行起,每行为一个分区的信息:第一列为分区号,注意编号顺序与实际物理位置顺序并无关系;第二、三列分别为起始扇区和终止扇区[12];第四列为分区类型的UUID[11],这里只要知道VMFS 数据存储类型的UUID是“AA31E02A400F11DB9590000C2911D1B8”,EFi系统分区(ESP)类型的UUID是“C12A7328F81F11D2BA4B00A0C93EC93B”;第五列为分区名称;最后一列为分区属性,128代表该分区为可引导分区,大多数分区的属性值为0。
4.可以看到7086080至30464000扇区并未分区,可以根据需要进行分区,分区时注意扇区与容量间的换算,还有最末分区的终止扇区为整个U盘的末扇区减去34[12]。
这里划分两个区,2号分区类型为VMFS 数据存储,供ESXi使用;3号分区类型为ESP,用于在UEFI引导模式下利用Grub实现多系统引导(见后续文章),如果你只需要引导ESXi实现一拖二,或者仅希望启动时通过BIOS选择引导的系统,或者BIOS不支持UEFI,则不需要这个分区,可以将全部空闲区域划作一个区。
利用partedUtil命令的setptbl选项分区,命令格式参见getptbl选项,不再赘述。注意必须完整指定要应用于磁盘的分区列表,也就是指令中要包含原有分区信息,否则会丢失原有分区:
partedUtil setptbl t10.SanDisk00Cruzer_Blade000000004C530310011128118342 gpt \
"1 64 8191 C12A7328F81F11D2BA4B00A0C93EC93B 128" \
"5 8224 520191 EBD0A0A2B9E5443387C068B6B72699C7 0" \
"6 520224 1032191 EBD0A0A2B9E5443387C068B6B72699C7 0" \
"7 1032224 1257471 9D27538040AD11DBBF97000C2911D1B8 0" \
"8 1257504 1843199 EBD0A0A2B9E5443387C068B6B72699C7 0" \
"9 1843200 7086079 9D27538040AD11DBBF97000C2911D1B8 0" \
"2 7086080 22075357 AA31E02A400F11DB9590000C2911D1B8 0" \
"3 22075358 30463966 C12A7328F81F11D2BA4B00A0C93EC93B 0"
5.利用vmkfstools命令[13]将2号分区格式化,文件系统为vmfs5,名称为USBStorage:
vmkfstools -C vmfs5 -b 1m -S USBStorage t10.SanDisk00Cruzer_Blade000000004C530310011128118342:2
进入“设备-存储-数据存储”页面,可以看到有一个名称为USBStorage的存储空间。
6.利用数据存储浏览器上传所需镜像供后续使用。
5 设置裸设备映射
如果你并不需要分系统独立运行,请跳过本章。
裸设备映射(RDM)[14]可以让ESXi的虚拟机直接访问物理硬盘,这样物理硬盘上的操作系统就可以脱离虚拟机单独引导,实现分系统独立运行的效果。
1.查看要映射的硬盘的名称。在“设备-存储-更多存储”页面,点击要映射的硬盘-硬盘标题后括号内的内容即为硬盘名称[10]。
2.“主机-操作-服务-启用安全shell”,在配置机用ssh工具访问ESXi主机。
3.在远程shell中,利用vmkfstools命令设置RDM,命令格式如下:
vmkfstools -z /vmfs/devices/disks/<第1步中硬盘的名称> <目标目录>/<映射名称>.vmdk
例如:
vmkfstools -z /vmfs/devices/disks/t10.ATA_____PLEXTOR_PX2D128M6S_______________________P02528100416________ /vmfs/volumes/USBStorage/Windows10.vmdk
再如:
vmkfstools -z /vmfs/devices/disks/t10.ATA_____Samsung_SSD_840_EVO_120GB_______________S1R3NSAF825615E_____ /vmfs/volumes/USBStorage/Manjaro.vmdk
在数据存储空浏览器中,可以看到USBStorage下增加了两个磁盘映射文件:Windows10.vmdk和Manjaro.vmdk。
6 配置硬件直通
直通[15],就是客户机直接使用宿主机的硬件设备。在“主机-管理-硬件”页面,点击“PCI设备”,勾选两个显卡、两个USB控制器、两个网卡,点击“切换直通”,重启。注意以下几点:
核显/集显也在列表中,当做PCI设备直通即可。
显卡直通后,ESXi启动时屏幕会卡在进度条的1/3处,这是正常的,因为ESXi已经交出显卡的“控制权”。系统在大概30秒(视配置而定)后会完成启动,用配置机进入vSphere Web Client即可。
拥有HDMI、DP等具备音频输出功能的显卡一般显示为一组两个PCI设备,这样的设备只能一起直通。
不要将主板上连接配置机的以太网卡(列表中显示为“XXXXX Ethernet Connection”)直通,这样将配置机进行配置;
USB主板上的一个USB控制器一般在列表中显示为"XXXXXX EHCI Controller #1/#2",一个USB控制器控制多个U口,至于控制哪几个U口,一般没有规律(例如并非所有USB3.0插口和所有USB2.0插口都分别属于不同的控制器)。如果主板手册中未标明,没发现太好的办法。建议第一次操作时先直通一个USB控制器,按照第7章内容创建一个虚拟机(不用操作系统)并启动进入BIOS,用键盘依次连接各个U口测试,能够使用的U口显然就属于这个被直通的控制器。
如果ESXi安装在U盘上,则必须留出一个未直通的USB控制器供这个U盘使用。如果对ESXi所作的改动重启后丢失,就是因为U盘所属控制器被直通了,ESXi能正常启动是因为在交出USB控制器的“控制权”之前已经加载到了内存中。
7 创建虚拟机
点击“虚拟机-创建/注册虚拟机-创建新虚拟机”,需要硬件直通的虚拟机创建过程中需要注意的地方比较多,请仔细阅读下面的内容;如果有些步骤下文没有提到,则保持默认选项或下一步即可。
1.在“选择名称和客户机操作系统”步骤:
客户机名称最好不要有空格,否则会对ssh下使用命令造成不变;
Linux操作系统版本若在下拉列表中没有,可以选择“其他3.x(对于ESXi 6.5)/4.x(对于ESXi 6.7)或更版本的Linux”。
2.在“自定义设置”步骤,“虚拟硬件”选项卡:
如果已经按照第6章创建了RDM硬盘,则必须有一个SATA控制器,可以删除SCSI控制器;
如果虚拟机准备安装Manjaro等一些Linux操作系统,最好删除虚拟网络适配器,因为安装Manjaro需要断开所有网络连接以跳过确定位置的环节,如果检测到有网络连接,就会卡在“正在加载位置数据(loading location data)”;
USB控制器已经直通,可以删除虚拟USB控制器;
CPU设置:不能勾选“向客户机操作系统公开硬件辅助的虚拟化”和“向客户机操作系统公开 IOMMU”,否则会提示“启用了嵌套硬件辅助的虚拟化时,无法添加 PCI 直通设备”(对于Windows客户机,如果你发现不能取消勾选上面两个选项,是因为有些版本的ESXi在之前的步骤中会有“启用Windows 基于虚拟化的安全性”选项并默认勾选,返回前面的步骤取消勾选);
内存设置:PCI 直通要求勾选“预留所有客户机内存 (全部锁定)”;
硬盘设置:如果已经按照第6章创建了RDM硬盘,则删除默认分配的硬盘,在添加硬盘时选择“现有硬盘”,然后在弹出的文件选择对话框中选择所创建的RDM硬盘,选择该硬盘的控制器为SATA控制器,磁盘兼容性选择“物理”;如果不需要RDM硬盘,可以调整默认分配的硬盘大小,控制器可以选择虚拟的SCSI控制器;
CD-ROM设置:选择“数据镜像”,在弹出文件选择对话框中选择要安装的操作系统镜像文件,控制器建议选IDE,否则有些操作系统安装镜像会无法从虚拟光驱引导;
依次添加第7章直通的PCI设备,每个虚拟机分配一个显卡和一个USB控制器,如果需要联网则要分配一个网卡。
3.在“自定义设置”步骤,“虚拟机选项”选项卡:
在“引导选项”菜单下,如果准备安装Linux操作系统且选择了EFI固件,不要勾选“是否为此虚拟机启用 UEFI 安全引导”,对于一些Linux发行版(如Archlinux系的操作系统),勾选此选项会导致无法启动,且无法再取消勾选,只有通过ssh修改vmx配置文件文件或删除虚拟机重新创建;
如果直通的USB控制器在客户机的BIOS中可以使用,但在Linux安装环境或安装完成的Linux操作系统中无法使用,于此同时开机时间过长且关机时出现卡死,尝试在“引导选项”菜单下的“固件”选择BIOS引导方式再重装系统。
如果选择直通N卡,则在“高级-配置参数”菜单下,点击“编辑配置”,弹出对话框中点击“添加参数”,键为hypervisor.cpuid.v0,值为FALSE。
4.完成创建虚拟机。在“主机-管理-系统”页面,点击“自动启动”菜单,设置自动启动:
点击“编辑设置”,选择“是”启用自动启动,主机默认的启动延迟和停止延迟可以设置为0,其余保持默认即可;
在下面的虚拟机列表中,为刚创建的虚拟机启用自动启动,或在虚拟机界面点击“操作-自动启动”进行设置。
8 客户机操作系统安装
虚拟机创建完毕后,打开虚拟机电源,由数据镜像文件引导进入操作系统安装环境[16]。一般而言,操作系统在虚拟机中的安装和普通安装没有任何区别,不再赘述。
安装完成后,Windows10操作系统驱动安装和多显设置比较简单,按照下面的步骤进行:
1.关闭虚拟机,设置CD-ROM指向已经准备好的Windows驱动镜像,启动虚拟机,在虚拟光驱中找到驱动文件进行安装;
2.显卡驱动安装完成后,客户机使用的直通显卡所连接的显示器点亮,但是物理显示器显示的内容默认为虚拟显示器的扩展,进入Windows显示设置,设置仅物理显示器显示;
3.关闭虚拟机和宿主机,重启主机进入BIOS,选择Windows所在硬盘启动,进入系统后,安装另一块显卡的驱动,安装完成后两个物理显示器均点亮。
Windows10在物理机和虚拟机上的运行时会自动根据当前拥有的显卡切换显示设备。
Linux操作系统一般不需要再安装驱动,但是多显的设置及物理环境和虚拟环境显示设备的切换比较复杂。关于Linux一拖二及多显的问题后续另写文章讨论。
9 总结与展望
完成两个虚拟机的创建及系统安装后,引导ESXi启动,两个显示器经过一段时间的黑屏后,分别显示两个分系统内容;引导分系统启动,两个显示器扩展显示同一系统的内容。
至此,我们已经实现了两个分系统独立运行及依托ESXi同时运行。除了第4、5章需要在Shell执行一些命令,如果你只是想实现单硬盘上的一拖二,只需要通过ESXi提供的vSphere Web Client进行简单的配置即可完成,相信非计算机专业的读者也可以轻松完成。需要重点注意的地方主要集中在硬件直通和虚拟机创建过程中。
但是还有一些问题尚待解决:
拖二情况下,既然实现了客户机随宿主机一同启动,我们也希望在最后一台客户机关机后关闭宿主机,但是这并不像设置自动启动一样简单;
在完成所有配置后,我们希望在今后的使用中抛弃配置机,在一台计算机上解决所有问题,这就涉及到虚拟网络配置的内容;
在一拖二+分系统独立运行的情况下,为避免每次开机进入BIOS选择要启动的系统,可以利用ESXi的系统分区,或第五章建立的“EFI系统”分区,安装配置多系统引导。
这些内容都会在后续“进阶篇”中详细讨论。
另外,本文除了第8章,在讨论时尽可能做到了和具体客户机操作系统无关,希望对所有通过ESXi实现一拖二的读者都有所帮助。对于Linux用户,还需要解决一些相对复杂的问题,这些内容会在后续“Linux篇”中详细讨论。
(后续会更新添加必要的图片说明。)
参考
1 ^本文操作系统是指Windows和Linux,MacOS(黑苹果)、Synology DSM(黑群晖)等不在本文讨论范围内。
2 ^ESXi硬件要求, https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.esxi.install.doc/GUID-DEB8086A-306B-4239-BF76-E354679202FC.html
3 ^ArchWiki中关于IOMMU的介绍, https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Setting_up_IOMMU
4 ^选择新增U盘+usb控制器方案仅仅是因为成本更低,如果手头有富余的硬盘,完全可以将ESXi安装在硬盘中,这样总共需要三块硬盘,不需要额外的USB控制器
5 ^笔者就遇到ESXi 6.7 u2 + AMD R9 270x,无论客户机是Windows10还是Manjaro,在直通显卡后在客户机重启或关机时,宿主机卡死的情况,另一块A卡和N卡都正常。按照网上很多方法都未解决,换到ESXi 6.5 u2,Manjaro问题还是存在,但是Windows10一切正常。
6 ^下载VMware vSphere Hypervisor 6.7, https://my.vmware.com/cn/web/vmware/evalcenter?p=free-esxi6
7 ^Rufus, https://rufus.ie/
8 ^用Rufus制作系统安装U盘时,可能需要联网下载所需资源,当无法连接服务器时,按照参考链接更新SSL library。 https://support.microsoft.com/en-us/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi
9 ^格式化 USB 闪存驱动器以引导 ESXi 安装或升级, https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.esxi.install.doc/GUID-33C3E7D5-20D0-4F84-B2E3-5CD33D32EAA8.html#GUID-33C3E7D5-20D0-4F84-B2E3-5CD33D32EAA8
10 ^ab设备名称一般以t10.、naa.或mpx.为前缀。一个设备在同一ESXi版本下即使重新安装,名称是固定不变的;但同一设备在不同版本下命名可能不同。
11 ^ab在 ESXi/ESX 上使用 partedUtil 命令行实用程序, https://kb.vmware.com/s/article/1036609?lang=zh_CN
12 ^ab可以注意到,前几个系统分区之前都空闲了33扇区,但最后两个分区之间并没有留空,搜索原因无果。这猜测可能是为了保证GPT与MBR分区格式的兼容性。分区时末扇区减去34的操作来源于网络,可能也于此有关。
13 ^创建 VMFS 数据存储或暂存分区, https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.storage.doc/GUID-2062B38D-C1F0-4620-BC29-EDD566B0D4D1.html
14 ^裸设备映射, https://docs.vmware.com/cn/VMware-vSphere/6.7/com.vmware.vsphere.storage.doc/GUID-B3522FF1-76FF-419D-8DB6-F15BFD4DF12A.html?hWord=N4IghgNiBcKB8Rg+6MOCagCM0CA6IC+Q
15 ^直通(PassThrough), https://docs.vmware.com/cn/VMware-vSphere/6.5/com.vmware.vsphere.networking.doc/GUID-BF2770C3-39ED-4BC5-A8EF-77D55EFE924C.html
16 ^如果你采取的是RDM硬盘方案,在ESXi安装操作系统仅仅是为了省去制作系统安装U盘的麻烦。直接用安装介质在RDM硬盘上安装操作系统,甚至硬盘中本身就留有操作系统,都是可以的。
发表评论