2012年2月13日 星期一

實現 Windows 2008 R2 與 MS-DOS 8.0 在 iSCSI 上雙重啓動:硬盤必須分配所有空間!

為什麽要用 DOS?其實理由還是很多的,例如:
- 運行 megaoem
- 更新主板 BIOS
- 更新/修改顯卡 BIOS
- 更新硬盤 BIOS
- 更新 RAID Controller BIOS
...

一直以來,我都是用一個額外的 USB 槃放置 DOS 的啓動文件然後進行以上的動作。不過有時候還是覺得不方便,主要是主板 BIOS 有點古怪,從 USB 啓動需要進去 BIOS 調整(把 USB 認作 HDD 了 -_-),所以如果可以 Dual Boot 直接在啓動的時候有一個選擇那就最好。

DOS 肯定不在第一個分區,因爲第一個分區肯定是 Windows 7/2008 的 Bootmgr + 安裝源(不需要 DVD 或者 USB 槃,安裝文件就在第一個分區裏面!)。而使用的 DOS 版本是 8.0,起碼支持 FAT32。我的基本想法就是:

- 創建一個 VHD,在 Hyper-V 裏面調試好,可以進行 Dual Boot
- 把 VHD 挂在 iSCSI 上面,然後使用一台物理電腦通過 gPXE 嘗試啓動
- 把 VHD 用 Ghost 鏡像到物理硬盤,然後本機啓動(未測試)

可以想象,其實第二步(iSCSI)是最挑剔的,如果通過的話,最後一步基本沒難度。

好吧,實際的情況就是,VHD 准備好了,C 槃(第一個分區)是 Windows 啓動+安裝源,D 槃(第二個分區)是 DOS,用 DOS 下面的 Debug 命令創建 BOOTSECT.DOS,然后用 BCDEDIT 指向該文件,在 VM 裏面,DOS 啓動成功。

然而,儅把 VHD 挂載在 iSCSI 上,卻出現了極端詭異的情況:


Starting MS-DOS...


Missing Command Interpreter
Type the name of the Command Interpreter (e.g., C:\WINDOWS\COMMAND.COM)
A>


絕對的詭異~~VM 沒問題,Command.com 存在,然而卻找不到。
一開始以爲是硬盤的格式大小之類,嘗試幾個不同的簇大小,分區大小,不過還是一樣。

最後一發狠,把硬盤剩下的空間全部分配給 DOS 的分區,卻奇跡般的成了!

經過幾番測試終于判定 DOS 只會在這種情況下 Dual Boot:
- 硬盤不是動態硬盤
- 硬盤使用 MBR 分區
- DOS 槃必須是 Primary 分區,不過可以不是第一個
- DOS 分區必須在硬盤的前 127GB 以内(FAT32的說)
- 硬盤必須被使用完全,沒有未分配的空間!

現在是,C 槃 5GB (NTFS, 有 Windows 2008 R2 Setup),D 槃 100MB (FAT32 DOS),E 槃 (NTFS) 22GB 不過是空的,用來預留給 Windows。如果不分配 E 槃,DOS 就啓動不了~!

終于可以實現 Self-contained 鏡像,加個 GRUB 甚至可以直接挂載 ISO,不需要再用光驅,軟驅和 USB 了!

Incompatibilities and Compatibilities

NOTE: This article will be updated in the future when more compatibilities / incompatibilities are discovered.  Incompatibilities   12-Feb-...