前言
實現多重啟始的工具很多,如System Commander,bootstar, Linux的lilo,和WindowsNT自帶的OS Loader等等。其原理不外乎兩種:一是修改MBR(Master Boot Record),在MBR的最後用jmp指令跳到自己的代碼上來,從而控制引導過程;另一種方法是修改主分區裡第一個扇區的引導代碼,來實現多重啟始。
MBR(即主引導記錄),指的是硬碟的第0個柱面(cylinder)的第0磁道(track)的第0扇區(sector)。主分區,對於dos,windows等使用fat文件系統的操作系統來說,就是C碟; 在Linux下,則是指root文件系統所在的分區。
System Commander和lilo用的是修改MBR的方法;OS Loader則用後一種方法。修改MBR會造成嚴重的相容問題,可能被某些殺毒軟體誤認為是病毒殺掉。我不喜歡亂改MBR,所以一般用OS Loader。下面以linux為例說說怎麼利用OS Loader來實現多重啟始:
一、安裝OS Loader:假如想在硬碟上同時裝上Windows98,windowsNT和Redhat Linux,你可以先裝Windows98,然後安裝WindowsNT。WindowsNT裝完以後,OS Loader也就自動裝上了。如果這個順序有錯誤,你需要用到附件裡的程序和指令碼,它可以為你安裝上OS Loader,這時你的系統其實已經可以進行多重啟始了。
二、獲取各種OS的引導文件:在OS Loader再加一些操作系統,需要在裝完WindowsNT以後想辦法把其它OS的引導代碼讀出來,存到文件裡去,也就是要把主分區第一扇區的512字元讀出來。在DOS下,這可以用debug或是norton diskedit來做,也可以自己寫一個小程序來實現。
OS Loader安裝時所必須的文件如下:
=
= Ntldr - 隱藏唯讀檔 - 載入操作系統
= Boot.ini - 隱藏系統檔案 - 通常在x86電腦上建立操作系統載入啟動表單
= Bootsect.dos - 隱藏文件 - 在另一個操作系統被選擇是被Ntldr載入 =
= Ntdetect.com - 隱藏唯讀檔 - 通常檢查有效硬體並建立硬體列表
= Ntbootdd.sys - 只用在從SCSI硬碟啟動的系統上
=
其實裝完OS Loader以後系統就已經有了一個bootsect.dos,
這個就是win9x的引導文件。下面用debug的方法通常不會用到。
debug
-R cx
cx 0000
200//設置讀取長度CX為512字元
-L 100 2 0 1
//讀取主啟始扇區至記憶體ds:100處
-N bootsect.w98 //假設你是在Win98下,
將啟始扇區文件存為bootsect.w98
-W 100//寫bootsect.w98文件
-Q//退出Debug程序
Linux裡有一個現成的實用程序可以用來直接讀寫扇區。
安裝Linux有兩點要注意的地方。
第一:在安裝lilo的時候,一定不要把lilo裝到MBR裡去,因為現在是想用OS Loader來做多重啟始。應該把lilo裝到主分區的第一扇區裡(注意,這裡的主分區指的不是C碟,而是安裝Linux的那個分區)。
第二:應該做一張啟動軟碟(bootdisk),以便你能夠進入到Linux裡。因為現在lilo沒有裝在MBR裡,暫時還不能直接從硬碟引導到Linux。在Linux中則按下面方法可得到Linux的啟始扇區文件:
以Red Hat Linux 6.0為例:
#dd if=/dev/hda3 of=bootsect.lnx bs=512 count=1
這裡假設你Red Hat Linux LILO安裝在/hda3上,啟始扇區文件存為bootsect.lnx。
以FreeBSD3.2為例:
#dd if=/dev/rwd02 of=bootsect.bsd bs=512 count=1
這裡假設你FreeBSD安裝在第二個基本分區上,啟始扇區文件存為bootsect.bsd。
將Linux啟始扇區文件存入DOS分區
按上述方法獲取的Linux啟始扇區文件會存放在Linux分區上,NT OS Loader無法直接讀取,需要將它儲存在NT OS Loader所在的分區上,一般是C碟。
以Red Hat Linux 6.0為例:
#mount -t msdos /dev/hda1 /mnt
#cp bootsect.lnx /mnt/bootsect.lnx
以FreeBSD3.2為例:
#mount -t msdos /dev/wd0s1 /mnt
#cp bootsect.bsd /mnt/bootsect.bsd
三、修改boot.ini文件
開啟Boot.ini文件,加入你想要引導的操作系統引導記錄,即可大功告成。如:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
[operating systems]
C:\bootsect.w98="Microsoft Windows 98"
C:\bootsect.lux="Red Hat Linux 6.0"
C:\bootsect.bsd="FreeBSD Release 3.2"
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect
四、附件:
本文件為DOS下的RAR自解文件,下載後改名為.exe,可以在dos或windows下自解壓到c:\os目錄下(其中install指令碼基於c:\os目錄新增),大家可根據自已的實際情況修改。
本文件只提供了新增OS Loader表單的功能,若要啟動其它OS,再次強調:請注意不要將其安裝到MBR,只將它的引導模塊安裝到自身份區。,然後將其第一個扇區(512字元)提取來存成文件,加入boot.ini即可。
MS的osloader比較有趣,先出的版本不能引導後出的os,
所以.net server裡面帶的os loader最好用
可以引導MS以前的所有OS...
另外如果先裝xp,後裝2k, 造成xp不能啟動
只要把xp安裝碟的\i386\ntdetect.com和ntldr放到C碟即可
其他類推.
2K的winnt.exe,用於寫啟始區,ntdetect.com和ntldr正是XP的,.net沒有正式版,但我想XP的文件應該可以引導.NET,結果不行,我試過..
net的 基於rc2 en版本 ,中文表單還要一個bootfont.bin,
補充一些工具&資料給大家 :
1.工具:
補充一個自動修改boot.ini的小工具,這下不用手工去寫那個512K的引導文件了!
最新的bootpart 2.5版本。
BOOTPART 2.50 : Boot Partitition for
Windows NT/2000/XP. New : support LBA large disk
Easy tool to add a partition to the
Windows NT multi boot menu (for example,
OS/2 boot manager or Linux partition).
NEW : Easy addition of Dos6.22 and Win95 in WinNT
menu, repair the WinNT boot sector.
Small freeware from G. Vollant (WinImage).
Web :
http://www.winimage.com/bootpart.htm
該版本全面支持win2k/xp,完善支持Linux,突破大硬碟限制,可以在xp的命令提示字元視窗下流暢執行。強烈推薦。
使用方法詳解:(可以打bootpart /?看幫助)
bootpart :列出各分區的使用情況,並用數字標明分區號。
bootpart [分區號] [檔案名] :將操作系統所在分區的啟動信息儲存為一個文件,放在當前目錄中。若加再上一個操作系統的名稱則將啟動項增加boot.ini的啟動表單中,再加LBA參數,則突破lilo的大硬碟限制。這點對恢復linux的啟動最有用。例:bootpart 8 LBA bootsect.lnx Redhat Linux 意思為:將linux所在分區(本人的為8)的啟動信息儲存為bootsect.lnx文件,並加入到多啟動表單中,顯示名稱為「Redhat Linux」。
bootpart List :列出你多啟動表單的項目。
bootpart dos622 boot:C: 重建dos6.22的啟動信息。(若你不懂得如何安裝dos6.22系統,你只要將dos6.22的系統檔案複製到C碟中,執行該命令就等於安裝了。)
bootpart win95 boot:C: 重建win95或win98的啟動信息。
bootpart winnt boot:C: 重建winnt/win2k/xp/net的啟動信息。
呵呵!這回不怕各種系統啟動,資料信息丟失了。
2.考資訊:
http://www.tldp.org/HOWTO/mini/Linux+NT-Loader.html