  Large Disk mini-HOWTO
  Andries Brouwer, aeb@cwi.nl 
  ٹ shorie@ibm.net 
  v1.0, 960626

  ǥΥȥ1024¤Τ٤ơ (θŦ
  ˡŪԤ˴ꤤޤԤ)

  1.  

  㤨 1024 ĶǥäƤȤޤ礦ξ夢
  ʤ BIOS ȤOSäƤȤޤ礦Ǥʤ
  顢ǥ I/O ˻Ȥ INT13 BIOS ƤӽФϡI/O ưΥ
   10bit ΥեɤȤޤǤ顢1024 ְʹߤΥ
  ϡɤ߽񤭤ǤʤΤǤ

  Linux  BIOS ȤޤΤꤢޤ

  ޤƤǤ

  (1) ƥ൯ưˤϡLinux ϤޤưƤޤΤǡBIOS ꤫
  ƨޤ󡣤ϡLILO νưץˤȤäˤ
  ޤ

  (2) ʣOSǰĤΥǥȤޤ魯硢ɤ˥ѡƥ󤬤
  Τ줾줬äΤäƤʤФʤޤ󡣸
  ȡLinux  DOS ĤΥǥξǻѤ硢ξԤƱˡ
  ѡƥơ֥ᤷʤФʤޤ󡣤ϡLinux 
   fdisk ˤȤäˤʤޤ

  ʲˡϢξܺ٤򼨤ޤʤϥͥС
  2.0.8 򻲾ȤƤޤ¾Ǥξϡ㤦⤷ޤ

  2.  ư

  BIOS ϥƥ൯ư˺ǽΥǥ(եåԡ)Υ0 ( MBR
  ȸƤФޤ )ɤǡˤ륳ɤ¹ԤޤΥɤ
  ϥ֡ȥȥåץǤäʵưץ̤
  Υǥɥ饤ФϻBIOS ӥѤޤĤ
  ꡢLinux ưˤϥͥ뤬ǽ1024˴˼ޤäƤ
  ʤФʤޤ

  ϡñ˲Ǥޤǽ 1024 ˤäݤޤѡ
  ƥäơ˥ͥʤȡLILO map Τ褦˵ư˻
  եˤ֤ޤBIOS ɤ߽񤭤ǤΤ̤Ϻǽ2ɥ
  ֤ǤΤǡΥѡƥ⤳ĤΤɤ餫֤
  

  ⤦Ĥνפϡưץ BIOS ǥΥ
  ꡼Ʊ褦İʤФʤʤǤϡ LILO 
  "Linear" ץĤ뤳ȤǲǤޤʲˡܺ٤
  

  3.  ǥȥȥѡƥ

  ԥ塼ΥǥʣOS硢줾줬İʾΥѡ
  ƥȤȤˤʤޤäѡƥ󤬤ɤˤ뤫
  򡢤줾줬Ʊ褦İǤƤʤȡỴˤޤʤ̤ˤʤ
  

  MBR ˤϡѡƥơ֥뤬ޤѡƥơ֥Ϥ
  ˥ץ饤ޥѡƥ󤬤뤫򵭽Ҥޤơ֥ϻͤĤ
  äƤꡢͤĤΥץ饤ޥѡƥ򵭽ҤǤޤǤϰʲ
  Τ褦ˤʹ¤ˤʤäƤޤ
        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 άǤ).

  ξϡĹǤȤΤϡѡƥΰ֤ϡ24bit γ
  ֡λ֤¾ˡ32bit γϰ֡ĹͿƤΤ
  

  Linux ϡstartȡlengthեɤĤޤǤ顢232
  ޤǤΥѡƥȤȤǤޤ 2 TB (ƥ
  :1000GB)ˤꡢߤΥϡɥǥ̤100ܤˤޤ
  Ǥ顢10ǯ餤פǤ礦

  ǰʤȤˡINT13 BIOS ƤӽФϡ3ХȤʤ CHS Ȥ
   CHS ϡ 10bit 򥷥ֹˡ8bit إåֹ
  ˡ6bit ȥåֹˤդäƤޤͭʥ
  ֹϡ0-1023 ǡƱͤ˥إåֹ 0-255ȥåֹ1-63
  Ǥ(ȥåΥֹ 0 ǤϤʤ 1 ޤ) 24 ӥ
  ȤѤȡ 8455716884 Х(7.875GB)ɤ߽񤭤Ǥޤ1983 ǯ
  Υǥ 200 ܤǤ

  ˤޤȤˡɸ IDE 󥿡եϥȥå 256
  6553616إåɤޤǤޤ켫Τϡ
  2^37=137438953472Х(128GB)ޤǤɤ߽񤭤ޤ BIOS
   ¤Ǥ롢63 1024 Ȥ߹碌ȡä
  528482304 Х (504 MB) ɤ߽񤭲ǽǤʤʤޤ

  ϡΥǥȤǤϽʬǤϤޤ󡣤ǡϡ
  ȥեȥˤ뤢μʤ뤳Ȥˤʤޤ

  4.  Ѵȥǥޥ͡㡼

  ǥΡΡץȥ˶̣ΤͤϤޤ󡣼¤ΤȤ
  åΥϡĤΥǥǤư뤳Ȥ
  ǤȡΤϥǥα˶ᤤȤۤɡȥåΥ
  ¿Ȥ뤫ǤǤ顢ΡץȥåΥ
  ʤɤʤΤǤѼԤ鸫ȡ0,1,... Ȥ褦ǥ
  򥻥ΰ켡ȤƤȤ館ΤǤơͿ
  ǥΤɤˤ뤫õΤϡȥǤƤ
  ΤǤ

  ŪֹŤϡLBA ȤΤƤޤξ硢 CHS
  ȥ꡼ (c,h,s) ɥ쥹׻ˤc*H*S + h*S + (s-1) 
  ѤޤSCSI ȥϤ٤ LBA Ѥޤ IDE
  Υȥˤ LBA ѤΤޤ

  BIOS  24bit  (c,h,s)  LBA Ѵƥϡɥǥȥ
  Ϳʤ顢7.875GB Ȥ BIOS ¤򤤤äѤ˻ȤȤǤޤ
  ǤǥбǤȤ櫓ˤϹԤޤ󤬡礭ʲ
  ɤȤޤդäƤޤȡǤ BIOS Ĥ CHS
  ϡϤ丽¤ȤϲδؤʤǤ

  ȥ餬 LBA 򰷤ʤƤ⡢BIOS Ѵǽ硢 LBA 
  ɤˡȥ륳ȤǤޤ( BIOS ̤Ǥϡ "LARGE" ɽ
  뤳Ȥ¿ޤ ) ξ硢BIOS  OS (C',H',S')򥸥
  ꡼ȤΤ餻ǥȥȤȤꤹȤˤϡǥ
  Υȥ꡼Ǥ(C,H,S)Ѥޤ̤ϡ S = S', C' = C/N,
  H'= H*N ȤطˤʤäƤꡢ N ϡC' <= 1024 Ǿ 2 
  ٤Ǥ( ȡ C' = C/N ڤΤƤˤ̵̤̤Ǿˤ
  ޤ)ˡǤ⡢ 7.875GB ޤǤɤ߽񤭤ǽˤʤޤ

  BIOS  "Large" Ȥ "LBA" ѤǤʤǤ⡢եȥˤ
  ƤʤȤ뤳ȤǤޤOnTrack  EZ-Drive Ȥäǥޥ
  㡼ϡBIOS ΥǥϢ롼äƥǥԤ
  ̤ˤϡǥޥ͡㡼Υɤ MBR  MBR ³
  (OnTrack  DDO : Disk Dynamic Overlay ȸƤǤޤ)Ǥ
  ȤǤ¸ޤMBR ޤƤޤΤǡä
  ɤ¾Υڥ졼ƥ󥷥ƥ᤯ưޤơ줬ǥ
  ޥ͡㡼Ȥ߹Ǥ륷ƥեåԡ鵯ư
  ͳǤ

  ǥޥ͡ˤѴϡBIOS ˤȻ褦ʤΤǤ
  ä˰ۼ OS Ʊǥ餻硢ǥޥ͡
  ¿򵯤ޤ

  Linux  1.3.14  OnTrack ˡ1.3.29  EZ-Drive бƤ
  ޤܺ٤ʲˤޤ

  5.  ͥˤ IDE ΤΥǥѴ

  Linux ͥ뤬 IDE ǥ˥ǥޥ͡㡼򸡽Ф硢
  ǥǥޥ͡㡼ԤΤƱˡѴ褦Ȥޤ
  ˤäơLinux  DOS  OnTrack  EZ-Drive ̤ƤߤΤƱ
  褦˥ѡƥ򸫤뤳ȤǤޤޥɥ饤󤫤饸
  ȥꤷ硢ѴϹԤޤ󡣤Ǥ顢 hd=cyls,heads,secs 
  ޥɥ饤󥪥ץϡǥޥ͡㡼Ȥθߴ򻦤
  ޤޤ

  Ѵϡ(H*Cͤݤäޤ) 4, 8, 16, 32, 64, 128, 255 إå
  β줫ǹԤޤΤC <= 1024  H = 255 β줫
  ΤѤޤ

  ʲǡƥǥޥ͡㡼Ԥޤʹߡѡƥ
  ηϤ٤16ʿǤ路ޤ

  5.1.  EZD

  ǽΥץ饤ޥѡƥη55ǤȤEZ-Drive ¸ߤ
  ȽǤޤȥϾ褦Ѵ졢0ˤ
  ѡƥơ̵֥뤵ޤˡѡƥ
  ֥ϥ1ɤ߽ФޤǥΥ֥åֹѹ
  ޤ󤬡 0ؤν񤭹ߤϡ1ؤν񤭹ߤ˶
  ο񤤤ϡide.c  #define FAKE_FDISK_FOR_EZDRIVE  0 in
  ide.c.  ȤƥͥƹۤнǤޤ

  5.2.  DM6:DDO

  (ǽΥɥ饤֤)ǽΥץ饤ޥѡƥη 54 Ǥ
  ȡOnTrack ǥޥ͡㤬Ȥ߹ޤƤȽǤޤ
  ȥϤǤ˽Ҥ٤ˡѴ졢ǥΤ63ʬ餵
  (ĤޤꡢΥ63 ϥ0ȸƤФ뤳Ȥˤʤޤ)
  ̡(ѡƥơ֥ޤ)MBRϡ0 
  ɤ߹ޤޤ󡢤Τ餷DDOΤζ֤ݤ뤿
  ǡ줬ǽΥǥʳˤϤ餷ʤͳǤ

  5.3.  DM6:AUX

  (ǽΥǥʳ)ץ饤ޥ꡼ѡƥ5153ΤȤ
  ϡOnTrack ǥޥ͡㡼ƤȽǤޤȥ
  ѴϾ˽Ҥ٤̤Ǥ

  5.4.  DM6:MBR

  Ť OnTrack ǥޥ͡㡼ϡѡƥηǤϤʤ
  㡼ǸФޤ(ˡMBR ΥХ2,3 ˤ򥪥եåȤ
  ͤΥեåͤ430ʲǤ뤫ǧޤˤΥեå
  ֤ˤ short int ͤ 0x55AA ǡʤġ 1 ХȤ
  ƺޤ)Ѵˡϡ˽Ҥ٤̤Ǥ

  5.5.  PTBL

  Ǹˡץ饤ޥѡƥγϰ֤Ƚλ֤顢ѴԤ
  Ƥ뤳ȤΤˡ뤳Ȥ򤴾Ҳ𤷤ޤ礦⤷ץ饤ޥ꡼
  ѡƥơ֥startend ͤ256̤ǡʤĳϤ
  ӽλֹ椬줾 1  63 Ǥꡢ˽λإåɤ
  31, 63, 127 ȤäȤޤȡѡƥνϥ
  ˤ뽬路Ǥ뤳ȡIDE 󥿡եϺ 16 إ
  ɤǤ뤳Ȥ顢BIOS ˤѴʤƤ뤳Ȥʬꡢ
   ȥȤƤϡ32, 64, 128 ȤäإåɿѤƤ
  Ȥʬޤ (¿ʬˤϷ٤ޤgenhd.c ϡ
  ξ2ӥåȤʤΤǤϤʤǤ礦)
  Υȥ꤬Ǥ˥ȥå63ǡΥإåɤ
  Ȥʤ顢ѴϹԤޤ (إåɤ󤢤ȤΤϡǤ
  ԤƤȤȤǤ)

  6.  

  ɤɤȤΤǤ礦 Linux ѼԤˤȤäƤϰפ
  ϡLILO  fdisk ȥȤʤФʤʤ
  ǡפȤ fdisk ˴ؤƤƱǥ¾ OS 
  ΥȥѤƤȤ̣Ǥꡢޤä LILO ˴ؤƤ
  ޤ BIOS ȤꤷƵưǤ른ȥǤȤȤ
  (̤Ʊȥ꤬ξԤˤȤäȥˤʤޤ)

  FdiskϡɤäƥȥĴ٤ΤǤ礦 HDIO_GETGE ioctl 
  ѤƥͥʹΤǤѼԤŪˡ뤤ϥޥ
  ɥ饤󤫤饸ȥǤޤ

  LILO ϡɤäƥȥĴ٤ΤǤ礦HDIO_GETGE ioctl
  ѤƥͥʹΤǤѼԤ "disk=" ץȤ
  ơȥǤޤLinear ץLILO˻ꤹ뤳Ȥ
  Ǥޤξ硢LILO CHSɥ쥹Ѥ LBA ɥ쥹ޥå
  ե˳ǼȤǵưȤˤѤޤ (INT 13Υե
  󥯥8䤤碌˻Ѥޤ)

  ͥɤäĴ٤ΤǤ礦ȡǽѼ
  "hd=cyls,heads,secs" ޥɥ饤󥪥ץˤäŪˤ
  ꤹ뤫⤷ޤ󡣤ǤʤСͥϥϡɥ䤤碌
  

  6.1.  IDE ˴ؤܺ

  äȹͤƤߤޤ礦IDE ɥ饤Сϥȥ˴ؤ
  4ĻäƤޤܤϥޥɥ饤󤫤ѼԤˤ
  (G_user)ܤ 32 ӥåȥ⡼ɤܤɤ߹ޤ BIOS
  Fixed Disk Parameter Table Ǥ (G_bios) (ξϺǽ 2ɥ饤֤
  ˴ؤƤǤ)ܤȻͤܤ IDE ȥ餬 IDENTIFYޥ
  Фǡ줾졢ʪסָץȥ
  (줾 G_physG_log)

  ΰǡɥ饤ФϥȥȤ 2 ĤͤɬפȤޤĤ
  HDIO_GETGEO ioctl ֤ͤǤ(G_fdisk)⤦ 1 Ĥϡºݤ I/O 
  Ȥ֤ͤǤ(G_used)G_userͿƤС G_fdisk 
  G_used ϤꤵޤG_user Ϳ줺 CMOS RAM ʤ˾
  󤬤СꤵޤʳΤȤˤϡG_physꤵ
  G_log Ǥ褦ʤ顢G_used Ϥꤵޤ뤤
  ϡG_used ͤǤϤʤG_phys Ǥ褦ʤ顢G_phys 
  ͤꤵޤǡפȤϡإåɤͤ 1-16 ϰϤä
  뤳ȤǤ

  ȡޥɥ饤ǤλϡBIOS ͤ񤭤
  fdisk ɤΤ褦˥ǥȤ館뤫ޤ⤷(إ
  ɤ 16 Ķ)ѴΥȥꤹȥͥ I/O Ϥ
  ˴졢IDENTIFY ޥɤͤѤޤ

  6.2.  SCSI ˴ؤܺ

  ΥȥϤɤʤäƤΤǤ礦Ĥϴñǡʤ
  Ϥޤ¿ʬΤꤿʤǤ礦ޤʤΤä
  ƤФˡfdisk  LILO 䥫ͥˤʤΤꤷʤǲ
  ȥ SCSI ȥȥǥδ֤ǤȤ٤Τ
  ɤ褦Ǥ SCSI ǥΥȥ fdisk  LILO 䥫
  ͥ˻ꤹ褦ۤϥۤǤ

  Ǥ⹥񿴤ΤޤɤƤȸĥΤǤСǥȤ
  碌뤳ȤǤޤSCSI ޥɤˤϡ̤Ĵ٤ READ
  CAPACITY ޥɤޤޤMODE SENSE ޥɤ Rigid Disk
  Drive Geometry ڡ(ڡ04)ϥȥإåɿ򶵤Ƥ
  (ѹϤǤޤ) Format ڡ(ڡ03)ϥΥХ
  ȥȥåΥ򶵤ƤޤԤ̥Υå˰¸
  ޤĤޤꡢȥåΥϲѤǤơ¦Υȥå
  ˤ¦ꤿΥäƤޤLinux  scsiinfo ץ
  Ϥä򶵤ƤޤäϾܺ٤ˤ᤿
  ʣξʤޤ餫ï¿ʬ OS ǤˤʾϻȤ
  ޤ󡣤ξ塢fdisk  LILO ˴ؤ¤ꡢ̤֤ C/H/S =
  4476/27/171 ʤɤȤͤϻȤʪˤʤޤ󡣤ȤΤϡѡƥ
  ơ֥ C/H/S  10/8/6 ӥåȤŤĤƤƤʤǤ
  (Ԥ䤤碌ȤΥåȤϡְĤΥǥǡ
  ȥåΥƱΰפȤΤȤǤ)

  Ǥϡͥ HDIO_GETGEO ΤξɤäƤƤΤ
  礦 SCSI ȥ餫äƤ뤫ˡǺä
  ޤޤɥ饤СˤäƤϲ桹ֿ¡פߤäƤȹͤ
  褦Ǥɤä DOS  OS/2  FDISK (䡢Adaptec
   AFDISK ʤ)ȤۤǤ

  ȤǡLinux  fdisk  H  S Ĥޤꡢإåɿȥȥå
  Ȥä LBA  C/H/S ɥ쥹Ѵޤ
   C ϻѤޤ󡣥ɥ饤ФˤäƤϡɥ饤Ф 1023*255*63 
  бǤ뤳ȤΤ餻뤿ˡ(C,H,S)=(1023,255,63) Ǥ
  𤷤ƤޤԹʤȤˡ줫ϼºݤ̤Ϥ狼ޤ󤷡
  fdisk ΤۤȤɤǤǡ갷̤ 8GB ˸ꤷƤޤޤ
  ϡμºݤξ¤ȤʤäƤޤ

  ʲεҤǤϡ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:
        C > 1024 ˤʤޤǤϡH=64, S=32 > 1024 ˤʤϡH=255,
        S=63, C=min(1023,M/(H*S))(ΤᡢC ϴݤƤꡢH*S*C
        ϥǥ M ȤϤʤޤ󡣤ϡƤǤ
        fdisk Ȥʤޤ)ppa.c ΥɤǤϡM ǤϤʤM+1 
        ѤƤꡢsd.c ΥХˤꡢ M  1 ΥեåȤäƤ
        Ƚ񤫤Ƥޤ

     advansys:
        C > 1024 ˤʤޤǤϡH=64, S=32ʹߤ BIOS  "> 1GB' 
        ץäƤ H=255, S=63 Ǥ

     aha1542:
        ȥ 2 ĤΤɤѴˡѤƤ뤫䤤
         H=255, S=63 H=64, S=32 β줫ѤޤԤȤ
        ƤϡưåȤ "aha1542.c: Using extended
        bios translation" ɽޤ

     aic7xxx:
        C > 1024 ˤʤޤǤ H=64, S=32ʹߤ "extended"ư
        ᡼ɥ饤ФͿƤ뤫 SEEPROM  BIOS Ρֳĥ
        ӥåȤΩƤƤʤС H=255, S=63Ǥ

     buslogic:
        C >= 1024 ˤʤޤǤ H=64, S=32ʹߤϥȥγĥ
        ѴѤƤ硢M < 2^22 ʤ H=123, S=32 ǡM >=
        2^22 ʤСH=255, S=63 Ǥ(C,H,S)Ԥä
        塢ѡƥơ֥ɤ߽ФޤơǽʣĤ
        ߹碌(H,S) = (64,32), (128,32), (255,63) Τ
        顢endH=H-1 ˤʤꤽʤΤ򤵤ޤơΤ褦ʵ
        ưåɽޤ "Adopting Geometry from Partition
        Table"

     fdomain:
        BIOS ɥ饤֥ѥ᡼ơ֥Υȥõѡ
        ƥơ֥ɤǡѡƥ󤬤ʤǽΥѡ
        ƥ(endH+1,endS) (H,S)ȤƻѤޤѡƥ
        󤬤ʤʤ

     o  M < 2^21 (1 GB)         => H=64, S=32

     o  M < 63*2^17 (3.9 GB)    => H=128, S=63

     o  ʳ                => H=255, S=63

     in2000:
        (H,S) = (64,32), (64,63), (128,63), (255,63)Τ<=1024 Ȥ
        ǽΤΤѤޤǸΤΤȤȤˤϡC=1023 ˴
        ޤ

     seagate:
        C,H,S ǥɤߤޤ(Ҥá)C  S 礭
        С S=17, H=2 ȤơC<=1024 Ȥʤޤ H ܤˤƤ
         M < 128*1024*17 (1.1GB) ΤȤH  0 ꤵ뤳
        Ȥ̣ޤϥХǤ

     ultrastor and u14_34f:
        ȥΥޥåԥ󥰥⡼ɤ˱ (H,S) = (16,63), (64,32),
        (64,63) ΤΰĤѤޤ

  ɥ饤СȥͿʤ硢ѡƥơ֥뤫鸭
  餫ˡǥȥ¬뤫ǥ̤¬ޤ

  ѡƥơ֥򸫤Ƥߤޤ礦ѡƥν򥷥
  ֤Ȥ§顢ɤΤ褦ʥѡƥǤäƤѡƥ
  ν꤬ end = (endC,endH,endS)ǤȤñ H = endH+1 and
  S = endS ȷ׻뤳ȤǤޤ(֤ޤ 1 
  ޤ)⤦̩ˤȡʲΤ褦ˤʤޤ⤷ѡƥ
  ¸ߤʤСbeginC äȤ礭ѡƥӤޤ
  ơend+1 start  length ­ˡȡѡƥν
  ꤬ˤȲꤹˡǷ׻ޤ⤷ξ
  뤫endC = 1023  start+length  (endH+1)*endS ܤʤ
  СΥѡƥ˥ˤƤȹͤ
  ޤ⤷줬ʤ褦ʤСĤޤѡƥ̵
  礭ʤѤʤСǥ M Τߤ򸫤ޤ르ꥺϡ

  o  H = M/(62*1024) ڤ夲

  o  S = M/(1024*H)  ڤ夲

  o  C = M/(H*S)     ڤΤ

     ǤˡϡC  1024, S  62 ˲褦ʸ̤
     ޤ

