本文所指的远程服务器,是指无法物理接触,没有显示器,也没有键盘的 位于机房中的服务器 。

clip_image001[20]

而网络上的 关于远程安装系统的 文章,大多是关于 给局域网 机器安装操作系统,操作人员 能 物理接触目标计算机,所以实现要相对容易一些 。但是我觉得这只能算是通过网络安装系统,而不能算远程安装 。

综上所述, 本文的核心就是:无法物理接触服务器情况下,如何远程给它安装操作系统 (windows 和 Linux  ,在本文的其它文章中也会讲解远程通过 vnc 安装 Linux) ?

服务器无法物理接触,只能通过网络远程管理,这是很多互联网公司服务器部署的特点, 如果能在不需要物理接触服务器情况下,实现远程安装操作系统, 岂不快哉?。

在以下的内容中,我们将要安装操作系统的机器称之为目标机器,而提供安装程序镜像,dhcp, tftp 服务的机器称之为 安装源服务器 ,   考虑真实的网络拓扑,应该在机房的某一台服务器上配置安装源,而我们又是通过 Internet 连接登录到安装源服务器上,来进行后续的操作。

安装windows 可以采用 windows 2003 自带的远程安装服务(在 sp2 中称为 windows 部署服务),也可以使用 pxelinux+tftpd32+binlsrv 安装,但是使用远程安装服务,需要在服务器上安装域控制器, dhcp, tftp 服务等等,配置繁琐且实施效率较低,故放弃之。

本文的安装使用pxelinux+binlsrv+tftpd32 方式安装,配置非常简单,安装源服务器甚至是 windows XP 也通用,优势明显。我们也可以使用它通过 windows 服务器安装 Linux 。

这几个文件的体积非常小,无须安装即可使用,如有困难,可联系作者以取得帮助。信箱是 zhangxugg@163.com 。

基本安装思路如下:

1. Windows安装过程中,自动加载 SCSI 磁盘驱动,无须按 F6,  这是相当重要的,否则安装过程中无法识别出 SCSI 磁盘。如何制作集成 SCSI 通用驱动的安装源是成功安装的前提。对此请参阅相关文章: http://blog.beibei.in/post/SATA_windows_setup.htm
2.  安装完成后,windows 自动登录,并自动安装好网卡驱动, windows 的从 dhcp 服务器得到 IP 。
3.  管理员通过IPC 或 DamWare 软件 / 远程桌面等方式连接到目标机器,进行初化配置。

本文就是使用以上方法,成功在Dell PowerEdge R610/R710 服务器上成功安装 windows 2003 。

我认为,在操作系统安装过程中,最为重要的是给磁盘分区,  目前有两种可行方式 :
分区过程中,手工分区(需要有远程控制卡,R610/R710 均支持)

自动分区,没有任何人工参与(但整个磁盘会被重新格式化为一个分区)

如果服务器没有控制卡,则只能选择后者实现无人参与安装,  我当时的想法是在文本安装阶段,出现分区时界面时,同时启动一个 VNC Server (因为在这个阶段,客户端的 windows 已经通过 binlsrv 加载了网卡驱动,并已经支持 TCP/IP )等待客户端连接并控制, 这样控制端就可以通过 VNC 控制客户机完成手工分区。

但是如何在文本模式下启动指定的后台程序?我至今还没有解决办法, 如果您有类似的解决思路或方案,请一定告诉我,甚是感谢。 或是了解软件设计的朋友,能否对windows 安装程序进行改造,集成 VNC Server ? 当然,这个思路也是我从 Linux 可以使用 VNC 远程安装的思路得来。 如果 windows 的安装过程也可以实现 VNC 控制,那么将大大增强安装过程的可控性。

当然,如果服务器有远程控制卡,那完全可以实现手动分区。

本文以Dell PowerEdge R610/R710 服务器为例,描述了在无法物理接触服务器情况下,实现远程自动安装 windows 2003 。

远程控制卡的设置,请参照http://zhangxugg-163-com.iteye.com/blog/838682
所使用的工具, 我都已经准备好并提供下载,如下载链接失效,请联系作者信箱 zhangxugg@163.com  索取。

