一、問題提出
硬碟越做越大,然我喜歡讓我憂。10年前就遇到過在586電腦bios不認識超過8.4g容量硬碟的問題,以及windows nt作業系統不認大硬碟(容量超過8.4g)的問題,對於linux 通過lilo啟動的時候也不能突破硬碟8.4g容量的限制。
原因主要是這樣,過去的bios使用的是8位定址方式編號從0到7,故他表示的範圍是0-255之間變化,硬碟容量大小的計算方法是:512x磁頭數x柱面數x每磁軌扇區數,每個扇區的大小是512位元組,所以最大定址範圍是: (1024 * 255 * 63 * 512/1024/1024)=8.4g 。
目前的電腦主機板bios普遍採用48位定址,早已解決了137g硬碟的限制,最近我們機房伺服器公升級更換批舊伺服器,需要把unix系統更換到新機器上,機房到了一批新dell optiplesgx755 pc,配置有120g硬碟,用作unix server,作業系統為sco unix open server 5.0.6。
先按預設引數在其上安裝unix,安裝完畢後發現,進入unix後只能找到8g的硬碟空間。因為這批機器是專門配置為在unix下工作的,剩下約112g無法利用,硬碟的利用率只有7%,資源浪費極大。我們就開始做實驗繼續嘗試不同的方法解決問題。
二、一組實驗結果
為了攻克這一課題,我們用代替法反覆實驗,在hp,ibm,多款120g硬碟的pc上,採用了不sco 提供的大容量硬碟安裝模式,在biosgeom指定引數安裝sco openserver 5.0.6,發現下列情況:
(a)在ibm、hp多款pc上安裝unix等正常引導,但發安裝os的硬碟,拆到dell機器上,卻不能正常引導,開機顯示「no os";
(b)在dell pc上安裝120g的unix,改用大硬碟安裝引數時,不能正常引導,開機顯示「no os」,使用預設方式只能認到8g磁碟空間,浪費極大。所以我認為,dell optiplex gx755 pc 應該可以支援unix,否則8g的unix也不能用。
三、分析原因
根據上述情況,我認為關鍵問題出在硬碟的主引導扇區(位於整個硬碟的0磁軌0柱面1扇區)上,再深入分析一下,硬碟的主引導扇區的組成為主引導記錄(1beh byte)+分割槽表(40h byte)+結束標誌(2h byte)。
unix系統的安裝程式會把硬碟引數寫入主引導記錄:第一次安裝unix時,由於原硬碟上的主引導記錄不是unix格式,安裝程式會想硬碟寫入unix格式的主引導記錄;以後用預設引數重灌unix;如果原有主引導記錄已經是unix格式,則安裝程式不再修改主引導記錄;如果採用biosgeom指定引數安裝,unix的安裝程式將重寫主引導記錄。
預設安裝unix時,安裝程式識別硬碟最多有1024個cylinder,當硬碟實際cylinder數量小於1024,安裝程式在主引導記錄寫入實際的cylinder,head,sectors數(磁碟大小=cylinders x heads x sectors per track x 512);當大於1024時,安裝程式在主引導記錄中標記硬碟的cylinder數為1024,連同head,sectors數一起寫到
硬碟的主引導記錄,這些引數表示硬碟的總容量大小,而unix分割槽大小則在分割槽表中定義。在unix引導時系統顯示的cylinder,head,sectors數就是從主引導記錄中讀取的。dell p c引導unix時,如果主引導記錄中的cylinder數超過1024,將導致bios 引導程式無法找到作業系統,而顯示「no os"。
四、解決方法
現在市面上的硬碟的硬碟控制器內部安裝了乙個位址翻譯器,早已突破了1024柱面的限制,但我們在安裝系統的時候還是要注意,一定要在bios中將硬碟設定成lba模式。下面我們解決問題的思路是這樣的,可以假設在安裝了120g的unix的硬碟上,主引導記錄換成能正常引導8g的unix硬碟的主引導記錄,引導系統時,應該可以找到作業系統,只要機器能夠引導,unix就能夠找到的空間由分割槽表確定。真正有價值的東西不會輕易退出歷史的舞台,debug就是這樣的經典作品之一,但到了關鍵時刻還得請他出馬。
操作步驟:
(a)安裝一台可以正常引導8g unix的dell pc;
(c)在安裝8g unix的dell pc上用軟盤引導,進入debug,提取硬碟的主引導記錄,儲存在u盤上。
-a 100
cs:0100 mov ax 201
cs:0103 mov bx,200
cs:0106 mov cx,1
cs:0109 mov dx,80
cs:010c int 13
cs:010e int 20
cs:0110
-g=100
-rcx,
:1be
-n a:uboot.8g
-w 200
writing 1be bytes
-q(d)重新安裝unix系統,在出現的boot:後面輸入defbootstr biosgeom=(15665,255,63)安裝過程中,選擇把整個硬碟給unix系統。上述的15665,255,63分別表示為硬碟的c ylinders數、heads數、sectors-per-track數,head=255:表示lba模式。
(e)再次用u盤引導安裝了120g unix的pc,用步驟三中提取的主引導記錄替換現有的主引導記錄。
-a 100
cs:0100 mov ax 201
cs:0103 mov bx,200
cs:0106 mov cx,1
cs:0109 mov dx,80
cs:010c int 13
cs:010e int 20
cs:0110
-g=100
-n a:uboot.8g
-l 200
cs:0100 mov ax,301
cs:0103
-g=100q
經過這樣處理後,dell gx755 pc 能正常引導120g unix
五、結束語
(a).系統引導時,顯示的柱面數為1024,實驗表明,不影響使用;
(b).進入unix系統,用df -v命令檢視硬碟空間為110g,屬於正常現象,硬碟的格式化容量比標稱容量小;另外還可以用用dkinit /dev/rhd00(或rhd01)看到系統使用了所有的柱面資訊。 這裡hd00代表整個物理硬碟hd01代表第乙個分割槽,在unix系統裡硬碟是字元裝置所以檔名以」r」開頭。
(c).按這種方法安裝unix,主引導扇區只要一次提取,可多次使用。是個成熟穩定的解決方案;
(d).另外對於硬碟引數的獲取一可以把磁碟拆下來看,還可以直接用工具軟體如diskman 、powermax來測出其值。
突破極限 解決大硬碟上安裝Unix新思路
一 問題提出 硬碟越做越大,然我喜歡讓我憂。10年前就遇到過在586電腦bios不認識超過8.4g容量硬碟的問題,以及windows nt作業系統不認大硬碟 容量超過8.4g 的問題,對於linux 通過lilo啟動的時候也不能突破硬碟8.4g容量的限制。原因主要是這樣,過去的bios使用的是8位定...
突破極限 解決大硬碟上安裝Unix新思路
一 問題提出 硬碟越做越大,然我喜歡讓我憂。10年前就遇到過在586電腦bios不認識超過8.4g容量硬碟的問題,以及windows nt作業系統不認大硬碟 容量超過8.4g 的問題,對於linux 通過lilo啟動的時候也不能突破硬碟8.4g容量的限制。原因主要是這樣,過去的bios使用的是8位定...
在硬碟上安裝Knoppix
knoppix 通用的解決方案 knoppix是試驗linux最好的方式。它允許你安裝並且執行乙個功能完整的linux而不用在你的硬碟上寫下乙個位元組。knoppix直接從cd啟動並且執行linux系統,甚至在pc上都不需要硬碟的支援。knoppix可以為你提供所有linux的重要功能,並且可以提供...