
                         Large Disk mini-HOWTO 
                                       
: Andries Brouwer, [1]jaeb@cwi.nl
: Asd L. Chen, [2]asdchen@ms1.hinet.net

   v1.0, 26 June 1996 : 10-13 November 1997
     _________________________________________________________________
   
   й disk geometry  1024 cylinder ƣ
     _________________________________________________________________
   
1. 

2. 

3. ŵ geometry Լָ

4. תŵʽ

5. ĵ IDE ŵת

     * 5.1 EZD
     * 5.2 DM6:DDO
     * 5.3 DM6:AUX
     * 5.4 DM6:MBR
     * 5.5 PTBL
       
6. 

     * 6.1 IDE ϸ
     * 6.2 SCSI ϸ
     _________________________________________________________________
   
1. 

   Ĵŵ 1024 Ŵ(cylinders) , ҵϵͳʹû
   ϵͳ(BIOS)һ, Ϊһŵ룯ʹ
   õ INT13 BIOS һ 10 λԪ(bit) λŴ, ޷ȡ
    1024 ֮ĴŴأ
   
   ˵, Linux ʹ BIOS, û⣮
   
   ˵, :
   
   (1) ϵͳʱ, Linux ûʼִ޷⣮
   LILO ԼƵʽ(boot loaders)ЩӰ죮
   
   (2) ʹôŵҵϵͳָͬλã仰˵, һ
   ŵʹ Linux Լ,  DOS, ߱ͬķʽָ
   ϣ Linux Լ fdisk ЩӰ.
   
   Ƕϸڸϸע, ʹ 2.0.8 ԭʼʽΪ
   οİ汾һ룮
   
