搭建基于 OpenWrt/gPXE/iSCSI 的 Windows 无盘工作站

本文要介绍的是如何在 OpenWrt 平台上面搭建无盘工作站服务器以及 Windows 的 iSCSI 部署。
当然,由于 OpenWrt 也可以算得上一种 Linux 发行版了,所以本文所介绍的一些方法,在其它 Linux 发行版上面仍有一定的参考价值。

整个过程大概分为以下几步:

  • 给 OpenWrt 添加 iSCSI Target 支持
  • 创建并配置 iSCSI Target
  • 获取 gPXE 并配置 DHCP 及 TFTP 服务
  • 通过 iSCSI 部署 Windows
  • 测试

给 OpenWrt 添加 iSCSI Target 支持

到写作本文为止,貌似 OpenWrt 官方还没有添加 iSCSI Target 支持相关的软件包,所以我们需要自力更生。然而幸运的是,已经有前人做过了类似的事情,我们只要采取“拿来主义”即可。

相关资源:
https://github.com/tobiaswaldvogel/openwrt-addpack/tree/master/scst
https://github.com/tobiaswaldvogel/openwrt-addpack/tree/master/luci-app-scst
上面分别是在 OpenWrt 的内核层面实现的 iSCSI Target 支持及其 Luci 配置界面,读者需要自行获取这两部分的源码然后进行交叉编译,这也是我最终选用的方案,下文关于 iSCSI 的内容均基于此。

另外还有一个在用户空间实现的方案,详情见:
https://dev.openwrt.org/ticket/8798
http://patchwork.openwrt.org/patch/2597

无论上面哪种方案,就目前而言都需要读者自行编译,但是如何交叉编译 OpenWrt 所需的软件包不在本文的讨论范围。

采用第一种方案,进行交叉编译后,会得到以下几个软件包:

  • kmod-iscsi-scst
  • kmod-scst
  • kmod-scst-vdisk
  • scst
  • luci-app-scst

把它们安装到 OpenWrt,这样第一步添加 iSCSI Target 支持就算完成了。

创建并配置 iSCSI Target

要创建 iSCSI Target 需要路由器有足够大的存储空间,最好是在路由器上挂载移动硬盘,如果是U盘则最小需要 16G 的 U 盘,而且 U 盘的性能可能会差很多。
在进入下面的配置之前,我们需要创建一个固定大小的虚拟磁盘文件,你可以将移动硬盘连接到电脑上进行创建( Windows 下创建一个 VHD 虚拟磁盘文件即可,至于要不要初始化该虚拟磁盘,则需要根据下面的操作决定,所以我建议先不要初始化),也可以直接在路由器上面创建,直接在路由器上面创建需要使用 dd 命令,假设你的移动硬盘被挂载到 /mnt/sda1 ,则可以使用下面的命令创建一个 15G 的文件:

mkdir /mnt/sda1/iscsi
dd if=/dev/zero of=/mnt/sda1/iscsi/disk1.vhd bs=1M count=15360

创建文件的过程需要较长时间,请耐心等待,同时你可以另开一个终端登录路由器,并使用

du -h /mnt/sda1/iscsi/disk1.vhd

查看文件大小。

虚拟磁盘文件创建完成后,进入 iSCSI Target 的 Web 管理界面(服务->iSCSI Target)。

先是“Global settings”(全局设置),里面只有一个“System ID”,就是 iSCSI Qualified Name(即 ipn)。
默认的设置是“iqn.2012-12.org.openwrt”,建议不要更改,至于其命名规范,可参考rfc3721中相关内容。

然后是“Devices”(设备),单击添加,添加一个 Device,共享名随意(如disk1),类型只有一个选项——“Image file”,“目录”即虚拟磁盘文件的路径(如/mnt/sda1/iscsi/disk1.vh)。
紧接着是“Tagets”,同样单击添加,共享名随意(如 iscsiboot),“Lun”则需填写上面添加的 Device 的共享名(如 disk1),设置好后别忘了点击保存&应用

上面的设置,也可以通过编辑配置文件(/etc/config/scst)完成:

config global
    option id 'iqn.2012-12.org.openwrt'

config target
    option name 'iscsiboot'
    list lun 'disk1'

config device
    option type 'file'
    option blocksize '512'
    option name 'disk1'
    option path '/mnt/sda1/iscsi/disk1.vhd'

最后,需要开启scst服务:

/etc/init.d/scst enable
/etc/init.d/scst start

如果start失败的话,可能需要重启路由器:

reboot

未完待续……

标签: OpenWrt, Linux, Windows, PXE, iSCSI

已有 4 条评论

  1. mwang mwang

    续完行不行

    1. 续不了啊,这个好几年前的坑了。

  2. hello 好像很多年前来过你的博客

    1. 的确好多年了。

添加新评论