簡單說就是在一台沒裝哈滴的PC上開啟Windows2003作業系統,iSCSI可以直接想像成一顆SCSI介面的硬碟排線換成網路線,讓你透過網路存取這顆哈滴,這跟網路芳鄰分享出來的東西不一樣,網芳裡看到的是檔案,而iSCSI分享出來的是硬碟,可以Format、磁碟分割或RAID等。
一、準備工作
PC兩部,一部安裝Fedora Core 5,一部安裝好windows 2003並升級SP2。
windows2003+sp2安裝:略。
裝好SP2後,要裝MS iSCSI Initiator,簡單想像成裝Driver就是了,這個MS iSCSI Initiator有兩個版本,一個是一般使用版,一個是Boot Version,我們要用的是Boot Version,到http://connect.miscosoft.com下載,需要註冊,並輸入Invite code:
ms-8RR8-6K43。若你是SP1,則需要再找Hotfix:KB902113 for MS iSCSI。
要下載的是x86的版本,當下取得的是:Initiator-2.06-boot-build3497-x86chk.exe 這個版本。
安裝過程中記得要選取支援iSCSI Boot的選項,其餘使用預設值就好。裝好後,點選"Discovery"標籤,選"Add",輸入iSCSI Target的IP位址,再點"Target"的標籤,應該會看到分享出來的哈滴,點Logon,就連上了,再到"我的電腦"按右鍵選"管理",把這顆哈滴啟動、format一下,成功後,在我的電腦裡就會出現一棵哈滴了,剩下的操作就跟使用本機硬碟一樣。這是測試的部分,用來開機的話這步驟可以省略,把iSCSI initiator裝好就好了。
安裝時需注意kernel-develop套件要裝,編譯的時候用會到,此外還要注意uname -a的核心版本是不是跟kernel source裡的相符,不相符在載入模組的時候極有可能會出現錯誤。
裝好iscsi target後,編輯/etc/ietd.conf
Target iqn.2007-09.freebsd:storage.test
LUN 0 Path=/dev/hdc,Type=fileio
/dev/hdc可以換成/path/to/windows2003.img,製作img的方法稍後詳述。
# service iscsi-target start
如果都OK,那應該就沒什麼問題了!另外必須安裝dhcp server,當diskless client啟動時會需要一些基本的網路組態,以及記錄iSCSI的Target在什麼地方。
編輯/etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.1;
range dynamic-bootp 192.168.1.128 192.168.1.254;
default-lease-time 21600;
max-lease-time 43200;
# 要注意的下面這兩行,這是給gpxe看的。
filename "";
option root-path "iscsi:192.168.1.1::::iqn.2007-09.freebsd:storage.test";
}
做完這些,把2003的哈滴拔下來裝到FC5的機器上,以我的環境,裝置路徑在/dev/hdc。
若要要製作image,用dd這個linux工具
# dd if=/dev/hdc of=/somewhere/to/xxx.img bs=8225280 count=522
8225280跟522這兩個數字請參考下面fdisk -l /dev/hdc的輸出,結果會是一個約4G大小的影像檔。
請注意是/dev/hdc而不是/dev/hdc1,因為我們還要保留MBR。
二、gPXE安裝
至etherboot網站下載套件,解壓縮後會得到gpxe.git目錄,此時要做一些手腳。
#vi src/arch/i386/interface/pcbios/int13.c,在523行附近有一個判斷式
if ( drive->cylinders > 1024 )
drive->cylinders = 1024;
意思是如果Hard Drive的cylinders大於1024就以1024視之,以實做結果來看會有問題,所以必須再改成符合實際運作的數字。
首先先用fdisk -l /dev/hdc取得windows對這顆哈滴的geometry,看bios裡的不準,windows裡的可能會不一樣。
Disk /dev/hdc: 61.4 GB, 61492838400 bytes
255 heads, 63 sectors/track, 7476 cylinders #這才是正確的
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hdc1 * 1 522 4192933+ 7 HPFS/NTFS
所以在剛剛提到523行下面找到 /* Assign drive number 這個註解行,在下面直接指定下列參數:
drive->cylinders = 7476;
drive->heads = 255;
drive->sectors_per_track = 63;
好了之後存檔,回到src目錄裡編譯gpxe.iso
#make bin/gpxe.iso
運氣不錯的話應該可以編譯成功,把gpxe.iso燒成光碟片,拿來當開機光碟,gPXE可以支援iscsi、AoE(ATA Over Ethernet)及http等協定支援開機,一般網卡只支援PXE,無法連接iscsi磁碟。etherboot好像有提供一些方式把這些啟動程式或參數"存到"ROM裡,有興趣的上網參考看看吧!
三、驗收成果
把gPXE光碟片放到那原本裝windows2003的機器中,開機,順利的話應該就會進到windows 2003囉!
四、待解問題
⊙windows driver sid hostname等等資訊,如何客制化?
目前有看到sysprep似乎可以解決這個問題。
⊙windows image如何在iSCSI的環境下多機共用一個image?
目前還沒找solution。
⊙如何不靠cdrom開機?
找塊支援iSCSI的網卡,或BIOS,要不自己燒到ROM裡去吧!
or
用PXE啟動gPXE.iso,但還沒試過,感覺有機會。
五、參考資料
GOOGLE搜尋,族繁不及備載。
六、建議
若要在Client跑Linux,上網有很多方法可以做,功能也OK。若要跑Windows,還是花錢買廠商solution比較快,功能也更完整。
本文出自 51CTO.COM技术博客