實現多重開機的工具很多,如System Commander, 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,所以一般用OS Loader。 下面說說怎麼利用OS Loader來實現多重開機:
舉例來說,我想在硬碟上同時裝上Windows98,windowsNT和Redhat Linux,怎樣才能實現多重開機呢?
你可以先裝Windows98,然後安裝WindowsNT。WindowsNT裝完以後,OS Loader也就自動裝上了。這時你的系統其實已經可以進行多重開機了。
但要想在這個基礎上再加一些作業系統的話,還需要再做一些工作。
如果足夠細心的話,在裝完WindowsNT以後,你會發現在C盤的根目錄下多了一個名叫bootsect.dos的檔案,大小為512位元組, 這是原來Windows98安裝在主要磁碟分割第一個扇區裡的引導代碼。
在安裝WindowsNT的時候,NT先把這個扇區的內容存到一個檔案(即bootsect.dos)裡,然後換上他自己的引導代碼,也就是OS Loader。
在進行多重開機的時候,如果選進入Windows98,OS Loader會把bootsect.dos讀進記憶體然後執行,從而引導到windows98。
在這裡,我們要做的工作很簡單,就是想辦法把OS Loader的代碼讀出來,存到檔案裡去,也就是要把主要磁碟分割第一扇區的512位元組讀出來。在DOS下,這可以用debug來做,也可以自己寫一個小程式來實現。
但是如果裝Linux的話,問題就十分簡單了。Linux裡有一個現成的公用程式可以用來直接讀寫扇區。
安裝Linux有兩點要注意的地方。
第一:在安裝lilo的時候,一定不要把lilo裝到MBR裡去,因為現在是想用OS Loader來做多重開機。應該把lilo裝到主要磁碟分割的第一扇區裡(注意,這裡的主要磁碟分割指的不是C盤,而是安裝Linux的那個分區)。
第二:應該做一張啟動磁碟片(bootdisk),以便你能夠進入到Linux裡。因為現在lilo沒有裝在MBR裡,暫時還不能直接從硬碟引導到Linux。
現在,裝完Linux後,用剛剛做的Linux啟動磁碟片啟動,引導到Linux系統。
假設Linux裝在了第一個硬碟的第六個分區,那麼在提示符下可以這麼敲:
dd if=/dev/hda6 of=bootsect.lnx count=1 斷行符號
這句話的意思是把第一個硬碟第六分區(/dev/hda6)的第一個扇區的資料讀到檔案bootsect.lnx裡。
參數說明:
if:in file(輸入檔案)
of:out file(輸出檔案)
count:讀寫次數
同樣可以把C盤第一扇區的資料讀到檔案bootsect.wss裡:
dd if=/dev/hda1 of=bootsect.wss count=1
這就是OS Loader的引導代碼./dev/hda1就是dos下的C盤。
把這兩個檔案copy到C盤的根目錄(當然也可以在其他地方)下。
再在C盤根目錄下找到boot.ini,除掉唯讀屬性後用文本編輯工具開啟。 在[operating systems]段加上:
C:/bootsect.lnx="Linux"
存檔退出,再把boot.ini的唯讀屬性加上。這樣就實現了用OS Loader引導Linux。
以後再裝別的作業系統時,有可能把OS Loader覆蓋掉,
這時只要再進到Linux裡,使用dd命令:
dd if=/dev/hda1 of=bootsect.new count=1
把新裝作業系統的引導代碼存到bootsect.new裡,然後:
dd if=bootsect.wss of=/dev/hda1 count=1
把OS Loader恢複回去。再在boot.ini裡類似這樣加上一行:
C:/bootsect.new="new system"
就可以引導新裝的作業系統了。
順便提醒一下,每次重新編譯了Linux的核心(kernel), 都應該把lilo再讀出來:
dd if=/dev/hda6 of=bootsect.lnx count=1
再把bootsect.lnx copy到C盤根目錄。否則使用了新核心的Linux很有可能引導失敗。
用OS Loader不是必須要裝WindowsNT,可以直接把bootsect.wss寫到C盤的第一扇區裡, 再把boot.ini, ntldr, Ntdetect.com 拷貝到C盤根目錄下。