PXE+pxelinux+binlsrv+tftpd32遠程安裝windows 2003及心得

本文所指的遠程服務器,是指無法物理接觸,沒有顯示器,也沒有鍵盤的 位於機房中的服務器 。

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 。

這幾個文件的體積非常小,無須安裝即可使用,如有困難,可聯繫作者以取得幫助。信箱是 [email protected]

基本安裝思路如下:

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
所使用的工具, 我都已經準備好並提供下載,如下載鏈接失效,請聯繫作者信箱 [email protected]  索取。

原文地址是 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驅動集成到其中的,可以採用這種方法來解決,也算是對這個 整個方法的一個補充吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章