2. 

   ϵͳʱ, BIOS ӵһŵ()ȡ 0 (һͨƵ MBR -
   Master Boot Record, )ڸôĳʽ - ͨһЩ
   ʽ(bootstrap loader) ЩССʽһ㲻ԼĴŵ
   ʽʹ BIOS ṩķνֻ Linux Ķλ춿ͷ
   1024 Ŵʱܹ
   
   ׽: ȷ(Ҳʱõĵ,  LILO
   map ) Ƿһ BIOS Դȡĵ, ȫڿͷ 1024 Ŵڵķָ
    - ()ǵһڶŵ
   
   һʽ BIOS ͬ˴˶Դŵ߼(geometry)ϵĿ
    LILO `linear' ѡܻЩϸ
   
3. ŵ geometry Լָ

   Ĵŵкüҵϵͳ, ÿһʹһָ춷
   λ춺δͬĿܵԵ
   
   MBR аһָָ(ָ: primary) ĸ
   ĸҪָʹ, ǿ
   
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 ǴŴأͷ: Cylinder/Head/Sector д)
   
   , Ѷظ: ָλÿ 24 λԪ begin Լ end 
   λ,  32 λԪ start Լ length λ
   
   Linux ֻʹ start Լ length λ, Դ 2^32 ķ
   , Ҳ,  2 TB ķָֽŵٱ, Ҳ㹻
   ʮ
   
   ҵ, BIOS INT13 ʹλԪ CHS , 10 λԪΪŴغ
   , 8 λԪΪͷ,  6 λԪΪŹϵĴ룮 ܵĴŴ
    0-1023, ܵĴͷ 0-255, ŹϿܵĴΪ 1-63(
   , ŹϵĴ 1 ,  0)  24 λԪԶַ
   8455716864 λԪ(7.875 GB),  1983 ŵٱ
   
   ҵ, ׼ IDE  256 Ź, 65536 ŴԼ 16
   ͷԼԴȡ 2^37 = 137438953472 λԪ(128 GB), Ǽ
    BIOS  63  1024 Ŵصֻʣ 528482304 λԪ
   (504 MB)Զַĵ
   
   ⲻӦֽĴŵ, ʹøӲϵķ˷
   
4. תŵʽ

   û˶Դŵ'ʵ' geometry ȤŹĴͨǱ䶯 - ӽ
   ΧĴŹбȽ϶Ĵ - û'ʵ'ÿŹ ʹ
   ǰѴŵ 0,1,..., Ĵϳɵ, ÿȥ
   λ춴ŵ
   
   ԱһͨΪ LBA geometry Ϊ (C,H,S) Ĵŵ(c,h,s)
   λַΪ c*H*S+h*S+(s-1) SCSI ʹ LBA, ĳЩ IDE 
   Ҳǣ
   
    BIOS  24 λԪ(c,h,s) ת LBA  LBA Ŀ, 
   ֿԶַ 7.875 GB ӦеĴŵ, ȻǸĽע
   ˴ BIOS ʹõ CHS, 'ʵ'κιϵ
   
   Ϊ LBA  BIOS ֪תʱЩƵķУ(
   BIOS 趨ͨΪ 'Large') BIOS  geometry Ϊ(C',H',S')
   ҵϵͳ, ŵͨʱʹ(C,H,S) ͨ S=S', C'=C/N 
   H'=H*N,  N ȷ C'<=1024 ֮ 2 Сη( C'=C/N ʱȥ
   )һ, ȡ 7.875 GB
   
    BIOS ֪ 'Large'  'LBA', ỹĽ
   OnTracker  EZ-Drive ЩŵʽԼĺʽ(routines)
    BIOS ģ ͨǽɽŵʽ MBR Ἰ
   (OnTrack ЩʽΪ DDO: Dynamic Drive Overlay )ɵ, 
   κҵϵͳ֮ǰ ҲΪʲڰװŵʽ
   ܻ⣮
   
   Ӱܶ춻 BIOS ת - رͬĴŵֲͬҵ
   ϵͳʱ, ŵʽ⣮
   
   Linux  1.3.14 濪ʼ֧Ԯ OnTrack ŵʽ,  1.3.29 ʼ ֧Ԯ
   EZ-Drive ЩһѶ
   
5. ĵ IDE ŵת

    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
   
   ϸ - Сڵ̧ͷǳӦ֮ѶϢִڴԼ
   κطзָ̬ʮλֱʾ
   
5.1 EZD

   ⵽ EZ-Drive , ΪһҪָ̬Ϊ 55 ¶Ӧ
   geometry, ҺԴӵ 0 ķָ - Ե 1 ķָȡŵ
   (block numbers) ûиı, Դ 0 дת 1˶
   Խ޸ ide.c е
   
     #define FAKE_FDISK_FOR_EZDRIVE 0
     
   ±ı䣮
   
5.2 DM6:DDO

   ⵽ OnTrack DiskManager(ڵһŵ), ΪһҪָ̬Ϊ
   54 ¶Ӧ geometry ŵƽ 63  (ԾɵĴ
   63 ɴ 0)Ȼµĵ 0 µ MBR (ָ)ƽƵȻ
   Ϊ DDO ռ - ҲΪʲŵƽƣ
   
5.3 DM6:AUX

   ⵽ OnTrack DiskManager(ŵ), ΪһҪָ̬Ϊ
   51  53¶Ӧ geometry 
   
5.4 DM6:MBR

   ⵽ĳɰ OnTrack DiskManager, ǽɷָ̬, ǩ
   (signature)( MBR  2,3 λԪƫֵǷ񲻴 430, 
   ڴƫλַҵ short  0x55AA, 沢һλԪ) һ
   ¶Ӧ geometry 
   
5.5 PTBL

   , Ļ᳢Դָ start Լ end ֵƶתʽ: ĳЩָ
    start Լ end ŴС 256,  start Լ end ֱΪ 1
    63 ,  end ͷΪ 31, 63,  127, , ΪָڴŴ
   ߽, ҸΪ IDE ʹ 16 ͷ, Ʋп BIOS ת
   , ֱʹ 32, 64  128 ͷ¶Ӧ geometry (Ҳе
   , genhd.c ӦòԴŴغǰλԪ?), Ŀǰ
   geometry ѾΪÿŹ 63 ͷʱ, ¶Ӧ (Ϊ
   νضӦ)
   
6. 

   ⵽νʲ?  Linux ʹ߶ֻһ: Ǳȷ
   LILO Լ fdisk ʹȷ geometry , 'ȷ'Ķ fdisk 
   ͬһŵϵҵϵͳʹõ geometry ͬ,  LILO 
   ʱڳɹ BIOS ̸ geometry(ͨ)
   
   fdisk ε֪ geometry ? ѯʺ, ʹ HDIO_GETGEO ioctlʹ
   ߿Խ̸ʽػָض geometry
   
   LILO ε֪ geometry ? ѯʺ, ʹ HDIO_GETGEO ioctl ʹ
   ߿ `disk=' ѡضҲԸ LILO һ linear ѡ, 
   map д LBA λַȡ CHS λַ, ʱҳ geometry 
   ʹ( INT 13 ܺ 8 ѯʴŵ geometry)
   
   ֪ش? , ʹ߿ `hd=cyls,heads,secs' ָ
   ѡȷָ geometry, ĽѯӲ壮
   
6.1 IDE ϸ

   ϸ˵IDE ʽĸ geometry ѶԴһ
   (G_user)ʹָָģ ڶ(G_bios) BIOS Ĺ̶ŵ
   (ֻ춵һڶŵ), ϵͳʱ, л 32 λԪģʽ֮ǰ
   룮 (G_phys)ĸ(G_log)  IDE , Ϊ
   IDENTIFY ָĻӦ -  'ʵ' Լ 'Ŀǰ߼ϵ' geometries
   
   һ,  geometry ʽҪֵ: ֮һ G_fdisk, 
   HDIO_GETGEO ioctl , һ G_used , ִʱʵʹõ
     G_user  G-fdisk Լ G_used ߶Ϊ G_user, Ѷ
   Ǹ CMOS ṩʱΪ G_bios , Ϊ G_phys G_log 
    G_used Ϊ G_log Ȼ,  G_used  G_phys 
    G_used Ϊ G_phys˴''ͷ 1-16 ġΧ
   
   
   ʽ˵: ָѡ BIOS , Ҿ fdisk , ָ
   ת geometry(ͷ 16), Ļ IDENTIFY ָض
   
   
6.2 SCSI ϸ

    SCSI һ㲻ͬ, Ϊ SCSI ָѾʹ߼, 
   'geometry' ʵʵȫûϵ Ȼ, ָĸʽȻͬ
   ,  fdisk Щ geometry , Ҳڴʹ HDIO_GETGEO - 
   , fdisk ֱ IDE Լ SCSI ŵ Դϸ
   ʽһЩͬ geometry , һŻң
   
   ûʹ DOS ϵͳ, ʹжת趨, ܵ
   , ʹ 64 ͷ, ÿŹ 32  (õ, ÿŴ 1 MB), ˵
   Ѵŵһһȥʱκ⣮ ĳЩ SCSI ŵ
   ʽ (aha152x,pas16,ppa,qlogicfas,qlogicisp)ǳ DOS Զ
   ֻ Linux ϵͳʹó 8 GB , ֻ
   
   ʵ geometry ʲ? 򵥵ĴûֶеĻ, 㲻
   ֪, ҵĵȷȷӲ,  fdisk  LILO й
    SCSI ŵ֮£ ظ仰: ֻд
   fdisk/LILO/Kernel SCSI ŵʵ geometry 
   
   ѧҼ, ʴŵԼиҪָ READ CAPACITY ᴫ
   شŵ, и MODE SENSE ָ Rigid Disk Drive Page(page
   04) ᴫشŴԼͷĿ(ǲܸıѶ),  Format
   Page(page 03)ÿλԪ, ԼÿŹĴ һ notch
   й, ÿŹĴǱ䶯 - ΧĴŹӵбȦŹĴ
   Linux ʽ scsiinfo Ѷ ෱ϸ, Һ
   , û(Ҳҵϵͳ)ҪʹѶ , Ϊֻ
   fdisk Լ LILO , һõĻش C/H/S=4476/27/171 - ֵ fdisk
   ʹ, Ϊָֻ 10resp. 8resp. 6 bits  C/H/S
   
   Ǻ֮ HDIO_GETGEO ӺδȡѶ? , Ǵ SCSI , 
   ²⣮ ЩʽƺΪ֪ '' , ǵȻֻ֪ DOS
    OS/2 FDISK ( Adaptec AFDISK ȵ)õģ
   
   ע, Linux fdisk Ҫͷ H ԼÿŹ S Աת LBA 
   Ϊ c/h/s λַ, Ŵ C ڴתвδʲɫ Щʽʹ
    (C,H,S) = (1023,255,63) ʾŵΪ 1023*255*63 
   ǲҵ, ΪⲻʾʵʵĴС, ҽƴ󲿷ݰ汾֮ fdisk ʹ
   ŵ 8 GB - ֽʵʵƣ
   
   , M ʾŵȫ,  C,H,S ǴŴ, ͷԼÿŹ
   ǰ C  M/(H*S) Ǹ H,S Ϳ㣮
   
   Ԥ, 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 ض,  H*S*C ǴŵĽֵ. ⽫
          ҡ󲿷ݰ汾 fdisk.) ppa.c ʽʹ M+1 ȡ M Ϊ
          Ϊ sd.c һֻʹ M ֵһ
          
   advansys:
          H=64, S=32  C > 1024 һ BIOS е `> 1 GB' ѡ, 
           H=255, S=63.
          
   aha1542:
          ѯʿʹֿܵ schemes еһ, ʹ H=255,
          S=63  H=64, S=32. ǰиѶϢ "aha1542.c: Using extended
          bios translation".
          
   aic7xxx:
          H=64, S=32  C > 1024, һ "extended" , 
          SEEPROM  BIOS  `extended' λԪ,  H=255, S=63.
          
   buslogic:
          H=64, S=32  C >= 1024, һת, 
           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 ֵʹøö (H,S) , 
          ӡѶϢ "Adopting Geometry from Partition Table".
          
   fdomain:
           BIOS Drive Parameter Table ҳ geometry Ѷ, ӷָȡ
          ʹ H=endH+1, S=endS һָ, ǿ, ʹ 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) еһ C
          <= 1024 . ,  1023 ص C .
          
   seagate:
          Ӵŵȡ C,H,S. (ʵ!)  C  S ̫,  S=17, H=2 
           H ֱ C <= 1024. ʾ H Ϊ 0  M > 128*1024*17
          (1.1 GB). ֻ.
          
   ultrastor and u14_34f:
          ֶӦ֮һ ((H,S) = (16,63), (64,32), (64,63)) ݿĶ
          Ӧģʽ.
          
   ʽûָ geometry , Ǿͻصʹ÷ָŵƶ
   ²⣮
   
   ϸָΪָڴŴر߽, ǿΪκηָ
   end=(endC,endH,ednS) , ֻҪ H = endH+1  S = endS (ǵô 1
   㣮)ȷص˵иǿյķָ,  beginC ƣ 
   춴˷ָ,  end+1,  start Լ length Ҽ˷ָĳ
   Ŵر߽ ֵ,  endC = 1023  start+length 
   (endH+1)*endS ı, ٶ˷ָڴŴر߽,  H =
   endH+1 Լ S = endS , Ϊûзָ, ΪǵĴС
   , ֻŵ M 㷨:  H = M/(62*1024)(
   λ),S = M/(1024*H)(λ), C = M/(H*S)(ȥ)ܲһ
   (C,H,S)  C  1024  S  62

References

   1. mailto:aeb@cwi.nl
   2. mailto:asdchen@ms1.hinet.net
