一、源码与链接

几个相关链接

相关源码

二、编译一个带 iSCSI 和 COMBOOT 功能的 iPXE 固件

这个参考 ipxe 官网或 iPXE 编译增加功能与自定义脚本 进行编译,在我的源码 netboot-tftp 中有编译好可用的 kpxe 文件

三、群晖 NAS 里配置 DCHP、TFTP 和 WEB 服务器

先按同胞网友写的教程 Part 1 配置好群晖的 iSCSI、DCHP、TFTP 和 WEB 服务器

开启 TFTP 服务

无盘esxi引导 esxi 无盘_esxi 无盘服务器

将 netboot-tftp 源码里全部文件上传到 /PXE/Grub 文件夹下

无盘esxi引导 esxi 无盘_esxi 无盘服务器_02

开启 DHCP 服务

无盘esxi引导 esxi 无盘_服务器_03

无盘esxi引导 esxi 无盘_DHCP_04

开启 PXE 并设置启动文件

无盘esxi引导 esxi 无盘_无盘esxi引导_05

网络启动测试

在 BIOS 的 BOOT 选项里将从网络启动调整到第一位,各主板 BIOS 操作不一样,请自行查阅主板 BIOS 说明

无盘esxi引导 esxi 无盘_无盘esxi引导_06

无盘esxi引导 esxi 无盘_无盘esxi引导_07

无盘esxi引导 esxi 无盘_服务器_08

开启 WEB 服务

开启群晖 web station 并设置虚拟主机用来加载一些系统的引导文件

无盘esxi引导 esxi 无盘_esxi 无盘服务器_09

无盘esxi引导 esxi 无盘_DHCP_10

四、在群晖配置 iSCSI target 和 iSCSI LUN

无盘esxi引导 esxi 无盘_服务器_11

无盘esxi引导 esxi 无盘_无盘esxi引导_12

无盘esxi引导 esxi 无盘_esxi 无盘服务器_13

五、修改 tftp 根目录中的文件

无盘esxi引导 esxi 无盘_服务器_14

无盘esxi引导 esxi 无盘_服务器_15

六、通过网卡 DHCP 启动机器安装系统

无盘esxi引导 esxi 无盘_无盘esxi引导_07

无盘esxi引导 esxi 无盘_DHCP_17

无盘esxi引导 esxi 无盘_DHCP_18

在 menu.ipxe 的一些网络地址没问题的话,就能进入 ESXi 的安装界面了

无盘esxi引导 esxi 无盘_DHCP_19

这里安装的时候硬盘选择界面会出现 iSCSI 的硬盘,如果有其他硬盘的话别选错了

如果没有出现 iSCSI 硬盘,那肯定是加载出错了。

无盘esxi引导 esxi 无盘_加载_20

无盘esxi引导 esxi 无盘_无盘esxi引导_21

七、安装完成启动系统

无盘esxi引导 esxi 无盘_DHCP_22

无盘esxi引导 esxi 无盘_esxi 无盘服务器_23

八、关于 DHCP 与 TFTP 服务器

按照上面的教程是在内网开启了两个 DHCP 服务器,一个是主路由的,我这里是 ROS,一个是群晖的。

这样会导致有些时候网络启动后 iPXE DHCP 获取到的结果不是想要的结果,比如 next-server 地址错误

会导致加载不到启动脚本而进不了菜单,这里建议内网只有一个 DHCP 服务器,这样就不会有 DHCP 服务干扰了

下面介绍使用 ROS、LEDE 的 DHCP 和 TFTP 服务器

ROS 的 DHCP 与 TFTP 设置

将 netboot-tftp 源码上传到 ROS 的 files,然后 ip -> TFTP 开启 ROS 的 TFTP 服务

无盘esxi引导 esxi 无盘_esxi 无盘服务器_24

无盘esxi引导 esxi 无盘_加载_25

DHCP server 里配置 next server 和 boot file name

无盘esxi引导 esxi 无盘_esxi 无盘服务器_26

