用OS Loader實現多重開機

來源:互聯網
上載者:User

實現多重開機的工具很多,如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盤根目錄下。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.