自从去了一次网吧,就对网吧的无盘启动念念不忘,想在家里实现无盘启动以节省我的固态硬盘。
准备无盘启动的电脑是一台老旧的Lenovo G460电脑,因为硬盘是机械,运行非常卡顿,但家里又没有可以代换的固态硬盘。于是我打算通过共享服务器上的iSCSI磁盘来加速其运行
0.可能存在的一些坑
0.注意事项
本教程仅供参考,有些地方需要自己会随机应变,比如你的电脑比较新,那么就无需ipxe.pxe文件启动,可采用链式启动;你的网卡不是小螃蟹的,就不需要处理小螃蟹驱动的问题
虽然教程看起来比较简单,但是暗藏的坑还是比较多的,本人折腾了整整两天才成功
1.iPXE卡在iPXE initialising devices
这可能是由于网卡/BIOS过于老旧,导致无法通过链式启动undionly.kpxe文件,可以尝试换用其他方式启动,如通过更换ipxe.pxe或ipxe.iso等文件启动
2.Windows安装报错驱动无法安装(Windows installation cannot continue because a required driver could not be installed)
这是由于驱动原因导致大于Windows 10 1607的版本都无法兼容网启(好像会缺少正确的驱动,可能是机器网卡的问题),目前我的机器仅能启动Windows 10 1607的英文版本(中文版本无法启动,安装会报错,强制写入也蓝屏)。目前推荐使用Windows 10 2016 LTSB英文版
3.使用WinNTSetup强制写入后出现蓝屏并报错inaccessible boot device
详见0.2
4.启动时报错rt640x64.sys驱动程序签名错误
不知为何,Windows 10 LSTB/Windows 10 1607中自带的rt640x64.sys驱动签名全部为无效,手动在WindowsPE中替换可以正常启动
1.准备需要的环境和文件
需要的环境:
DiskStation(群晖)
关闭内网DHCP服务
需要的文件:
iPXE官方仓库:网页链接,将其克隆到本地
Windows10 2016 LTSB英文版镜像:请从MSDN下载(如果你的电脑比较新,可以试试稍微新一点的Windows版本
winboot:网页链接,用于启动WindowsPE(下方下载的脚本中已自带winboot)
WindowsPE:网页链接,可自行制作,本人此处不提供具体教程
启动脚本:网页链接,用于网启的脚本,可参考此自行编写
2.上传文件到群晖
将步骤1下载的启动脚本以及WindowsPE解压并上传到群晖。目录结构如下
1 | www |
3.搭建Web服务器以动态返回启动脚本
在群晖中安装Web Station套件
点击网页服务门户->创建服务门户
然后选择虚拟主机,并选择基于端口8080,文档根目录选择刚才上传的www目录,然后点击新增
最后,尝试访问http://[你群晖的IP]:[你刚才输入的端口]/ipxe/boot.ipxe查看是否正常返回
4.编译iPXE
为编译的ubuntu系统安装以下依赖
1 | sudo apt update |
克隆仓库https://github.com/ipxe/ipxe,并进入目录ipxe/src
创建script.ipxe文件,并向其中写入
1 | #!ipxe |
然后输入以下命令即可开始编译
1 | make bin/ipxe.pxe EMBED=script.ipxe |
编译成功后即可在ipxe/src/bin目录找到刚才编译的ipxe.pxe文件(当然你编译其他类型的启动文件也无所谓,比如undionly.kpxe等
5.开启群晖TFTP服务
在文件服务–>高级设置–>启用TFTP服务点击启用
6.配置DHCP服务器
当然,如果你的DHCP服务器支持设置next-server(比如iKuai),你也可以不使用群晖的DHCP,而使用你原来的DHCP,以免对网络结构造成影响
将你的DiskStation设置为固定IP,并关闭路由中的DHCP功能
在DiskStation中下载DHCP Server服务
打开DHCP Server套件,选中第一个局域网(就是你想开DHCP服务的局域网),点击编辑
在弹出的窗口中设置DNS后,点击新增子网
按照提示配置DHCP子网,DHCP选项无需改动
在PXE栏目选择你编译生成的ipxe文件,比如ipxe.pxe(需将此文件上传到tftp目录)
7.创建iSCSI磁盘
打开群晖中的SAN Manager插件
跳转到iSCSI栏目,选择新增target,名称可以随意,IQN只要符合IQN规则就可以了,勾选启用CHAP,设置账号密码(最好设置,否则这块虚拟盘可以被局域网的任何用户直接访问。有些博客说设置后无法启动Windows,但是本人测试并无问题,所以建议开启)
下一步选择创建新的LUN(当然你用旧的应该也没问题)
在设置LUN属性中选择存储、容量,并且推荐使用Thin Provisioning模式,方便为磁盘拍快照
8.修改启动脚本
在刚才上传的启动脚本ipxe/boot.ipxe.xfg文件中,修改iscsi和base-url地址
1 | #!ipxe |
修改完成后保存
然后在ipxe/cfg文件夹下创建一个命名规则为mac-[客户机mac地址小写].ipxe.cfg的文件(示例:mac-1c758053da09.ipxe.cfg)
在其中配置你iSCSI的IQN和CHAP认证的账户名密码
1 | #!ipxe |
9.准备Windows安装文件
将下载的Windows镜像解压到U盘,网卡驱动也解压到U盘。备用
10.通过网络启动并安装系统
客户机插上网线,选择网卡引导
不出意外的话,应该会进入一个菜单页面
我们选择第三项,进入64位PE,出现以下图片表示引导成功
进入WindowsPE以后,我们发现这只有一个命令行(因为太懒,只用了Windows最基础的WindowsPE,其他什么都没改)不过不用慌,命令操作也很简单
插入步骤9创建的U盘,并使用dir命令从C:\依次往下测试,直到找到U盘,然后使用cd /d命令切换到U盘目录。然后切换到windows文件夹,运行setup.exe程序(K1)
进入到安装程序后,就按照常规流程安装即可。安装完成后会自动重启,重启到那个菜单页面后,我们再次选择WindowsPE,进入PE来替换驱动
进入PE后,用(K1)方法找到U盘和刚安装的系统盘,输入以下命令替换驱动
1 | # X代表你的U盘、Y代表你的系统盘 |
替换完成后,重启,即可进入Windows
11.完成!
最后,成功安装Windows。且可以进行系统更新。
欢迎各位大佬在评论区指出错误或讨论!