如果 Linux 偵測到 IDE 磁碟上有某些磁碟管理程式存在, 它將會試著使用與該磁碟管理程式相同的方式來重新對應磁碟, 所以 Linux 看到與, 例如 DOS 配合 OnTrack 或是 EZ-Drive 相同的磁碟分割.
然而, 當你在指令列上指定 geometry 時, 就不會做任何的重新對應 - 所以一行 `hd=
cyls,
heads,
secs' 指令列選項可能取消掉與磁碟管理程式的相容.
此重新對應的方式是嘗試 4,8,16,32,64,128,255 磁頭數(H*C 保持不變)直到 C <= 1024 或是 H = 255.
細節如下 - 小節的抬頭是出現在相對應之啟動訊息裡的字串.在此以及在這份文件任何其它地方中分割的型態都以十六進位數字表示.
偵測到 EZ-Drive , 因為第一個主要分割區型態為 55 .如上述重新對應 geometry, 且忽略從第 0 磁區讀入的分割表 - 以第 1 磁區的分割表取代.磁碟的區塊號碼(block numbers) 沒有改變, 但對磁區 0 的寫入會轉向磁區 1.此動作可以藉由修改在 ide.c 中的
#define FAKE_FDISK_FOR_EZDRIVE 0
並重新編譯核心來改變.
偵測到 OnTrack DiskManager(在第一個磁碟上), 因為第一個主要分割區型態為 54 .如上述重新對應 geometry 而且整個磁碟平移 63 個磁區. (所以舊的磁區 63 變成磁區 0)然後從新的第 0 磁區讀入新的 MBR (與分割表).此平移當然是為 DDO 留空間 - 這也就是為什麼其它磁碟不必平移.
偵測到 OnTrack DiskManager(在其它磁碟上), 因為第一個主要分割區型態為 51 或 53.如上述重新對應 geometry .
偵測到某舊版的 OnTrack DiskManager, 並非藉由分割區型態, 而是簽名(signature).(測試在 MBR 裡第 2,3 位元組的偏移值是否不大於 430, 而且在此偏移位址找到的 short 等於 0x55AA, 後面並跟著一個奇數的位元組) 再一次如上述重新對應 geometry .
最後, 核心會嘗試從主分割區的 start
以及 end
值推斷轉換方式: 若某些分割區的 start
以及 end
磁簇小於 256, 而且 start
以及 end
磁區號碼分別為 1 和 63 , 而且 end 磁頭為 31, 63, 或 127, 那麼, 因為依慣例分割區會在磁簇邊界結束, 而且更因為 IDE 介面最多使用 16 個磁頭, 故推測有開啟 BIOS 轉換, 分別使用 32, 64 或 128 磁頭數重新對應 geometry.
(也許這裡有點瑕疵, genhd.c 不應該測試磁簇號碼前兩個位元嗎?)無論如何, 當目前的 geometry 已經為每磁軌 63 個磁區且至少這麼多磁頭時, 不會做重新對應 (因為這可能意謂著重對應已完成).