自己动手用C#写无盘引导服务
作者:V君 发布于:2020-3-5 22:18 Thursday 分类:我的应用
发表一下最近折腾的东西,还没折腾完,因此不太TL;DR,再扯扯 (pia
[ 源代码 ] 目前只做了 DHCP、TFTP 和 iPXE 用的 HTTP 脚本服务。由于只是勉强能用,并不友好,因此尚未提供直接可用的二进制文件
— 使用方法:开始 —
将源代码弄下来,还原 NuGet 包,编译。导航到解决方案根目录的 bin 文件夹,我把它们的输出全都指向这里以方便编辑配置文件。
- 编辑 DHCP 配置文件,正确设置监听地址
- 编辑 TFTP 配置文件,正确设置监听地址、正确设置根路径
- 编辑 HTTP 配置文件,正确设置监听前缀
源代码和下面的描述已经差别很大,DHCP池已经实现,等什么时候蛋疼再回来扯扯(被打x
启动这三者,不要忘记调整防火墙,插好网线启动从机,设置好 BIOS 使其从 PXE 启动。这时候还不能顺利引导,DHCP 服务会在 DhcpEntries 文件夹会自动生成 MAC 地址的对应的 json 配置文件,修改 default 配置文件设置除了IP之外的字段,如子网掩码、网关、DNS、启动文件名,然后再在对应 MAC 的配置文件里面指定 IP 地址,将 Enable 字段置为 true。注意字段 Enable 对 Default 配置文件无效。这时候从机应该能分配到 IP 地址,然后去 TFTP 获取启动文件了。本例使用 iPXE 作为引导。
本例提供的 iPXE 嵌入了【再次获取 DHCP 并将启动文件名作为 chain 目标】,可以将 chain 指定为 HTTP 的 URI,从服务器吐出脚本来实现动态执行。通过 iPXE 发出的 DHCP 请求带有 UserClass 字段,会自动生成配置文件,可以另外指定启动文件名为 HTTP 网址。
配置文件的叠加顺序为:Default → Default-【UserClass】 → MAC → MAC-【UserClass】。值为 null 的字段将被忽略。接下来就可以去 IpxeScripts 文件夹配置 iPXE 脚本了。引导部分到此结束,接下来的步骤是连接到存储服务器、启动系统了。
— 使用方法:结束 —
— 扩充:开始 —
常见的的无盘使用 iSCSI 方式连接到服务器,详细用法请参考示例或查阅 iPXE 使用手册。iSCSI 服务端可以使用 StarWind 或者 TalAloni/iSCSIConsole 亦或者是 我的fork。 我在 TalAloni 的基础上增加了大容量、可加载 RamDisk 和类似 StarWind 的 ibv 支持。能从一个镜像中创建分支快照,能让多台机器同时使用,有点像 VMware 的链接克隆。
— 扩充:结束 —
— 扯扯:开始 —
刚刚开始的时候我用了 TFTPD32、Grub4Dos、固定脚本的 iPXE、还有 Star wind。由于效果很不理想,得想办法解决。 TFTPD32 的毛病:分配IP地址时间较长、TFTP经常抽筋;StarWind 的毛病:服务进程经常崩溃;尽管 TalAloni 的实现很稳定,但它的界面简直就是个 DEMO,每次打开都要配置……后来深入了解 DHCP 协议,发现可以它很简洁,可扩展性又强,再了解 iPXE 动态脚本,这套组合拳就打出来了。
虽然 DHCP 和 TFTP 的协议都挺好搞,但 iSCSI 协议就复杂了,想让指定的 Target 能根据客户端 iqn 自动创建快照, 实现不同机器连接到同一个 Target,却是各自使用自己的快照,目前还在咕咕咕(
— 扯扯:结束 —
blogger
Google Web Translator
热门日志
随机日志
最新日志
最新评论
- V君
@Quartz:(出现)... - Quartz
怎么不见人了呢... - V君
@Soar:DHCP 协议相... - V君
@Soar:当然是非... - Soar
@V君:谢谢 有空... - Soar
搞一个 1230v3+B85... - V君
@Soar:另外,也可... - V君
@Soar:iscsi服务端... - Soar
难怪这么卡,尤其... - Soar
clone了源码,提示...
分类
存档
- 2024年5月(1)
- 2023年7月(1)
- 2023年5月(1)
- 2022年11月(1)
- 2022年10月(1)
- 2022年9月(1)
- 2022年8月(1)
- 2022年7月(1)
- 2022年6月(1)
- 2022年5月(2)
- 2022年4月(1)
- 2022年3月(1)
- 2022年2月(1)
- 2022年1月(1)
- 2021年12月(1)
- 2021年11月(1)
- 2021年10月(1)
- 2021年9月(1)
- 2021年8月(1)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(1)
- 2021年4月(1)
- 2021年3月(1)
- 2021年2月(1)
- 2021年1月(1)
- 2020年12月(1)
- 2020年11月(1)
- 2020年10月(2)
- 2020年9月(1)
- 2020年8月(1)
- 2020年7月(1)
- 2020年6月(1)
- 2020年5月(1)
- 2020年4月(2)
- 2020年3月(3)
- 2020年2月(1)
- 2020年1月(1)
- 2019年12月(1)
- 2019年11月(1)
- 2019年10月(1)
- 2019年9月(1)
- 2019年8月(2)
- 2019年7月(1)
- 2019年6月(1)
- 2019年5月(1)
- 2019年4月(1)
- 2019年3月(1)
- 2019年2月(1)
- 2019年1月(2)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(3)
- 2018年9月(4)
- 2018年8月(6)
- 2018年7月(4)
- 2018年6月(1)
- 2018年5月(2)
- 2018年4月(2)
- 2018年3月(3)
- 2018年2月(1)
- 2018年1月(1)
- 2017年12月(1)
- 2017年10月(2)
- 2017年9月(1)
- 2017年8月(2)
- 2017年7月(1)
- 2017年6月(5)
- 2017年5月(2)
- 2017年4月(2)
- 2017年3月(3)
- 2017年2月(2)
- 2017年1月(2)
- 2016年12月(3)
- 2016年11月(2)
- 2016年10月(3)
- 2016年9月(4)
- 2016年8月(2)
- 2016年7月(4)
- 2016年6月(3)
- 2016年5月(1)
- 2016年4月(4)
- 2016年3月(3)
- 2016年2月(1)
- 2016年1月(5)
- 2015年12月(4)
- 2015年11月(5)
- 2015年10月(1)
- 2015年9月(6)
- 2015年8月(4)
- 2015年7月(1)
- 2015年6月(6)
- 2015年5月(3)
- 2015年4月(3)
- 2015年3月(2)
- 2015年2月(1)
- 2015年1月(3)
- 2014年12月(1)
- 2014年11月(1)
- 2014年10月(1)
- 2014年9月(3)
- 2014年8月(1)
- 2014年7月(1)
- 2014年6月(1)
- 2014年5月(3)
- 2014年4月(1)
- 2014年3月(1)
- 2014年2月(2)
- 2014年1月(1)
- 2013年12月(2)
- 2013年11月(2)
- 2013年10月(1)
- 2013年9月(3)
- 2013年8月(14)
- 2013年7月(7)
- 2013年4月(1)
- 2013年3月(4)
- 2013年2月(6)
- 2013年1月(6)
- 2012年12月(8)
- 2012年11月(6)