2011年8月21日 星期日

windows XP 使用 iscsi 遠端無碟啟動 remote boot

真是驚嘆!!
-----------
1.windows XP 使用 iscsi 遠端無碟啟動 remote boot

2.無硬碟環境啟動Windows XP(使用ISCSI虛擬磁碟)

3.How To: Windows Server / XP / 2000 / 2003 ISCSI Initiator Configuration

4.FreeNAS 8.0 | Storage For Open Source
--------------
最近看到不少同業採用此方法建置網咖,但大都採用對岸的無碟軟體,例如"遙志CCDISK...",但這些原理與Linux中的免費軟體gPXE大同小異,雖然不是甚麼特別的技術,不過還是把DIY建置的方法寫下與大家分享/交流.
建置環境:
(1)FEDORA 9 作業系統, 已建置DHCP/ TFTP以及LVM磁碟系統
(2)使用 iSCSI Enterprise Target 作為iSCSI Server
不再贅述DHCP/Tftp及ISCSI安裝方法,請先行參考安裝文件

原理導論:
一般使用無碟啟動,都是利用主機板內建網卡的PXE ROM來向DHCP Server發出請求,Server會回應IP設定值,並利用TFTP傳回對應的檔案啟動執行,但多為軟碟的影像檔,或其他較小的檔案(約5mb以內),載入後以RAMDISK虛擬執行, 並不能直接虛擬光碟或硬碟,因為用TFTP協定不宜傳輸太大的檔案.
但一些例如Intel的高階網卡,卻可直接在網卡中設定iSCSI的主機來開機,是因為這些網卡有完整的程式碼可將遠端iSCSI磁碟連入後虛擬成單機的一個SCSI裝置,故可以輕易在上面執行XP.
但主機板上的PXE ROM通常都很簡漏,做不到這些高階功能,所有就有一些自由軟體的愛好者,提出了Etherboot/gPXE 方案解決了這個問題.
簡單的說gPXE一樣是用PXE ROM啟動,DHCP Server回應gPXE的原始檔,它會自動將主機板的PXE ROM取代,然後再向DHCP Server再要求一次IP設定,這時我們可以透過DHCP的設定腳本來分析這個要求是否是一般PXE ROM還是gPXE,如過是gPXE就回應給他要登入的iSCSI參數列指令,這樣gPXE的程式碼就會把成功連入的iSCSI磁碟虛擬成一個SCSI裝置,這樣就可以自由的載入Windows XP了.
1.建置iSCSI Target
我們假設你已安裝好 iSCSI Enterprise Target, 首先先建立一個LVM的分割區給XP的影像使用
lvcreate -L 20GB -n BOOTTEST /dev/VG
分割20GB給XP用,BOOTTEST是你命名的XP影像分割區, VG是邏輯磁區群組名稱
用ietadm手動建立target (當然你可以用/etc/ietd.conf來設定,但我喜歡用指令列的方法,比較簡單)
ietadm --op new  --tid=100 --params Name=BOOTTEST
ietadm --op new --tid=100 --lun=0 --params Path=/dev/VG/BOOTTEST,Type=fileio,IOMode=wb
中間tid的數值可自己設定1~999都可以.
這樣iSCSI Target就有一個設備的名稱叫BOOTTEST,這就是我們用來連入ISCSI磁碟的連結點
2.安裝Windows XP
先找一台有硬碟的電腦先安裝好 windows xp 並且更新到最新的 update ,當然這個磁碟分割不能超過我們剛才設定的20GB.
安裝一般正常的 iscsi initiator (微軟)
http://www.microsoft.com/downloads/en/details.aspx?familyid=12cb3c1a-15d6-4585-b385-befd1319f825&displaylang=en

裝好後請加裝  iscsi 的開機(BOOT)支援套件
請參考:http://www.etherboot.org/wiki/sanboot/winnt_iscsi
也就是下載這兩個檔案安裝:
然後再加裝 sanboot driver ,這樣就可用 iscsi 開機
http://www.etherboot.org/wiki/sanboot/winnt_sanbootconf
這是 etherboot 這個專案為了這個開發的設定工具。

這樣這個Windows XP就可以在iSCSI中被正常啟動, 先把它做成GHOST檔吧!
然後要把這個GHOST檔"灌入"這個iSCSI磁碟中
當然要在Windows XP的系統先用iscsi initiator 來連接剛才在iSCSI SERVER作好的BOOTTEST目標
連入後,你只能initiator看到connected訊息,你在"我的電腦"中不會看到有任何新磁碟出現的訊息,因為這時候這顆ISCSI磁碟是"空白的",要在"我的電腦"圖示上按右鍵,選"管理",然後 "本機->存放裝置->磁碟管理",這時你會看到你電腦中所有的磁碟裝置,其中會有一個20GB顯示"未啟始"的磁碟,這就是剛才連入的iSCSI磁碟,起始它並分割一個NTFS的主分割區給它,分配代號並格式化後回到我的電腦就可以看見這顆iSCSI磁碟.
再來我們要如何把剛做好的的ghost檔"灌入"呢?
要用ghost32.exe程式, 這是gosht 11中的檔案,它可以在Windows XP的環境中直接把"非現用系統碟"作GHOST,很好用,可把ghost影像檔直接灌到iscsi碟中;請不要問我要去哪裡找,這是版權軟體,自己上網找或買正版的.
灌入後,iSCSI Server的BOOTTEST目標,就有這台客端完整的XP程式了, 現在可以將客端硬碟接拔掉或關閉.
3.取得gPXE程式碼
http://kernel.org/pub/software/utils/boot/gpxe/gpxe-1.0.1.tar.gz
在linux中解壓後要用gcc編譯成原始碼
cd gpxe-1.0.1
make bin/undionly.kpxe
這樣在 gpxe-1.01/bin資料夾下就有一個undionly.kpxe程式,這就是gPXE原始檔,把它COPY到tftpboot中
cp undionly.kpxe /tftpboot/
4.設定DHCP的啟動腳本
編輯/etc/dhcpd.conf檔
allow booting;
allow bootp;
option broadcast-address 192.168.1.255;
option domain-name "dns.hinet.net";
option domain-name-servers 168.95.1.1;
ddns-update-style none;
           subnet 192.168.1.0 netmask 255.255.255.0 {
           range 192.168.1.10 192.168.1.100;
           option subnet-mask      255.255.255.0;
           option routers          你的主機IP;
           next-server                你的主機IP;
           filename                "pxelinux.0";
           }

           host BOOT01 {
           hardware    ethernet    xx:xx:xx:xx:xx:xx;  #你的網卡MAC位址
           fixed-address           客端IP;
           next-server             你的主機IP;
            if exists user-class and option user-class = "gPXE" {
               filename "";
               option root-path "iscsi:你的iSCSI主機IP::::BOOTTEST";
            } else {
               filename "undionly.kpxe";
            }
           }
這種設定方法就是把特定的MAC位址對應到指定的iSCSI Target連結, 如果不符的網卡,會依正常的PXE去使用syslinux程式來啟動.
改好後,把DHCP SERVER重新啟動, 可以用指令 service dhcpd restart 來達成.
5.現在將無硬碟的客端開機, 如果一切都沒有問題的話,應該可以順利啟動Windows XP.
後面還有一個問題就是,如何使用一個iSCSI母碟,多台客端連入, 事實上更簡單,聰明的人早已想到了...對的,LVM磁碟系統可以做snapshot(快照),你要用母碟作多少個客端都沒問題,每個客端都可以有自己不同的設定,甚至就算網卡/顯卡/主機板有差異也一樣可用! 自己試試看吧!

沒有留言:

張貼留言