LEDE 的 DHCP 与 TFTP 设置

如果是使用 LEDE 的 DHCP 和 TFTP 服务器,则将 netboot-tftp 源码上传到 lede 路由上

然后在 网络 -> DHCP/DNS 下进行配置 TFTP 服务

无盘esxi引导 esxi 无盘_无盘esxi引导_27

九、对特殊电脑做特别设置

脚本是支持多个电脑启动不同的系统到电脑对应系统的 iSCSI LUN

这就是上面创建 iSCSI target 的时候 target 名称为什么要用 主机名.系统名

无盘esxi引导 esxi 无盘_服务器_11

* 设置电脑网卡 mac 地址脚本

比如要让电脑 A(网卡 MAC 地址为 00:12:34:56:78:90) 启动到 mini.系统名 的 iSCSI

那就是设置电脑 A 的主机名为 mini

如果使用群晖的 DHCP,则可以在群群晖 DHCP 客户端列表里给 MAC 地址设置主机名

无盘esxi引导 esxi 无盘_DHCP_04

如果一些不能设置主机名的 DHCP 服务器,如 ROS,如果不用做特殊设置,则 hostname 为空

这样脚本会找 mac 地址.系统名 的 iSCSI, 这样就会取不到 iSCSI, 除非你 iSCSI target 用 mac 地址.系统名 命名

在 netboot-tftp 源码目录下有一个 boot 文件夹,这个文件夹就是放置对应主机或 MAC 地址特殊脚本的目录

在 boot 目录下创建文件, 文件的命名格式为 mac-mac 地址去掉冒号字母小写.ipxe

例如 mac-001234567890.ipxe

在文件里添加脚本如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14#!ipxe

echo

# 设置这个mac地址的主机名

set hostname mini

set initiator-iqn ${base-iqn}:${hostname}

echo Booting ${hostname}

# 这里还可以设置默认进入的菜单和在菜单上的等待时间

# 比如装好系统后设置 default 为 esxi ,timeout 为1秒或更短

# 这样就可以直接进入esxi系统,省去选择菜单步骤。在装好系统不要用菜单的时候很有用

set menu-default esxi

set menu-timeout 10000

chain --replace --autofree ${menu-url}

十、折腾过程中遇到的坑

关于 iscsi 的坑

仔细看 netboot-tftp 里菜单命令会发现有一条命令 sanhook \${root-path}

是扫描加载 iSCSI 的

全路径是这样的

sanhook iscsi:192.168.1.252::::iqn.iqn.2000-01.com.synology:mini.ESXi

iPXE 官方文档有对这个进行说明:

无盘esxi引导 esxi 无盘_加载_30

1iscsi:::::

我们把其中的 protocol、prot、LUN 都省略了,所以成了::::

其中 LUN 是一个坑,官方文档中有对 LUN 的介绍是这个样的

1 is the SCSI LUN of the boot disk, in hexadecimal. It can be left empty, in which case the default LUN (0) will be used.

LUN 是指要加载 iSCSI target 中哪个 LUN,值是 LUN 的编号 ,关键信息是 默认值 为 0。

使用我的脚本加载 DS3617xs 中的 iSCSI 一切正常

但是用这个脚本加载 DS918+ 的中 iSCSI 就会加载不到

研究了几个小才发现

在我在 DS3617xs 中 iSCSI target 第一个 LUN 的编号为 0

无盘esxi引导 esxi 无盘_服务器_31

而 DS918+ 中 iSCSI target 第一个 LUN 的编号为 1

无盘esxi引导 esxi 无盘_无盘esxi引导_32

所以如果发现自己 iSCSI target 第一个 LUN 的编号为 1 的,请修改 netboot-tftp 源码中的 boot.ipxe.cfg 文件

无盘esxi引导 esxi 无盘_服务器_33

1set base-iscsi iscsi:${iscsi-server}::::${base-iqn}

改成

1set base-iscsi iscsi:${iscsi-server}:::1:${base-iqn}