原文地址是 http://zhangxugg-163-com.iteye.com/admin/blogs/846589

一、 搭建安装源服务器
这部分工作包括TFTP , DHCP , windows 安装源建立, windows 匿名共享,准备客户机网卡驱动文件(一般为 .sys 文件)
将我提供的安装文件解压缩到某个目录,如D:\OS\RIS,  目录结构如下:

clip_image002[26]

主要文件说明:
tftpd32.exe  此程序提供 dhcp, tftp 服务,以供 pxe 客户端正常启动
winnt.sif     windows的无人值守应答文件

Binlsrv.exe   binl服务器程序

Nics.exe      binl数据库文件

pxelinux.cfg   启动菜单配置目录

2003          windows 2003安装文件目录

2003\$OEM$   保存自动安装的网卡驱动
2003\I386      windows 2003安装文件,对应安装光盘中的 I386

1. 部署安装源
建立目录 D:\OS\RIS\2003\i386,  将 windows 2003 安装盘中 i386 目录下的所有文件,全部复制到 D:\OS\RIS\2003\i386 目录中。
然后使用driverpacks 给 D:\OS\RIS\2003\i386 安装源集成 SCSI 驱动(请参阅 http://blog.beibei.in/post/SATA_windows_setup.htm ),制作完毕后,请用我提供的文件 2003\i386\preSetup.cmd,  替换你的 I386\preSetup.cmd 。

driverpacks 生成的 OEM 目录(与 I386 同级)的所有文件都拷贝到D:\OS\RIS\ 2003_DPB\$OEM$\$1\drivers 这个文件夹里边,driverpacks 生成的 OEM 目录里边放了所有的驱动补丁包以及打包工具,拷贝到以上文件夹后安装过程就像用driverpacks制作的光盘镜像安装一样了,自动把所有驱动在安装过程中安装上。这样就完美了。

$OEM$\$1中的内容,会被复制到系统盘根目录下

$OEM$\$$ 中的内容会被复制到 windows 根目录下(一般为 c:\windows\ )

所以,我将常用软件(如winrar )放到 $OEM$\$1\tools,  如果系统安装在 C 盘,当系统安装完成后, C:\tools\ 下即可找到需要安装的软件。

而$OEM$\$1\tools\RunOnce.reg  是我针对 windows 2003 作的一个初始设置,包括:
启用远程桌面,禁止匿名共享,禁用关闭事件跟踪程序,禁用错误报告

您可以根据自己需要进行修改。

2.  收集客户机网卡驱动

找一台与客户机网卡相同的机器(后面称之为参考机器),手工提取生产商ID ,产品 ID ,驱动文件。在参考机器上执行:
我的电脑 右键菜单-> 管理 -> 设备管理器 -> 网络适配器 -> 选择相应网卡并双击,并选择详细信息选项卡,如下图:

clip_image003[20]

划红线的就是网卡的生产商id,  产品 id ,如上图就分别是 1022 , 2000,  将这两个 id 记录下来,后面有用。

再切换到“驱动程序”选项卡,并点击“驱动程序详细信息”,即可得到当前网卡的驱动文件名

clip_image004[20]

将这个驱动文件复制出来,并放到 D:\OS\RIS\2003\I386 目录下。

再编辑nics.txt 文件,增加一行,按已经存在的范例填写生产商 id,  产品 id,  驱动文件名,描述。如本文的范例是( dell R610/R710 )

14e4 1639 b06nd51x.sys  dell

至此网卡驱动搜索完毕。

为了让windows 在安装后能自动安装好驱动,需要做一些额外必须的工作,让 windows 在首次登录时自动安装网卡驱动。

如果你的服务器是Dell PowerEdge R610/710 ,请到 dell 官方网站下载网卡驱动,得到一个大约 6M 的可执行文件,将这个文件改名为 nic.exe,  并放到 D:\OS\RIS\2003\$OEM$\$1\drivers\ 目录中,并在 winnt.sif 中的 [GuiRunoce] 段中添加
Command10="%SystemDrive%\drivers\nic.exe /s"

这样,windows 安装完成后首次自动登录后,自动静默安装网卡驱动。

3.  在安装源服务器上建立共享目录,这个共享目录应该是 tftp 的根目录,在本例中,就是 D:\OS\RIS ,共享名设置为 ris,  并需要设置 everyone 可读取权限,同时必须开启匿名共享。
Windows 2003开启匿名共享请参阅
http://technet.microsoft.com/zh-cn/library/cc782121%28WS.10%29.aspx
http://www.msserver.com.cn/Server2003/49.html

4.  编辑 winnt.sif
将[data] 段的 OriSrc 的 IP 换成你的安装源服务器的 IP (必须和 dhcp 分配的 IP 位于同一网段)

将[SetupData] 段的 SetupSourceDevice 中的 ip 也换成安装源服务器的 IP

将共享名(本例是ris )换成你自己真实的共享名称。

可根据需要修改[GuiUnattended] 段的 AdminPassword 和 AutoLogonCount ,分别是管理员初始密码和自动登录次数,本例中初始密码是 123456 ,自动 3 次登录。

启动tftpd32.exe  并设置如下(安装源服务器 IP 是 192.168.2.8 )
主界面中设置 Current Directory 为 D:\OS\RIS

Server Interface 设置为 192.168.2.8

点击其下方的settings , GLOBAL 选项卡中选中 TFTP server , DHCP Server 即可
TFTP选项卡的 Base Derictory  设置为 D:\OS\RIS ,仅选中以下高级选项:
Option negotiation
Translate Unix file names
Allow "\" As virtual root

dhcp设置:
ip pool starting address : 192.168.2.100

Size of pool  :  10

Boot file  :  pxelinux.0

Mask     : 255.255.255.0

设置完毕后,重启tftpd32 。

至此,安装源服务器工作完成,接下来进入激动人心的正式安装阶段。

二、 开始安装windows 2003
启动tftpd32, binlsrv (不要关闭它)两个程序

1. 使用 SSH/Telnet 连接到目标机器控制卡上(请参阅 http://zhangxugg-163-com.iteye.com/blog/838682 ),连接后在命令提示符下输入 console com2  即可看到远程机器 BIOS 启动信息(可能需要配合 ipmish.exe 工具控制目标机器的电源,这个工具我已经保存到 2003\$OEM\tools 目录下)。设置从网卡启动,随后即可出现熟悉的 windows 文本模式安装界面

2. 当提示“ setup is starting windows ...'  之后, telnet/SSH 客户端显示可能空白,这是因为 windows 网络功能启用时的图形界面影响所致, 断开 telnet/SSH ,重新连接即可。

3.  当使用 telnet/ssh 重新连接后,即可出现分区界面,对中文 windows ,可能是乱码,但这并不影响正常安装,凭经验和感觉操作即可,另一个可选方案是使用 putty 连接,并设置编码为 utf-8 就可以正常显示。

分区完成,windows 复制文件并重启,这时一定要设置从磁盘优先启动,后期的图形界面,是全自动的,不需要手工参与。

等待大约半小时,即可安装完成,如果不出意外,你就可以使用远程桌面客户端连接它, 怎么得知已经安装好系统客户端的IP ?   这个可以在 tftpd32 主界面的 dhcp server 选项卡中查看到。

至此,本教程告一段落,总结一下,有几个要点:
1. 安装源必须集成 SCSI 驱动,这个可以使用 DriverPacks 工具完成
2. 服务器最好要有远程控制卡
3. 安装源服务器必须开启匿名共享
4. 修改 winnt.sif 以达到自动安装网卡驱动的目的

但是如果目标机器没有远程控制卡,怎么办?折衷的方案就是让windows 自动分区(整个磁盘将会格式化为一个分区),修改 winnt.sif,  将 [data] 段的 AutoPartition 设置为 1, [RemoteINstall] 段的 Repartion 设置为 Yes 即可无须手工分区,但是在重装前一定要注意备份数据。

我整理好的程序包下载地址:
http://zhangxugg-163-com.iteye.com/admin/blogs/846589

**实践心得**

心得:

1. E:\OS\RIS\目录下使用driverpacks制作的系统一定要记得把OEM目录下的东西放到E:\OS\RIS\2003_DPB\ $OEM$\$1\drivers 这个文件夹里边,这样安装过程像用driverpacks制作的光盘镜像安装一样了,自动把所有驱动在安装过程中安装上。

2. E:\OS\RIS\目录下使用 nLite制作的系统来安装相对来说更简单也更干净些,这里只需按照教程中所说的将I386文件夹拷贝到指定的目录下就OK了,剩下的就是修改winnt.sif文件修改系统光盘文件的路径。但是实践中发现有个缺点,那就是使用这种办法再安装完毕之后没法自动登录系统中,虽然winnt.Sif中已经设置了自动登录3次。由于没法自动登陆系统,所以没法打开远程桌面,只能自动获得IP地址,能ping通,没法远程桌面。只有手动本地登录一次之后就可以了。所以这个镜像不适合远程异地安装系统。

3. 使用driverpacks和nLite这两个软件做成的系统再加上这种安装方法,已经可以在实际的工作大显身手了,并且本人觉得已经很完美了,以后可以在实际的工作过程中再将这种安装方法逐步改进。这里再提及一点,就是通过这里发现了一个解决windows远程安装部署找不到客户机网卡驱动的方法,不知道能用不?可以去尝试一下,就是使用Binlsrv.exe   binl服务器程序 和Nics.exe      binl数据库文件 这两个文件的来加载网卡驱动。

4. 请用我提供的文件 2003\i386\preSetup.cmd, 替换你的 I386\preSetup.cmd 。 这个很重要,因为心得1中提到了要把所有的DPB驱动补丁报放在E:\OS\RIS\2003_DPB\ $OEM$\$1\drivers 这个文件夹里边,这个文件是关系到这个安装过程能否正确找到这些驱动补丁并安装的主要文件。因为用driverpacksI386文件夹直接打驱动程序会生成一个想同的文件,为了适应教程的安装目录为E:\OS\RIS\2003_DPB\ $OEM$\$1\drivers 这里就必须要把这个文件用之前I386文件夹里预留的那个文件替代掉。所以在这里我想强调几点:1 driverpacks打驱动补丁包的时候,一定采取先在RIS安装目录外制作好相应系统文件,然后在将这个系统文件的I386文件夹里边的内容复制到E:\OS\RIS\2003_DPB \i386文件夹下,复制过程中提示是否替换preSetup.cmd这个文件时,选否,不替换。这样就减少犯错的概率。再把OEM文件下的所有文件拷贝到E:\OS\RIS\2003_DPB\ $OEM$\$1\drivers 中。同心得12 尽量不要先将要安装系统的I386文件夹里的内容先拷贝到E:\OS\RIS\2003_DPB \i386下然后再driverpacksI386文件夹直接打驱动程序,这样就会把preSetup.cmd文件给替换掉,但是自己不会察觉,只有在安装系统的过程发现不对,其实如果不更改的话,也可以正常安装,只需将生成的oem文件夹移动到E:\OS\RIS\2003_DPB\ $OEM$\$1\下边,这样就可以解决问题了。

5. 遇到tftpd32 在按照教程配置好后,但是取无法使用的情况,这里要记住一定是你的防火墙或者是杀毒软件等安全软件搞的鬼,要相信tftpd32这个小东西很是好用,只要是配置好了那些设置绝对不会出现不好用的情况。

6. 本方法无法用来安装windows2003x64系统。只有另寻RIS方法来通过pxe来安装。

clip_image002[28]

7:共享打开不要开启的两个服务,services.msc-把computer browser 和server两个服务打开才行。

8:经过验证完全采用纯手动集成raid等驱动的windows2003,稍微修改一下就可以使用这种方法来安装系统了。这种方法只要掌握了之后很灵活也很快捷。无论采用nlite还是DPB做集成的系统,在实际安装过程中总能发现有些不完美的,没法把raid驱动集成到其中的,可以采用这种方法来解决,也算是对这个 整个方法的一个补充吧。