作者: Andries Brouwer, jaeb@cwi.nl
譯者: Asd L. Chen, asdchen@ms1.hinet.net
v1.0, 26 June 1996 翻譯日期: 10-13 November 1997
--------------------------------------------------------------------------------
所有有關(guān) disk geometry 及 1024 cylinder 的限制.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
1. 問(wèn)題所在
假如你的磁碟超過(guò) 1024 個(gè)磁簇(cylinders). 還有, 假如你的作業(yè)系統(tǒng)使用基本輸出入系統(tǒng)(BIOS).那麼你會(huì)遇到一個(gè)問(wèn)題, 因?yàn)橐话愦诺敵鋈耄斎胨褂玫摹NT13 BIOS 介面以一個(gè) 10 位元(bit) 的欄位來(lái)操作磁簇, 所以無(wú)法存取第 1024 及之後的磁簇.
幸運(yùn)的是, linux 不使用 BIOS, 所以沒(méi)有問(wèn)題.
話是這麼說(shuō), 但有兩件事例外:
(1) 當(dāng)你在啟動(dòng)系統(tǒng)時(shí), Linux 還沒(méi)開(kāi)始執(zhí)行所以無(wú)法讓你避免這個(gè)問(wèn)題.這對(duì) LILO 以及類似的啟動(dòng)載入程式(boot loaders)有些影響.
(2) 使用磁碟的所有作業(yè)系統(tǒng)必須同意分割區(qū)的位置.換句話說(shuō), 如果你在一顆磁碟上使用 Linux 以及, 例如 DOS, 那麼兩者必須以相同的方式解讀分割表的資料.這對(duì) Linux 核心以及 fdisk 有些影響.
底下是對(duì)所有相關(guān)細(xì)節(jié)更詳細(xì)的描述.注意, 我使用 2.0.8 版核心原始程式做為參考.其它的版本可能有一點(diǎn)點(diǎn)出入.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
2. 啟動(dòng)
當(dāng)系統(tǒng)啟動(dòng)時(shí), BIOS 從第一個(gè)磁碟(或從軟碟)讀取磁區(qū) 0 (一般通稱的 MBR - Master Boot Record, 主啟動(dòng)磁區(qū))并跳至在該處的程式碼 - 通常是一些啟動(dòng)載入程式(bootstrap loader).這些小小的啟動(dòng)程式一般不會(huì)有自己的磁碟驅(qū)動(dòng)程式而會(huì)使用 BIOS 所提供的服務(wù).這意謂著只有整個(gè) Linux 核心都位於開(kāi)頭的 1024 個(gè)磁簇內(nèi)時(shí)才能夠被啟動(dòng).
這個(gè)問(wèn)題很容易解決: 確定核心(也許還包括其它啟動(dòng)時(shí)用到的檔案, 像是 LILO map 檔) 是放在一個(gè) BIOS 可以存取的到, 全都在開(kāi)頭的 1024 個(gè)磁簇內(nèi)的分割區(qū)里 - 這可以(可能)是第一個(gè)或第二個(gè)磁碟.
另一點(diǎn)是啟動(dòng)載入程式與 BIOS 必須同意彼此對(duì)磁碟邏輯(geometry)上的看法.給 LILO `linear' 這個(gè)選項(xiàng)參數(shù)可能會(huì)有些幫助.細(xì)節(jié)後述.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
3. 磁碟 geometry 以及分割區(qū)
如果你的磁碟上有好幾種作業(yè)系統(tǒng), 每一種使用一個(gè)或多個(gè)分割區(qū).那麼對(duì)於分割區(qū)位於何處不同的看法可能導(dǎo)致災(zāi)難性的後果.
MBR 中包含一個(gè)分割表描述分割區(qū)(主分割區(qū): PRimary) 在那里.有四個(gè)表格給四個(gè)主要分割區(qū)使用, 它們看起來(lái)像
struct partition {
char active; /* 0x80: bootable, 0: not bootable */
char begin[3]; /* CHS for first sector */
char type;
char end[3]; /* CHS for last sector */
int start; /* 32 bit sector number (counting from 0) */
int length; /* 32 bit number of sectors */
};
(其中 CHS 是磁簇/磁頭/磁區(qū): Cylinder/Head/Sector 的縮寫)
因此, 有項(xiàng)資訊是重覆的: 分割區(qū)的位置可以由 24 位元的 begin 以及 end 欄位, 和 32 位元的 start 以及 length 欄位給定.
Linux 只使用 start 以及 length 欄位, 故最多可以處理包含 2^32 個(gè)磁區(qū)的分割區(qū), 也就是, 最大 2 TB 的分割區(qū).這是現(xiàn)今磁碟機(jī)的兩百倍, 所以也許足夠往後十年的需求.
不幸的是, BIOS INT13 呼叫使用三個(gè)位元組的 CHS 編碼, 10 個(gè)位元作為磁簇號(hào)碼, 8 個(gè)位元作為磁頭號(hào)碼, 及 6 個(gè)位元作為磁軌上的磁區(qū)號(hào)碼.可能的磁簇號(hào)碼是 0-1023, 可能的磁頭號(hào)碼是 0-255, 而磁軌上可能的磁區(qū)號(hào)碼為 1-63(是的, 磁軌上的磁區(qū)是由 1 起算, 不是 0).以這 24 位元最多可以定址 8455716864 個(gè)位元組(7.875 GB), 這是 1983 年磁碟機(jī)的兩百倍.
更不幸的是, 標(biāo)準(zhǔn)的 IDE 介面容許 256 個(gè)磁區(qū)/磁軌, 65536 個(gè)磁簇以及 16 個(gè)磁頭.它自己本身可以存取 2^37 = 137438953472 個(gè)位元組(128 GB), 但是加上 BIOS 方面 63 個(gè)磁區(qū)與 1024 個(gè)磁簇的限制後只?!?28482304 個(gè)位元組(504 MB)可以定址的到.
這不足以應(yīng)付現(xiàn)今的磁碟, 人們使用各種硬體或軟體上的方法來(lái)克服.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
4. 轉(zhuǎn)換與磁碟管理程式
沒(méi)有人對(duì)磁碟的'真實(shí)' geometry 有興趣.磁軌的磁區(qū)數(shù)通常是變動(dòng)的 - 接近磁碟外圍的磁軌有比較多的磁區(qū) - 所以沒(méi)有'真實(shí)'的每磁軌磁區(qū)數(shù).對(duì)於使用者而言最好是把磁碟當(dāng)作編號(hào) 0,1,..., 的磁區(qū)組合成的線性陣列, 讓控制器去找出磁區(qū)究竟位於磁碟的那里.
此線性編號(hào)一般通稱為 LBA.對(duì)於 geometry 為 (C,H,S) 的磁碟而言屬(c,h,s) 的線性位址為 c*H*S+h*S+(s-1).所有 SCSI 控制器都使用 LBA, 某些 IDE 控制器也是.
如果 BIOS 把這 24 個(gè)位元(c,h,s) 轉(zhuǎn)換成 LBA 并□給懂得 LBA 的控制器, 那麼又可以定址到 7.875 GB .并不足以應(yīng)付所有的磁碟, 但仍然是個(gè)改進(jìn).注意此處 BIOS 使用的 CHS, 它不再與'實(shí)體'有任何關(guān)系.
當(dāng)控制器不懂何為 LBA 但是 BIOS 知道如何轉(zhuǎn)換時(shí)有些類似的方法可行.(在 BIOS 設(shè)定中通常稱為 'Large'.)現(xiàn)在 BIOS 將呈現(xiàn) geometry 為(C',H',S')給作業(yè)系統(tǒng), 而在與磁碟控制器溝通時(shí)則使用(C,H,S).通?!=S', C'=C/N 而 H'=H*N, 其中 N 是確?!'<=1024 之 2 的最小次方(所以 C'=C/N 時(shí)舍去的數(shù)浪費(fèi)少許容量).再一次, 這允許存取最多達(dá) 7.875 GB.
如果 BIOS 不知道 'Large' 或是 'LBA', 那麼還是有軟體的解決方案.像是 OnTracker 或 EZ-Drive 這些個(gè)磁碟管理程式會(huì)以它們自己的函式(routines)替換掉 BIOS 的.通常這是藉由將磁碟管理程式放在 MBR 及其後幾個(gè)磁區(qū)(OnTrack 稱這些程式碼為 DDO: Dynamic Drive Overlay )來(lái)達(dá)成的, 所以它會(huì)在任何其它作業(yè)系統(tǒng)之前被啟動(dòng).這也就是為什麼在安裝磁碟管理程式後從軟碟啟動(dòng)可能會(huì)出問(wèn)題.
這影響可能多於或少於 BIOS 轉(zhuǎn)換 - 但特別是在相同的磁碟上跑數(shù)種不同的作業(yè)系統(tǒng)時(shí), 磁碟管理程式可能引起許多問(wèn)題.
Linux 從 1.3.14 版開(kāi)始支援 OnTrack 磁碟管理程式, 從 1.3.29 開(kāi)始支援 EZ-Drive?。旅嬗行└M(jìn)一步的資訊.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
5. 核心的 IDE 磁碟轉(zhuǎn)換
如果 Linux 偵測(cè)到 IDE 磁碟上有某些磁碟管理程式存在, 它將會(huì)試著使用與該磁碟管理程式相同的方式來(lái)重新對(duì)應(yīng)磁碟, 所以 Linux 看到與, 例如 DOS 配合 OnTrack 或是 EZ-Drive 相同的磁碟分割.然而, 當(dāng)你在指令列上指定 geometry 時(shí), 就不會(huì)做任何的重新對(duì)應(yīng) - 所以一行 `hd=cyls,heads,secs' 指令列選項(xiàng)可能取消掉與磁碟管理程式的相容.
此重新對(duì)應(yīng)的方式是嘗試 4,8,16,32,64,128,255 磁頭數(shù)(H*C 保持不變)直到 C <= 1024 或是 H = 255.
細(xì)節(jié)如下 - 小節(jié)的抬頭是出現(xiàn)在相對(duì)應(yīng)之啟動(dòng)訊息里的字串.在此以及在這份文件任何其它地方中分割的型態(tài)都以十六進(jìn)位數(shù)字表示.
5.1 EZD
偵測(cè)到 EZ-Drive , 因?yàn)榈谝粋€(gè)主要分割區(qū)型態(tài)為 55 .如上述重新對(duì)應(yīng) geometry, 且忽略從第 0 磁區(qū)讀入的分割表 - 以第 1 磁區(qū)的分割表取代.磁碟的區(qū)塊號(hào)碼(block numbers) 沒(méi)有改變, 但對(duì)磁區(qū) 0 的寫入會(huì)轉(zhuǎn)向磁區(qū) 1.此動(dòng)作可以藉由修改在 ide.c 中的
#define FAKE_FDISK_FOR_EZDRIVE 0
并重新編譯核心來(lái)改變.
5.2 DM6:DDO
偵測(cè)到 OnTrack DiskManager(在第一個(gè)磁碟上), 因?yàn)榈谝粋€(gè)主要分割區(qū)型態(tài)為 54?。缟鲜鲋匦聦?duì)應(yīng) geometry 而且整個(gè)磁碟平移 63 個(gè)磁區(qū). (所以舊的磁區(qū) 63 變成磁區(qū) 0)然後從新的第 0 磁區(qū)讀入新的 MBR (與分割表).此平移當(dāng)然是為 DDO 留空間 - 這也就是為什麼其它磁碟不必平移.
5.3 DM6:AUX
偵測(cè)到 OnTrack DiskManager(在其它磁碟上), 因?yàn)榈谝粋€(gè)主要分割區(qū)型態(tài)為 51 或 53.如上述重新對(duì)應(yīng) geometry?。?
5.4 DM6:MBR
偵測(cè)到某舊版的 OnTrack DiskManager, 并非藉由分割區(qū)型態(tài), 而是簽名(signature).(測(cè)試在 MBR 里第 2,3 位元組的偏移值是否不大於 430, 而且在此偏移位址找到的 short 等於 0x55AA, 後面并跟著一個(gè)奇數(shù)的位元組) 再一次如上述重新對(duì)應(yīng) geometry?。?
5.5 PTBL
最後, 核心會(huì)嘗試從主分割區(qū)的 start 以及 end 值推斷轉(zhuǎn)換方式: 若某些分割區(qū)的 start 以及 end 磁簇小於 256, 而且 start 以及 end 磁區(qū)號(hào)碼分別為 1 和 63 , 而且 end 磁頭為 31, 63, 或 127, 那麼, 因?yàn)橐缿T例分割區(qū)會(huì)在磁簇邊界結(jié)束, 而且更因?yàn)椤DE 介面最多使用 16 個(gè)磁頭, 故推測(cè)有開(kāi)啟 BIOS 轉(zhuǎn)換, 分別使用 32, 64 或 128 磁頭數(shù)重新對(duì)應(yīng) geometry. (也許這里有點(diǎn)瑕疵, genhd.c 不應(yīng)該測(cè)試磁簇號(hào)碼前兩個(gè)位元嗎?)無(wú)論如何, 當(dāng)目前的 geometry 已經(jīng)為每磁軌 63 個(gè)磁區(qū)且至少這麼多磁頭時(shí), 不會(huì)做重新對(duì)應(yīng) (因?yàn)檫@可能意謂著重對(duì)應(yīng)已完成).
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
6. 結(jié)論
這到底意謂著什麼? 對(duì) Linux 的使用者而言只有一件事: 就是他們必須得確保 LILO 以及 fdisk 使用正確的 geometry , 其中'正確'的定義對(duì) fdisk 而言是與其它在同一個(gè)磁碟上的作業(yè)系統(tǒng)所使用的 geometry 相同, 而對(duì) LILO 而言是能夠在啟動(dòng)時(shí)期成功地與 BIOS 交談的 geometry.(這兩者通常相符.)
fdisk 如何得知該 geometry ? 它詢問(wèn)核心, 使用 HDIO_GETGEO ioctl.但使用者可以交談式地或在指令列上重定 geometry.
LILO 如何得知該 geometry ? 它詢問(wèn)核心, 使用 HDIO_GETGEO ioctl.但使用者可以用 `disk=' 選項(xiàng)重定.也可以給 LILO 一個(gè) linear 選項(xiàng), 如此它將在其 map 檔中儲(chǔ)存 LBA 位址以取代 CHS 位址, 并且在啟動(dòng)時(shí)期找出該 geometry 來(lái)使用(藉由 INT 13 功能呼叫 8 來(lái)詢問(wèn)磁碟的 geometry).
核心如何知道該怎麼回答? 首先, 使用者可能以 `hd=cyls,heads,secs' 指令列選項(xiàng)明確地指定 geometry, 否則核心將詢問(wèn)硬體.
6.1 IDE 細(xì)節(jié)
讓我詳細(xì)說(shuō)明.IDE 驅(qū)動(dòng)程式有四個(gè)關(guān)於 geometry 的資訊來(lái)源.第一個(gè)(G_user)是使用者在指令列上所指定的.第二個(gè)(G_bios)是 BIOS 的固定磁碟參數(shù)表(只用於第一及第二個(gè)磁碟), 在系統(tǒng)啟動(dòng)時(shí), 切換至 32 位元模式之前讀入.第三個(gè)(G_phys)及第四個(gè)(G_log) 是由 IDE 控制器傳回, 作為對(duì) IDENTIFY 指令的回應(yīng) - 它們是 '實(shí)體的' 以及 '目前邏輯上的' geometries.
另一方面, 對(duì)於 geometry 驅(qū)動(dòng)程式需要兩個(gè)值: 其中之一是 G_fdisk, 由 HDIO_GETGEO ioctl 傳回, 另一個(gè)是 G_used , 這是執(zhí)行輸出/入時(shí)實(shí)際使用的.如果給定 G_user 則 G-fdisk 以及 G_used 兩者都會(huì)設(shè)為 G_user, 當(dāng)此資訊是根據(jù) CMOS 所提供時(shí)則設(shè)為 G_bios , 其它情形設(shè)為 G_phys.如果 G_log 看起來(lái)合理則 G_used 就設(shè)為 G_log.不然, 如果 G_used 不合理而 G_phys 看起來(lái)合理那麼 G_used 就設(shè)為 G_phys.此處的'合理'代表磁頭數(shù)在 1-16 的□圍內(nèi).
換個(gè)方式說(shuō): 指令列選項(xiàng)大於 BIOS , 并且決定 fdisk 看到的樣子, 但如果它指定轉(zhuǎn)換的 geometry(磁頭數(shù)大於 16), 則核心會(huì)藉由 IDENTIFY 指令的輸出重定它.
6.2 SCSI 細(xì)節(jié)
在 SCSI 方面情況有一點(diǎn)點(diǎn)不同, 因?yàn)椤CSI 指令已經(jīng)使用邏輯區(qū)塊號(hào)碼, 所以 'geometry' 對(duì)實(shí)際的輸出/入完全沒(méi)關(guān)系.然而, 分割區(qū)的格式仍然是相同的, 所以 fdisk 必須得捏造些 geometry , 并且也在此使用 HDIO_GETGEO - 真的, fdisk 不會(huì)分辨 IDE 以及 SCSI 磁碟.你可以從下面的詳細(xì)描述見(jiàn)到各種驅(qū)動(dòng)程式捏造一些個(gè)不同的 geometry?。媸? 一團(tuán)混亂.
如果你沒(méi)有使用 DOS 或這類系統(tǒng), 那麼避免使用所有額外的轉(zhuǎn)換設(shè)定, 可能的話, 盡管使用 64 磁頭, 每磁軌 32 磁區(qū) (良好的, 方便每磁簇 1 MB), 如此當(dāng)你把磁碟從一個(gè)控制器換到另一個(gè)去時(shí)不會(huì)遇到任何問(wèn)題.某些 SCSI 磁碟驅(qū)動(dòng)程式 (aha152x,pas16,ppa,qlogicfas,qlogicisp)非常在意與 DOS 的相容性而不允許只有 Linux 的系統(tǒng)使用超過(guò) 8 GB 的容量, 這是只臭□.
真實(shí)的 geometry 是什麼? 最簡(jiǎn)單的答案是沒(méi)有這種東西.如果真有的話, 你不會(huì)想知道, 而且的的確確從不, 永不需告訴 fdisk 或是 LILO 或核心有關(guān)它的事.這絕對(duì)是 SCSI 控制器與磁碟之間的事.讓我重覆這句話: 只有蠢蛋會(huì)告訴 fdisk/LILO/Kernel SCSI 磁碟真實(shí)的 geometry?。?
但如果你好學(xué)且堅(jiān)持, 可以問(wèn)磁碟機(jī)自己.有個(gè)重要指令 READ CAPACITY 將會(huì)傳回磁碟的總?cè)萘? 而且有個(gè) MODE SENSE 指令 Rigid Disk Drive Page(page 04) 會(huì)傳回磁簇以及磁頭的數(shù)目(這是不能改變的資訊), 而在 Format Page(page 03)有每磁區(qū)的位元組, 以及每磁軌的磁區(qū)數(shù).這數(shù)字一般與 notch 有關(guān), 而且每磁軌的磁區(qū)數(shù)是變動(dòng)的 - 外圍的磁軌擁有比內(nèi)圈磁軌多的磁區(qū).Linux 程式 scsiinfo 會(huì)給予這項(xiàng)資訊.其中有許多繁瑣的細(xì)節(jié), 而且很明白的, 沒(méi)有人(也許甚至是作業(yè)系統(tǒng))需要使用這項(xiàng)資訊.還有, 因?yàn)槲覀冎魂P(guān)心 fdisk 以及 LILO , 一般得到的回答像 C/H/S=4476/27/171 - 這樣的值 fdisk 根本不能使用, 因?yàn)榉指畋碇槐A簟?0resp. 8resp. 6 bits 給 C/H/S.
那核心之 HDIO_GETGEO 從何處取得其資訊? 嗯, 不是從 SCSI 控制器, 就是推論猜測(cè).有些驅(qū)動(dòng)程式似乎認(rèn)為我們想知道 '真相' , 但我們當(dāng)然只想知道 DOS 或 OS/2 FDISK (或 Adaptec AFDISK 等等)所用的.
注意, Linux fdisk 需要磁頭數(shù) H 以及每磁軌磁區(qū)數(shù) S 以便轉(zhuǎn)換 LBA 磁區(qū)號(hào)碼成為 c/h/s 位址, 但磁簇?cái)?shù) C 在此轉(zhuǎn)換中并未扮演什麼角色.有些驅(qū)動(dòng)程式使用 (C,H,S) = (1023,255,63) 來(lái)表示磁碟容量至少為 1023*255*63 個(gè)磁區(qū).這是不幸的, 因?yàn)檫@不能顯示實(shí)際的大小, 而且將限制大部份版本之 fdisk 的使用者其磁碟最大到 8 GB - 現(xiàn)今實(shí)際的限制.
在下面的描述中, M 表示磁碟的全部容量, 而 C,H,S 是磁簇, 磁頭以及每磁軌磁區(qū)數(shù).如果我們把 C 當(dāng)作 M/(H*S) 那給 H,S 就可以滿足.
依預(yù)設(shè), H=64, S=32.
aha1740, dtc, g_NCR5380, t128, wd7000:
H=64, S=32.
aha152x, pas16, ppa, qlogicfas, qlogicisp:
H=64, S=32 除非 C > 1024, 此情況下 H=255, S=63, C = min(1023, M/(H*S)). (故 C 被截?cái)? 且 H*S*C 不是磁碟容量的近似值. 這將會(huì)混搖淆大部份版本的 fdisk.) ppa.c 程式碼使用 M+1 取代 M 并認(rèn)為這是因?yàn)樵凇d.c 里的一只臭□使 M 的值少一.
advansys:
H=64, S=32 除非 C > 1024 而且還開(kāi)啟 BIOS 中的 `> 1 GB' 選項(xiàng), 此情況下 H=255, S=63.
aha1542:
詢問(wèn)控制器使用兩種可能的 schemes 中的那一種, 并且使用 H=255, S=63 或 H=64, S=32. 前者有個(gè)啟動(dòng)訊息 "aha1542.c: Using extended bios translation".
aic7xxx:
H=64, S=32 除非 C > 1024, 而且還給了 "extended" 啟動(dòng)參數(shù), 或在 SEEPROM 或 BIOS 設(shè)了 `extended' 位元, 此情況下 H=255, S=63.
buslogic:
H=64, S=32 除非 C >= 1024, 而且還啟動(dòng)控制器的擴(kuò)充轉(zhuǎn)換, 此情況下若 M < 2^22 則 H=128, S=32; 否則 H=255, S=63. 然而, 選擇 (C,H,S) 之後, 讀入分割表, 若三種可能的 (H,S) = (64,32), (128,32), (255,63) 中 endH=H-1 的值看來(lái)可行則使用該對(duì) (H,S) , 并印出啟動(dòng)訊息 "Adopting Geometry from Partition Table".
fdomain:
從 BIOS Drive Parameter Table 找出 geometry 資訊, 或從分割表讀取并使用 H=endH+1, S=endS 給第一個(gè)分割區(qū), 若非空, 或使用 H=64, S=32 for M < 2^21 (1 GB), H=128, S=63 for M < 63*2^17 (3.9 GB) and H=255, S=63 otherwise.
in2000:
使用 (H,S) = (64,32), (64,63), (128,63), (255,63) 中第一個(gè)讓 C <= 1024 的. 此情況下, 在 1023 截掉 C .
seagate:
從磁碟讀取 C,H,S. (真誠(chéng)實(shí)!) 如果 C 或 S 太大, 放入 S=17, H=2 并倍增 H 直到 C <= 1024. 這表示 H 將為 0 如果 M > 128*1024*17 (1.1 GB). 這是只臭□.
ultrastor and u14_34f:
三種對(duì)應(yīng)之一 ((H,S) = (16,63), (64,32), (64,63)) 根據(jù)控制器的對(duì)應(yīng)模式而定.
如果驅(qū)動(dòng)程式?jīng)]有指定 geometry , 我們就回到使用分割表或磁碟總?cè)萘縼?lái)推斷猜測(cè).
仔細(xì)看看分割表.因?yàn)橐缿T例分割區(qū)在磁簇邊界結(jié)束, 我們可以為任何分割區(qū)定 end=(endC,endH,ednS) , 只要放入 H = endH+1 及 S = endS. (記得磁區(qū)由 1 起算.)更明確地的說(shuō).如果有個(gè)不是空的分割區(qū), 則以最大的 beginC 計(jì).對(duì)於此分割區(qū), 看看 end+1, 計(jì)算加上 start 以及 length 并且假設(shè)此分割區(qū)在某磁簇邊界結(jié)束.如果兩個(gè)值都相符, 或 endC = 1023 且 start+length 是 (endH+1)*endS 的倍數(shù), 那麼假定此分割區(qū)真的是在磁簇邊界, 并放入 H = endH+1 以及 S = endS.如果不對(duì), 不是因?yàn)闆](méi)有分割區(qū), 就是因?yàn)樗鼈兊拇笮『芷婀? 那麼只看磁碟容量 M.演算法: 放入 H = M/(62*1024)(無(wú)條件進(jìn)位),S = M/(1024*H)(無(wú)條件進(jìn)位), C = M/(H*S)(無(wú)條件舍去).這能產(chǎn)生一 (C,H,S) 其中 C 最大 1024 而 S 最大 62.
--------------------------------------------------------------------------------