第一步,下载 VIB 驱动文件、PowerShell 脚本 ESXi-Customizer-PS 和 ESXI offline 压缩包。
网卡驱动文件可以在 https://vibsdepot.v-front.de/wiki/index.php/List_of_currently_available_ESXi_packages 下载。
脚本可以在 https://www.v-front.de/p/esxi-customizer-ps.html 下载。
offline 压缩包就是 VMware 官网上,ESXI 下载页面里和 ISO 镜像并列的压缩包。
第二步,安装依赖环境。
用管理员权限打开 PowerShell 运行命令 Install-Module -Name VMware.PowerCLI
。这个命令执行之前最好用 shadowsocks 或者 V2rayN 之类的软件打开全局代理,可以大幅加快安装速度。
如果没有使用代理的条件可以在 https://code.vmware.com/web/tool/12.0.0/vmware-powercli 下载 VMware-PowerCLI 工具的 zip 版本。
把压缩包中的所有文件夹解压到 PowerShell 的 Modules 目录中 (C:\Program Files\WindowsPowerShell\Modules)。
调整 PowerShell 脚本的执行策略,让脚本可以正常运行: 用管理员身份启动 PowerShell 并执行 Set-ExecutionPolicy Unrestricted
,在对话中输入 y
。
默认执行策略无法运行上面得到的名称类似于 ESXi-Customizer-PS-v2.6.0.ps1 的脚本。
第三步,开始封包。
把第一步得到的文件放到同一个文件夹下,比如 C:\work。所有驱动文件放在该文件夹下的 pkg 文件夹中,比如 C:\work\pkg。
执行以下命令:
.\ESXi-Customizer-PS-v2.6.0.ps1 -izip .\ESXi650-201908001.zip -pkgDir C:\work\pkg
ESXi-Customizer-PS-v2.6.0.ps1 为最新的工具命令
ESXi670-201912001.zip 为 ESXI 的离线包
C:/work/pkg 为 VIB 驱动的路径
执行完毕后如果显示 All done. 就表示封包完成。
脚本所在文件夹下会生成新的 ISO 文件,用这个镜像安装系统即可。
执行以下两条命令 (如果不在域中,第二个命令可以不执行):
esxcli system hostname set --host=hostname
esxcli system hostname set --fqdn=fqdn
FQDN 意为 Fully Qualified Domain Name 即,全限定域名。
比如:
esxcli system hostname set --host=j4105
esxcli system hostname set --fqdn=j4105.wt.local
即刻生效,不需要重启主机。
/etc/ssh/keys-<username>/authorized_keys
要允许授予 root 访问权限,在 /etc/ssh/sshd_config 文件中将 PermitRootLogin no 更改为 PermitRootLogin yes (允许密码、密钥登入) 或者 PermitRootLogin prohibit-password (禁止密码登入,允许密钥登入)。
要禁用密码登录,必须将 ChallengeResponseAuthentication 和 PasswordAuthentication 设置为 no 。
重新加载服务:
/etc/init.d/SSH restart
。service sshd reload
。不论编译时选定的启动方式是什么,都要在 ESXi 虚拟机设置里面把启动方式改成 BIOS 才能正常运行。原因还没搞清楚。
执行 esxcli storage core device list
列出所有硬盘
执行 esxcli storage core device smart get -d <device>
查看硬盘 <device>
的 SMART 信息。
在 RDM 物理直通模式下,IO 请求直接转发到硬盘,不会将硬盘虚拟化,所以性能要高一些。
但如果被 RDM 的硬盘是企业级产品的话,实际上性能没高多少。
所以,如果需要物理迁移硬盘的话,直通吧。如果需要用到 ESXI 的快照和迁移之类功能的话,别直通了。
就一个命令 vmkfstools -z /vmfs/devices/<disks>/<physical_disk> /vmfs/volumes/<main_disk_folder>/<disk_name>.vmdk
执行后在虚拟机的设置页面里添加硬盘就好了。
这个命令中 -z 是 physical RDM 的对应选项,如果需要 virtual RDM 也可以换成 -r 选项。
比如:
# physical_disk 是物理磁盘的名称
# 存储 > 设备 > 选择硬盘
physical_disk = t10.ATA_____INTEL_SSDSC2BA400G4_____________________BTHV551001NS400NGN__
# main_disk_folder 是 ESXi 系统盘所在位置的名称
# 存储 > 数据存储 > 选择 ESXI 的系统盘
main_disk_folder = 5efe1e10-9392b324-4451-001b2136bc58
# 自定义的名称,方便识别这个盘就行
disk_name ` 200423intel800.vmdk
# 得到比如这个命令
vmkfstools -z /vmfs/devices/disks/t10.ATA_____INTEL_SSDSC2BA400G4_____________________BTHV551001NS400NGN__ /vmfs/volumes/6106b085-9458a05f-d5ff-04d9f5f82585/200425intel400.vmdk
如果要取消硬盘的 RDM 直通只需要删除 /vmfs/volumes/<main_disk_folder>
(比如 /vmfs/volumes/6106b085-9458a05f-d5ff-04d9f5f82585) 文件夹下 <disk_name>-rdmp.vmdk
和 <disk_name>.vmdk
两个文件就行。比如 200425intel400-rdmp.vmdk 和 200425intel400.vmdk 。
注意:虚拟机添加直通硬盘以后,硬盘默认被分配一个 SCSI 控制器,但是这个控制器只能识别 2T 以下的盘。如果硬盘大小在 2T 往上,需要手动把控制器类型改为 SATA 控制器。
根据 vSphere 的文档,一台虚拟机最多有 4 个 SCSI 控制器,它们按顺序编号为从 0 到 3。
SCSI(0:6) 表示 SCSI 控制器 0 上的第 6 个节点。
但虚拟机的 SCSI 控制器也需要占一个 SCSI 节点,通常,这个节点是 (z:7),所以在给设备分配 SCSI 控制器时根本没有第 7 个节点,节点 6 后面直接跟节点 8。
有些 vmdk 格式的磁盘文件不能直接用。比如编译完 openwrt 以后得到的 vmdk 文件。
需要 SSH 到 ESXi 主机的 DataStore 存储中,执行 vmkfstools -i <oldfile>.vmdk <newfile>.vmdk -d thin
将 vmdk 文件转化为 ESXi 能识别的形式。
命令执行之后会生成 <newfile>.vmdk
和 <newfile>-flat.vmdk
两个文件,这两个文件共同组成了 ESXi 可识别的磁盘文件。
最后 编辑虚拟机 -> 添加现有硬盘 -> 选择 DataStore 中生成的两个文件。
经读者曾泽林 (zelinzeng@gmail.com) 提醒,编译完 openwrt 后得到的 vmdk 文件在硬盘控制器选择 IDE 的情况下可以正常启动虚拟机,上面的流程的作用是让硬盘驱动器为 SCSI 的情况下可以正常启动虚拟机。
ESXi 作为服务器操作系统会 尽可能阻止硬盘休眠 。
RDM 直通的本质是 ESXi 把 IO 操作直接转发到硬盘,硬盘依旧受 ESXi 管理,所以 RDM 直通的硬盘也无法休眠。
理论上,有一个办法可以绕过 ESXi 对硬盘的管理:
注: 经测试,在 6.7U3 host 的 Windows Server 2019 guest 上并没有成功休眠硬盘。
原理是,虚拟机操作系统绕过 ESXi 直接接管 HBA 卡,间接接管了机械硬盘。
这样机械硬盘就避开了 ESXi 的管理,可以在虚拟机操作系统内设置硬盘休眠。