home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / mini / Large-Disk < prev    next >
Text File  |  1999-05-19  |  47KB  |  1,057 lines

  1.   Large Disk HOWTO
  2.   Andries Brouwer, aeb@cwi.nl
  3.   v2.2a, 26 April 1999
  4.  
  5.   All about disk geometry and the 1024 cylinder limit for disks.
  6.  
  7.   1.  The problem
  8.  
  9.   Suppose you have a disk with more than 1024 cylinders.  Suppose
  10.   moreover that you have an operating system that uses the old INT13
  11.   BIOS interface to disk I/O.  Then you have a problem, because this
  12.   interface uses a 10-bit field for the cylinder on which the I/O is
  13.   done, so that cylinders 1024 and past are inaccessible.
  14.  
  15.   Fortunately, Linux does not use the BIOS, so there is no problem.
  16.  
  17.   Well, except for two things:
  18.  
  19.   (1) When you boot your system, Linux isn't running yet and cannot save
  20.   you from BIOS problems.  This has some consequences for LILO and
  21.   similar boot loaders.
  22.  
  23.   (2) It is necessary for all operating systems that use one disk to
  24.   agree on where the partitions are.  In other words, if you use both
  25.   Linux and, say, DOS on one disk, then both must interpret the
  26.   partition table in the same way.  This has some consequences for the
  27.   Linux kernel and for fdisk.
  28.  
  29.   Below a rather detailed description of all relevant details.  Note
  30.   that I used kernel version 2.0.8 source as a reference.  Other
  31.   versions may differ a bit.
  32.  
  33.  
  34.  
  35.   2.  Summary
  36.  
  37.   You got a new large disk. What to do? Well, on the sotware side: use
  38.   fdisk (or, better, cfdisk) to create partitions, and then mke2fs to
  39.   create a filesystem, and then mount to attach the new filesystem to
  40.   the big file hierarchy.
  41.  
  42.   You need not read this HOWTO since there are no problems with large
  43.   hard disks these days. The great majority of apparent problems is
  44.   caused by people who think there might be a problem and install a disk
  45.   manager, or go into fdisk expert mode, or specify explicit disk
  46.   geometries to LILO or on the kernel command line.
  47.  
  48.   However, typical problem areas are: (i) ancient hardware, (ii) several
  49.   operating systems on the same disk, and sometimes (iii) booting.
  50.  
  51.   Advice:
  52.  
  53.   For large SCSI disks: Linux has supported them from very early on.  No
  54.   action required.
  55.  
  56.   For large IDE disks: get a recent stable kernel (2.0.34 or later).
  57.   Usually, all will be fine now, especially if you were wise enough not
  58.   to ask the BIOS for disk translations like LBA and the like.
  59.  
  60.   If LILO hangs at boot time, also specify linear in the configuration
  61.   file /etc/lilo.conf.
  62.  
  63.   There may be geometry problems that can be solved by giving an
  64.   explicit geometry to kernel/LILO/fdisk.
  65.  
  66.  
  67.   If you have an old fdisk and it warns about ``overlapping''
  68.   partitions: ignore the warnings, or check using cfdisk that really all
  69.   is well.
  70.  
  71.   If you think something is wrong with the size of your disk, make sure
  72.   that you are not confusing binary and decimal ``'', and realize that
  73.   the free space that df reports on an empty disk is a few percent
  74.   smaller than the partition size, because there is administrative
  75.   overhead.
  76.  
  77.   Now, if you still think there are problems, or just are curious, read
  78.   on.
  79.  
  80.  
  81.   3.  Units and Sizes
  82.  
  83.   A kilobyte (kB) is 1000 bytes.  A megabyte (MB) is 1000 kB.  A
  84.   gigabyte (GB) is 1000 MB.  A terabyte (TB) is 1000 GB.  This is the SI
  85.   norm.  However, there are people that use 1 MB=1024000 bytes and talk
  86.   about 1.44 MB floppies, and people who think that 1 MB=1048576 bytes.
  87.   Here I follow the proposed standard and write Ki, Mi, Gi, Ti for the
  88.   binary units, so that these floppies are 1440 KiB (1.47 MB, 1.41 MiB),
  89.   1 MiB is 1048576 bytes (1.05 MB), 1 GiB is 1073741824 bytes (1.07 GB)
  90.   and 1 TiB is 1099511627776 bytes (1.1 TB).
  91.  
  92.   Quite correctly, the disk drive manufacturers follow the SI norm and
  93.   use the decimal units. However, Linux boot messages and some fdisk-
  94.   type programs use the symbols MB and GB for binary, or mixed binary-
  95.   decimal units. So, before you think your disk is smaller than was
  96.   promised when you bought it, compute first the actual size in decimal
  97.   units (or just in bytes).
  98.  
  99.  
  100.   3.1.  Sectorsize
  101.  
  102.   In the present text a sector has 512 bytes. This is almost always
  103.   true, but for example certain MO disks use a sectorsize of 2048 bytes,
  104.   and all capacities given below must be multiplied by four.  (When
  105.   using fdisk on such disks, make sure you have version 2.9i or later,
  106.   and give the `-b 2048' option.)
  107.  
  108.  
  109.   3.2.  Disksize
  110.  
  111.   A disk with C cylinders, H heads and S sectors per track has C*H*S
  112.   sectors in all, and can store C*H*S*512 bytes.  For example, if the
  113.   disk label says C/H/S=4092/16/63 then the disk has 4092*16*63=4124736
  114.   sectors, and can hold 4124736*512=2111864832 bytes (2.11 GB).  There
  115.   is an industry convention to give C/H/S=16383/16/63 for disks larger
  116.   than 8.4 GB, and the disk size can no longer be read off from the
  117.   C/H/S values reported by the disk.
  118.  
  119.  
  120.   4.  Disk Access
  121.  
  122.   In order to read or write something from or to the disk, we have to
  123.   specify a position on the disk, for example by giving a sector or
  124.   block number.  If the disk is a SCSI disk, then this sector number
  125.   goes directly into the SCSI command and is understood by the disk.  If
  126.   the disk is an IDE disk using LBA, then precisely the same holds.  But
  127.   if the disk is old, RLL or MFM or IDE from before the LBA times, then
  128.   the disk hardware expects a triple (cylinder,head,sector) to designate
  129.   the desired spot on the disk.
  130.  
  131.   The correspondence between the linear numbering and this 3D notation
  132.   is as follows: for a disk with C cylinders, H heads and S
  133.   sectors/track position (c,h,s) in 3D or CHS notation is the same as
  134.   position c*H*S + h*S + (s-1) in linear or LBA notation.  (The minus
  135.   one is because traditionally sectors are counted from 1, not 0, in
  136.   this 3D notation.)
  137.  
  138.   Consequently, in order to access a very old non-SCSI disk, we need to
  139.   know its geometry, that is, the values of C, H and S.
  140.  
  141.  
  142.   4.1.  BIOS Disk Access and the 1024 cylinder limit
  143.  
  144.   Linux does not use the BIOS, but some other systems do.  The BIOS,
  145.   which predates LBA times, offers with INT13 disk I/O routines that
  146.   have (c,h,s) as input.  (More precisely: AH selects the function to
  147.   perform, CH is the low 8 bits of the cylinder number, CL has in bits
  148.   7-6 the high two bits of the cylinder number and in bits 5-0 the
  149.   sector number, DH is the head number, and DL is the drive number (80h
  150.   or 81h).  This explains part of the layout of the partition table.)
  151.  
  152.   Thus, we have CHS encoded in three bytes, with 10 bits for the
  153.   cylinder number, 8 bits for the head number, and 6 bits for the track
  154.   sector number (numbered 1-63).  It follows that cylinder numbers can
  155.   range from 0 to 1023 and that no more than 1024 cylinders are BIOS
  156.   addressable.
  157.  
  158.   DOS and Windows software did not change when IDE disks with LBA
  159.   support were introduced, so DOS and Windows continued needing a disk
  160.   geometry, even when this was no longer needed for the actual disk I/O,
  161.   but only for talking to the BIOS. This again means that Linux needs
  162.   the geometry in those places where communication with the BIOS or with
  163.   other operating systems is required, even on a modern disk.
  164.  
  165.   This state of affairs lasted for four years or so, and then disks
  166.   appeared on the market that could not be addressed with the INT13
  167.   functions (because the 10+8+6=24 bits for (c,h,s) can address not more
  168.   than 8.5 GB) and a new BIOS interface was designed: the so-called
  169.   Extended INT13 functions, where DS:SI points at a 16-byte Disk Address
  170.   Packet that contains an 8-byte starting absolute block number.
  171.  
  172.   Very slowly the Microsoft world is moving towards using these Extended
  173.   INT13 functions. Probably a few years from now no modern system on
  174.   modern hardware will need the concept of `disk geometry' anymore.
  175.  
  176.  
  177.   4.2.  History of BIOS and IDE limits
  178.  
  179.  
  180.      ATA Specification (for IDE disks) - the 137 GB limit
  181.         At most 65536 cylinders (numbered 0-65535), 16 heads (numbered
  182.         0-15), 255 sectors/track (numbered 1-255), for a maximum total
  183.         capacity of 267386880 sectors (of 512 bytes each), that is,
  184.         136902082560 bytes (137 GB).  This is not yet a problem (in
  185.         1999), but will be a few years from now.
  186.  
  187.  
  188.      BIOS Int 13 - the 8.5 GB limit
  189.         At most 1024 cylinders (numbered 0-1023), 256 heads (numbered
  190.         0-255), 63 sectors/track (numbered 1-63) for a maximum total
  191.         capacity of 8455716864 bytes (8.5 GB). This is a serious
  192.         limitation today.  It means that DOS cannot use present day
  193.         large disks.
  194.  
  195.  
  196.      The 528 MB limit
  197.         If the same values for c,h,s are used for the BIOS Int 13 call
  198.         and for the IDE disk I/O, then both limitations combine, and one
  199.         can use at most 1024 cylinders, 16 heads, 63 sectors/track, for
  200.         a maximum total capacity of 528482304 bytes (528MB), the
  201.         infamous 504 MiB limit for DOS with an old BIOS.  This started
  202.         being a problem around 1993, and people resorted to all kinds of
  203.         trickery, both in hardware (LBA), in firmware (translating
  204.         BIOS), and in software (disk managers).  The concept of
  205.         `translation' was invented (1994): a BIOS could use one geometry
  206.         while talking to the drive, and another, fake, geometry while
  207.         talking to DOS, and translate between the two.
  208.  
  209.  
  210.      The 2.1 GB limit (April 1996)
  211.         Some older BIOSes only allocate 12 bits for the field in CMOS
  212.         RAM that gives the number of cylinders. Consequently, this
  213.         number can be at most 4095, and only 4095*16*63*512=2113413120
  214.         bytes are accessible.  The effect of having a larger disk would
  215.         be a hang at boot time.  This made disks with geometry
  216.         4092/16/63 rather popular. And still today many large disk
  217.         drives come with a jumper to make them appear 4092/16/63.  See
  218.         also over2gb.htm.
  219.  
  220.  
  221.      The 3.2 GB limit
  222.         There was a bug in the Phoenix 4.03 and 4.04 BIOS firmware that
  223.         would cause the system to lock up in the CMOS setup for drives
  224.         with a capacity over 3277 MB. See over3gb.htm.
  225.  
  226.  
  227.      The 4.2 GB limit (Feb 1997)
  228.         Simple BIOS translation (ECHS=Extended CHS, sometimes called
  229.         `Large disk support' or just `Large') works by repeatedly
  230.         doubling the number of heads and halving the number of cylinders
  231.         shown to DOS, until the number of cylinders is at most 1024.
  232.         Now DOS and Windows 95 cannot handle 256 heads, and in the
  233.         common case that the disk reports 16 heads, this means that this
  234.         simple mechanism only works up to 8192*16*63*512=4227858432
  235.         bytes (with a fake geometry with 1024 cylinders, 128 heads, 63
  236.         sectors/track).  Note that ECHS does not change the number of
  237.         sectors per track, so if that is not 63, the limit will be
  238.         lower.  See over4gb.htm.
  239.  
  240.  
  241.      The 7.9 GB limit
  242.         Slightly smarter BIOSes avoid the previous problem by first
  243.         adjusting the number of heads to 15 (`revised ECHS'), so that a
  244.         fake geometry with 240 heads can be obtained, good for
  245.         1024*240*63*512=7927234560 bytes.
  246.  
  247.  
  248.      The 8.4 GB limit
  249.  
  250.         Finally, if the BIOS does all it can to make this translation a
  251.         success, and uses 255 heads and 63 sectors/track (`assisted LBA'
  252.         or just `LBA') it may reach 1024*255*63*512=8422686720 bytes,
  253.         slightly less than the earlier 8.5 GB limit because the
  254.         geometries with 256 heads must be avoided.  (This translation
  255.         will use for the number of heads the first value H in the
  256.         sequence 16, 32, 64, 128, 255 for which the total disk capacity
  257.         fits in 1024*H*63*512, and then computes the number of cylinders
  258.         C as total capacity divided by (H*63*512).)
  259.  
  260.   For another discussion of this topic, see Breaking the Barriers, and,
  261.   with more details, IDE Hard Drive Capacity Barriers.
  262.  
  263.   Hard drives over 8.4 GB are supposed to report their geometry as
  264.   16383/16/63.  This in effect means that the `geometry' is obsolete,
  265.   and the total disk size can no longer be computed from the geometry.
  266.  
  267.  
  268.  
  269.  
  270.   5.  Booting
  271.  
  272.   When the system is booted, the BIOS reads sector 0 (known as the MBR -
  273.   the Master Boot Record) from the first disk (or from floppy or CDROM),
  274.   and jumps to the code found there - usually some bootstrap loader.
  275.   These small bootstrap programs found there typically have no own disk
  276.   drivers and use BIOS services.  This means that a Linux kernel can
  277.   only be booted when it is entirely located within the first 1024
  278.   cylinders.
  279.  
  280.   This problem is very easily solved: make sure that the kernel (and
  281.   perhaps other files used during bootup, such as LILO map files) are
  282.   located on a partition that is entirely contained in the first 1024
  283.   cylinders of a disk that the BIOS can access - probably this means the
  284.   first or second disk.
  285.  
  286.   Thus: create a small partition, say 10 MB large, so that there is room
  287.   for a handful of kernels, making sure that it is entirely contained
  288.   within the first 1024 cylinders of the first or second disk. Mount it
  289.   on /boot so that LILO will put its stuff there.
  290.  
  291.  
  292.  
  293.   5.1.  LILO and the `linear' option
  294.  
  295.   Another point is that the boot loader and the BIOS must agree as to
  296.   the disk geometry.  LILO asks the kernel for the geometry, but more
  297.   and more authors of disk drivers follow the bad habit of deriving a
  298.   geometry from the partition table, instead of telling LILO what the
  299.   BIOS will use. Thus, often the geometry supplied by the kernel is
  300.   worthless. In such cases it helps to give LILO the `linear' option.
  301.   The effect of this is that LILO does not need geometry information at
  302.   boot loader install time (it stores linear addresses in the maps) but
  303.   does the conversion of linear addresses at boot time. Why is this not
  304.   the default?  Well, there is one disadvantage: with the `linear'
  305.   option, LILO no longer knows about cylinder numbers, and hence cannot
  306.   warn you when part of the kernel was stored above the 1024 cylinder
  307.   limit, and you may end up with a system that does not boot.
  308.  
  309.  
  310.   5.2.  1024 cylinders is not 1024 cylinders
  311.  
  312.   Tim Williams writes: `I had my Linux partition within the first 1024
  313.   cylinders and still it wouldnt boot. First when I moved it below 1 GB
  314.   did things work.' How can that be? Well, this was a SCSI disk with
  315.   AHA2940UW controller which uses either H=64, S=32 (that is, cylinders
  316.   of 1 MiB = 1.05 MB), or H=255, S=63 (that is, cylinders of 8.2 MB),
  317.   depending on setup options in firmware and BIOS. No doubt the BIOS
  318.   assumed the former, so that the 1024 cylinder limit was found at 1
  319.   GiB, while Linux used the latter and LILO thought that this limit was
  320.   at 8.4 GB.
  321.  
  322.  
  323.   6.  Disk geometry, partitions and `overlap'
  324.  
  325.   If you have several operating systems on your disks, then each uses
  326.   one or more disk partitions.  A disagreement on where these partitions
  327.   are may have catastrophic consequences.
  328.  
  329.  
  330.   The MBR contains a partition table describing where the (primary)
  331.   partitions are.  There are 4 table entries, for 4 primary partitions,
  332.   and each looks like
  333.  
  334.  
  335.        struct partition {
  336.                char active;    /* 0x80: bootable, 0: not bootable */
  337.                char begin[3];  /* CHS for first sector */
  338.                char type;
  339.                char end[3];    /* CHS for last sector */
  340.                int start;      /* 32 bit sector number (counting from 0) */
  341.                int length;     /* 32 bit number of sectors */
  342.        };
  343.  
  344.  
  345.  
  346.  
  347.   (where CHS stands for Cylinder/Head/Sector).
  348.  
  349.   This information is redundant: the location of a partition is given
  350.   both by the 24-bit begin and end fields, and by the 32-bit start and
  351.   length fields.
  352.  
  353.   Linux only uses the start and length fields, and can therefore handle
  354.   partitions of not more than 2^32 sectors, that is, partitions of at
  355.   most 2 TiB.  That is a hundred times larger than the disks available
  356.   today, so maybe it will be enough for the next eight years or so.
  357.   (So, partitions can be very large, but there is a serious restriction
  358.   in that a file in an ext2 filesystem on hardware with 32-bit integers
  359.   cannot be larger than 2 GiB.)
  360.  
  361.   DOS uses the begin and end fields, and uses the BIOS INT13 call to
  362.   access the disk, and can therefore only handle disks of not more than
  363.   8.4 GB, even with a translating BIOS. (Partitions cannot be larger
  364.   than 2.1 GB because of restrictions of the FAT16 file system.) The
  365.   same holds for Windows 3.11 and WfWG and Windows NT 3.* and Novell
  366.   NetWare.
  367.  
  368.   Windows 95 has support for the Extended INT13 interface, and uses
  369.   special partition types (c, e, f instead of b, 6, 5) to indicate that
  370.   a partition should be accessed in this way.  When these partition
  371.   types are used, the begin and end fields contain dummy information
  372.   (1023/255/63).  Windows 95 OSR2 introduces the FAT32 file system
  373.   (partition type b or c), that allows partitions of size at most 2 TiB.
  374.  
  375.   What is this nonsense you get from fdisk about `overlapping'
  376.   partitions, when in fact nothing is wrong?  Well - there is something
  377.   `wrong': if you look at the begin and end fields of such partitions,
  378.   as DOS does, they overlap.  (And that cannot be corrected, because
  379.   these fields cannot store cylinder numbers above 1024 - there will
  380.   always be `overlap' as soon as you have more than 1024 cylinders.)
  381.   However, if you look at the start and length fields, as Linux does,
  382.   and as Windows 95 does in the case of partitions with partition type
  383.   c, e or f, then all is well.  So, ignore these warnings when cfdisk is
  384.   satisfied and you have a Linux-only disk. Be careful when the disk is
  385.   shared with DOS.  Use the commands cfdisk -Ps /dev/hdx and cfdisk -Pt
  386.   /dev/hdx to look at the partition table of /dev/hdx.
  387.  
  388.  
  389.  
  390.  
  391.   7.  Translation and Disk Managers
  392.  
  393.   Disk geometry (with heads, cylinders and tracks) is something from the
  394.   age of MFM and RLL. In those days it corresponded to a physical
  395.   reality. Nowadays, with IDE or SCSI, nobody is interested in what the
  396.   `real' geometry of a disk is.  Indeed, the number of sectors per track
  397.   is variable - there are more sectors per track close to the outer rim
  398.   of the disk - so there is no `real' number of sectors per track.
  399.   Quite the contrary: the IDE command INITIALIZE DRIVE PARAMETERS (91h)
  400.   serves to tell the disk how many heads and sectors per track it is
  401.   supposed to have today.  It is quite normal to see a large modern disk
  402.   that has 2 heads report 15 or 16 heads to the BIOS, while the BIOS may
  403.   again report 255 heads to user software.
  404.  
  405.   For the user it is best to regard a disk as just a linear array of
  406.   sectors numbered 0, 1, ..., and leave it to the firmware to find out
  407.   where a given sector lives on the disk. This linear numbering is
  408.   called LBA.
  409.  
  410.   So now the conceptual picture is the following.  DOS, or some boot
  411.   loader, talks to the BIOS, using (c,h,s) notation.  The BIOS converts
  412.   (c,h,s) to LBA notation using the fake geometry that the user is
  413.   using. If the disk accepts LBA then this value is used for disk I/O.
  414.   Otherwise, it is converted back to (c',h',s') using the geometry that
  415.   the disk uses today, and that is used for disk I/O.
  416.  
  417.   Note that there is a bit of confusion in the use of the expression
  418.   `LBA': As a term describing disk capabilities it means `Linear Block
  419.   Addressing' (as opposed to CHS Addressing). As a term in the BIOS
  420.   Setup, it describes a translation scheme sometimes called `assisted
  421.   LBA' - see above under ```'''.
  422.  
  423.   Something similar works when the firmware doesn't speak LBA but the
  424.   BIOS knows about translation.  (In the setup this is often indicated
  425.   as `Large'.)  Now the BIOS will present a geometry (C,H,S) to the
  426.   operating system, and use (C',H',S') while talking to the disk
  427.   controller.  Usually S = S', C = C'/N and H = H'*N, where N is the
  428.   smallest power of two that will ensure C' <= 1024 (so that least
  429.   capacity is wasted by the rounding down in C' = C/N).  Again, this
  430.   allows access of up to 8.4 GB (7.8 GiB).
  431.  
  432.   (The third setup option usually is `Normal', where no translation is
  433.   involved.)
  434.  
  435.   If a BIOS does not know about `Large' or `LBA', then there are
  436.   software solutions around.  Disk Managers like OnTrack or EZ-Drive
  437.   replace the BIOS disk handling routines by their own.  Often this is
  438.   accomplished by having the disk manager code live in the MBR and
  439.   subsequent sectors (OnTrack calls this code DDO: Dynamic Drive
  440.   Overlay), so that it is booted before any other operating system.
  441.   That is why one may have problems when booting from a floppy when a
  442.   Disk Manager has been installed.
  443.  
  444.   The effect is more or less the same as with a translating BIOS - but
  445.   especially when running several different operating systems on the
  446.   same disk, disk managers can cause a lot of trouble.
  447.  
  448.   Linux does support OnTrack Disk Manager since version 1.3.14, and EZ-
  449.   Drive since version 1.3.29.  Some more details are given below.
  450.  
  451.  
  452.  
  453.   8.  Kernel disk translation for IDE disks
  454.  
  455.   If the Linux kernel detects the presence of some disk manager on an
  456.   IDE disk, it will try to remap the disk in the same way this disk
  457.   manager would have done, so that Linux sees the same disk partitioning
  458.   as for example DOS with OnTrack or EZ-Drive.  However, NO remapping is
  459.   done when a geometry was specified on the command line - so a
  460.   `hd=cyls,heads,secs' command line option might well kill compatibility
  461.   with a disk manager.
  462.  
  463.   The remapping is done by trying 4, 8, 16, 32, 64, 128, 255 heads
  464.   (keeping H*C constant) until either C <= 1024 or H = 255.
  465.  
  466.   The details are as follows - subsection headers are the strings
  467.   appearing in the corresponding boot messages.  Here and everywhere
  468.   else in this text partition types are given in hexadecimal.
  469.  
  470.  
  471.   8.1.  EZD
  472.  
  473.   EZ-Drive is detected by the fact that the first primary partition has
  474.   type 55.  The geometry is remapped as described above, and the
  475.   partition table from sector 0 is discarded - instead the partition
  476.   table is read from sector 1.  Disk block numbers are not changed, but
  477.   writes to sector 0 are redirected to sector 1.  This behaviour can be
  478.   changed by recompiling the kernel with
  479.    #define FAKE_FDISK_FOR_EZDRIVE  0 in ide.c.
  480.  
  481.  
  482.   8.2.  DM6:DDO
  483.  
  484.   OnTrack DiskManager (on the first disk) is detected by the fact that
  485.   the first primary partition has type 54.  The geometry is remapped as
  486.   described above and the entire disk is shifted by 63 sectors (so that
  487.   the old sector 63 becomes sector 0).  Afterwards a new MBR (with
  488.   partition table) is read from the new sector 0.  Of course this shift
  489.   is to make room for the DDO - that is why there is no shift on other
  490.   disks.
  491.  
  492.  
  493.   8.3.  DM6:AUX
  494.  
  495.   OnTrack DiskManager (on other disks) is detected by the fact that the
  496.   first primary partition has type 51 or 53.  The geometry is remapped
  497.   as described above.
  498.  
  499.  
  500.   8.4.  DM6:MBR
  501.  
  502.   An older version of OnTrack DiskManager is detected not by partition
  503.   type, but by signature.  (Test whether the offset found in bytes 2 and
  504.   3 of the MBR is not more than 430, and the short found at this offset
  505.   equals 0x55AA, and is followed by an odd byte.) Again the geometry is
  506.   remapped as above.
  507.  
  508.  
  509.   8.5.  PTBL
  510.  
  511.   Finally, there is a test that tries to deduce a translation from the
  512.   start and end values of the primary partitions: If some partition has
  513.   start and end sector number 1 and 63, respectively, and end heads 31,
  514.   63, 127 or 254, then, since it is customary to end partitions on a
  515.   cylinder boundary, and since moreover the IDE interface uses at most
  516.   16 heads, it is conjectured that a BIOS translation is active, and the
  517.   geometry is remapped to use 32, 64, 128 or 255 heads, respectively.
  518.   However, no remapping is done when the current idea of the geometry
  519.   already has 63 sectors per track and at least as many heads (since
  520.   this probably means that a remapping was done already).
  521.  
  522.  
  523.   9.  Consequences
  524.  
  525.   What does all of this mean?  For Linux users only one thing: that they
  526.   must make sure that LILO and fdisk use the right geometry where
  527.   `right' is defined for fdisk as the geometry used by the other
  528.   operating systems on the same disk, and for LILO as the geometry that
  529.   will enable successful interaction with the BIOS at boot time.
  530.   (Usually these two coincide.)
  531.  
  532.   How does fdisk know about the geometry?  It asks the kernel, using the
  533.   HDIO_GETGEO ioctl.  But the user can override the geometry
  534.   interactively or on the command line.
  535.  
  536.   How does LILO know about the geometry?  It asks the kernel, using the
  537.   HDIO_GETGEO ioctl.  But the user can override the geometry using the
  538.   `disk=' option in /etc/lilo.conf (see lilo.conf(5)).  One may also
  539.   give the linear option to LILO, and it will store LBA addresses
  540.   instead of CHS addresses in its map file, and find out of the geometry
  541.   to use at boot time (by using INT 13 Function 8 to ask for the drive
  542.   geometry).
  543.  
  544.   How does the kernel know what to answer?  Well, first of all, the user
  545.   may have specified an explicit geometry with a `hda=cyls,heads,secs'
  546.   kernel command line option (see bootparam(7)).  And otherwise the
  547.   kernel will guess, possibly using values obtained from the BIOS or the
  548.   hardware.
  549.  
  550.  
  551.   10.  Details
  552.  
  553.  
  554.   10.1.  IDE details - the seven geometries
  555.  
  556.   The IDE driver has five sources of information about the geometry.
  557.   The first (G_user) is the one specified by the user on the command
  558.   line.  The second (G_bios) is the BIOS Fixed Disk Parameter Table (for
  559.   first and second disk only) that is read on system startup, before the
  560.   switch to 32-bit mode.  The third (G_phys) and fourth (G_log) are
  561.   returned by the IDE controller as a response to the IDENTIFY command -
  562.   they are the `physical' and `current logical' geometries.
  563.  
  564.   On the other hand, the driver needs two values for the geometry: on
  565.   the one hand G_fdisk, returned by a HDIO_GETGEO ioctl, and on the
  566.   other hand G_used, which is actually used for doing I/O.  Both G_fdisk
  567.   and G_used are initialized to G_user if given, to G_bios when this
  568.   information is present according to CMOS, and to to G_phys otherwise.
  569.   If G_log looks reasonable then G_used is set to that.  Otherwise, if
  570.   G_used is unreasonable and G_phys looks reasonable then G_used is set
  571.   to G_phys.  Here `reasonable' means that the number of heads is in the
  572.   range 1-16.
  573.  
  574.   To say this in other words: the command line overrides the BIOS, and
  575.   will determine what fdisk sees, but if it specifies a translated
  576.   geometry (with more than 16 heads), then for kernel I/O it will be
  577.   overridden by output of the IDENTIFY command.
  578.  
  579.   Note that G_bios is rather unreliable: for systems booting from SCSI
  580.   the first and second disk may well be SCSI disks, and the geometry
  581.   that the BIOS reported for sda is used by the kernel for hda.
  582.   Moreover, disks that are not mentioned in the BIOS Setup are not seen
  583.   by the BIOS. This means that, e.g., in an IDE-only system where hdb is
  584.   not given in the Setup, the geometries reported by the BIOS for the
  585.   first and second disk will apply to hda and hdc.
  586.  
  587.  
  588.   10.2.  SCSI details
  589.  
  590.   The situation for SCSI is slightly different, as the SCSI commands
  591.   already use logical block numbers, so a `geometry' is entirely
  592.   irrelevant for actual I/O.  However, the format of the partition table
  593.   is still the same, so fdisk has to invent some geometry, and also uses
  594.   HDIO_GETGEO here - indeed, fdisk does not distinguish between IDE and
  595.   SCSI disks.  As one can see from the detailed description below, the
  596.   various drivers each invent a somewhat different geometry.  Indeed,
  597.   one big mess.
  598.  
  599.   If you are not using DOS or so, then avoid all extended translation
  600.   settings, and just use 64 heads, 32 sectors per track (for a nice,
  601.   convenient 1 MiB per cylinder), if possible, so that no problems arise
  602.   when you move the disk from one controller to another.  Some SCSI disk
  603.   drivers (aha152x, pas16, ppa, qlogicfas, qlogicisp) are so nervous
  604.   about DOS compatibility that they will not allow a Linux-only system
  605.   to use more than about 8 GiB.  This is a bug.
  606.  
  607.   What is the real geometry?  The easiest answer is that there is no
  608.   such thing.  And if there were, you wouldn't want to know, and
  609.   certainly NEVER, EVER tell fdisk or LILO or the kernel about it.  It
  610.   is strictly a business between the SCSI controller and the disk.  Let
  611.   me repeat that: only silly people tell fdisk/LILO/kernel about the
  612.   true SCSI disk geometry.
  613.  
  614.   But if you are curious and insist, you might ask the disk itself.
  615.   There is the important command READ CAPACITY that will give the total
  616.   size of the disk, and there is the MODE SENSE command, that in the
  617.   Rigid Disk Drive Geometry Page (page 04) gives the number of cylinders
  618.   and heads (this is information that cannot be changed), and in the
  619.   Format Page (page 03) gives the number of bytes per sector, and
  620.   sectors per track.  This latter number is typically dependent upon the
  621.   notch, and the number of sectors per track varies - the outer tracks
  622.   have more sectors than the inner tracks.  The Linux program scsiinfo
  623.   will give this information.  There are many details and complications,
  624.   and it is clear that nobody (probably not even the operating system)
  625.   wants to use this information.  Moreover, as long as we are only
  626.   concerned about fdisk and LILO, one typically gets answers like
  627.   C/H/S=4476/27/171 - values that cannot be used by fdisk because the
  628.   partition table reserves only 10 resp. 8 resp. 6 bits for C/H/S.
  629.  
  630.   Then where does the kernel HDIO_GETGEO get its information from?
  631.   Well, either from the SCSI controller, or by making an educated guess.
  632.   Some drivers seem to think that we want to know `reality', but of
  633.   course we only want to know what the DOS or OS/2 FDISK (or Adaptec
  634.   AFDISK, etc) will use.
  635.  
  636.   Note that Linux fdisk needs the numbers H and S of heads and sectors
  637.   per track to convert LBA sector numbers into c/h/s addresses, but the
  638.   number C of cylinders does not play a role in this conversion.  Some
  639.   drivers use (C,H,S) = (1023,255,63) to signal that the drive capacity
  640.   is at least 1023*255*63 sectors.  This is unfortunate, since it does
  641.   not reveal the actual size, and will limit the users of most fdisk
  642.   versions to about 8 GiB of their disks - a real limitation in these
  643.   days.
  644.  
  645.   In the description below, M denotes the total disk capacity, and C, H,
  646.   S the number of cylinders, heads and sectors per track.  It suffices
  647.   to give H, S if we regard C as defined by M / (H*S).
  648.  
  649.   By default, H=64, S=32.
  650.  
  651.  
  652.      aha1740, dtc, g_NCR5380, t128, wd7000:
  653.         H=64, S=32.
  654.  
  655.  
  656.      aha152x, pas16, ppa, qlogicfas, qlogicisp:
  657.         H=64, S=32 unless C > 1024, in which case H=255, S=63, C =
  658.         min(1023, M/(H*S)).  (Thus C is truncated, and H*S*C is not an
  659.         approximation to the disk capacity M.  This will confuse most
  660.         versions of fdisk.)  The ppa.c code uses M+1 instead of M and
  661.         says that due to a bug in sd.c M is off by 1.
  662.  
  663.  
  664.      advansys:
  665.         H=64, S=32 unless C > 1024 and moreover the `> 1 GB' option in
  666.         the BIOS is enabled, in which case H=255, S=63.
  667.  
  668.  
  669.      aha1542:
  670.         Ask the controller which of two possible translation schemes is
  671.         in use, and use either H=255, S=63 or H=64, S=32.  In the former
  672.         case there is a boot message "aha1542.c: Using extended bios
  673.         translation".
  674.  
  675.  
  676.      aic7xxx:
  677.         H=64, S=32 unless C > 1024, and moreover either the "extended"
  678.         boot parameter was given, or the `extended' bit was set in the
  679.         SEEPROM or BIOS, in which case H=255, S=63.  In Linux 2.0.36
  680.         this extended translation would always be set in case no SEEPROM
  681.         was found, but in Linux 2.2.6 if no SEEPROM is found extended
  682.         translation is set only when the user asked for it using this
  683.         boot parameter (while when a SEEPROM is found, the boot
  684.         parameter is ignored).  This means that a setup that works under
  685.         2.0.36 may fail to boot with 2.2.6 (and require the `linear'
  686.         keyword for LILO, or the `aic7xxx=extended' kernel boot
  687.         parameter).
  688.  
  689.  
  690.      buslogic:
  691.         H=64, S=32 unless C >= 1024, and moreover extended translation
  692.         was enabled on the controller, in which case if M < 2^22 then
  693.         H=128, S=32; otherwise H=255, S=63.  However, after making this
  694.         choice for (C,H,S), the partition table is read, and if for one
  695.         of the three possibilities (H,S) = (64,32), (128,32), (255,63)
  696.         the value endH=H-1 is seen somewhere then that pair (H,S) is
  697.         used, and a boot message is printed "Adopting Geometry from
  698.         Partition Table".
  699.  
  700.  
  701.      fdomain:
  702.         Find the geometry information in the BIOS Drive Parameter Table,
  703.         or read the partition table and use H=endH+1, S=endS for the
  704.         first partition, provided it is nonempty, or use H=64, S=32 for
  705.         M < 2^21 (1 GiB), H=128, S=63 for M < 63*2^17 (3.9 GiB) and
  706.         H=255, S=63 otherwise.
  707.  
  708.  
  709.      in2000:
  710.         Use the first of (H,S) = (64,32), (64,63), (128,63), (255,63)
  711.         that will make C <= 1024.  In the last case, truncate C at 1023.
  712.  
  713.  
  714.      seagate:
  715.         Read C,H,S from the disk.  (Horrors!)  If C or S is too large,
  716.         then put S=17, H=2 and double H until C <= 1024.  This means
  717.         that H will be set to 0 if M > 128*1024*17 (1.1 GiB).  This is a
  718.         bug.
  719.  
  720.  
  721.      ultrastor and u14_34f:
  722.         One of three mappings ((H,S) = (16,63), (64,32), (64,63)) is
  723.         used depending on the controller mapping mode.
  724.  
  725.  
  726.   If the driver does not specify the geometry, we fall back on an
  727.   educated guess using the partition table, or using the total disk
  728.   capacity.
  729.  
  730.   Look at the partition table.  Since by convention partitions end on a
  731.   cylinder boundary, we can, given end = (endC,endH,endS) for any
  732.   partition, just put H = endH+1 and S = endS.  (Recall that sectors are
  733.   counted from 1.)  More precisely, the following is done.  If there is
  734.   a nonempty partition, pick the partition with the largest beginC.  For
  735.   that partition, look at end+1, computed both by adding start and
  736.   length and by assuming that this partition ends on a cylinder
  737.   boundary.  If both values agree, or if endC = 1023 and start+length is
  738.   an integral multiple of (endH+1)*endS, then assume that this partition
  739.   really was aligned on a cylinder boundary, and put H = endH+1 and S =
  740.   endS.  If this fails, either because there are no partitions, or
  741.   because they have strange sizes, then look only at the disk capacity
  742.   M.  Algorithm: put H = M/(62*1024) (rounded up), S = M/(1024*H)
  743.   (rounded up), C = M/(H*S) (rounded down).  This has the effect of
  744.   producing a (C,H,S) with C at most 1024 and S at most 62.
  745.  
  746.  
  747.   11.  The Linux IDE 8 GiB limit
  748.  
  749.   The Linux IDE driver gets the geometry and capacity of a disk (and
  750.   lots of other stuff) by using an ATA IDENTIFY request.  Until recently
  751.   the driver would not believe the returned value of lba_capacity if it
  752.   was more than 10% larger than the capacity computed by C*H*S. However,
  753.   by industry agreement large IDE disks (with more than 16514064
  754.   sectors) return C=16383, H=16, S=63, for a total of 16514064 sectors
  755.   (7.8 GB) independent of their actual size, but give their actual size
  756.   in lba_capacity.
  757.  
  758.   Recent Linux kernels (2.0.34, 2.1.90) know about this and do the right
  759.   thing. If you have an older Linux kernel and do not want to upgrade,
  760.   and this kernel only sees 8 GiB of a much larger disk, then try
  761.   changing the routine lba_capacity_is_ok in
  762.   /usr/src/linux/drivers/block/ide.c into something like
  763.  
  764.  
  765.        static int lba_capacity_is_ok (struct hd_driveid *id) {
  766.                id->cyls = id->lba_capacity / (id->heads * id->sectors);
  767.                return 1;
  768.        }
  769.  
  770.  
  771.  
  772.  
  773.   For a more cautious patch, see 2.1.90.
  774.  
  775.  
  776.   11.1.  BIOS complications
  777.  
  778.   As just mentioned, large disks return the geometry C=16383, H=16, S=63
  779.   independent of the actual size, while the actual size is returned in
  780.   the value of LBAcapacity.  Some BIOSes do not recognize this, and
  781.   translate this 16383/16/63 into something with fewer cylinders and
  782.   more heads, for example 1024/255/63 or 1027/255/63. So, the kernel
  783.   must not only recognize the single geometry 16383/16/63, but also all
  784.   BIOS-mangled versions of it.  Since 2.2.2 this is done correctly (by
  785.   taking the BIOS idea of H and S, and computing C = capacity/(H*S)).
  786.   Usually this problem is solved by setting the disk to Normal in the
  787.   BIOS setup (or, even better, to None, not mentioning it at all to the
  788.   BIOS). If that is impossible because you have to boot from it or use
  789.   it also with DOS/Windows, and upgrading to 2.2.2 or later is not an
  790.   option, use kernel boot parameters.
  791.  
  792.  
  793.   11.2.  Jumpers
  794.  
  795.   Many IBM disks have jumpers that allow you to choose between a 15-head
  796.   an a 16-head geometry. The default settings will give you a 16-head
  797.   disk. Sometimes both geometries address the same number of sectors,
  798.   sometimes the 15-head version is smaller.  There may be a good reason
  799.   for this setup: Petri Kaukasoina writes: `A 10.1 Gig IBM Deskstar 16
  800.   GP (model IBM-DTTA-351010) was jumpered for 16 heads as default but
  801.   this old PC (with AMI BIOS) didn't boot and I had to jumper it for 15
  802.   heads. hdparm -i tells RawCHS=16383/15/63 and LBAsects=19807200. I use
  803.   20960/15/63 to get the full capacity.'  The geometry 16383/15/63 is
  804.   not yet recognized by the kernel, so explicit boot parameters are
  805.   required here.  For the jumper settings, see
  806.   http://www.storage.ibm.com/techsup/hddtech/hddtech.htm.
  807.  
  808.  
  809.  
  810.   12.  The Linux 65535 cylinder limit
  811.  
  812.   The HDIO_GETGEO ioctl returns the number of cylinders in a short.
  813.   This means that if you have more than 65535 cylinders, the number is
  814.   truncated, and (for a typical SCSI setup with 1 MiB cylinders) a 80
  815.   GiB disk may appear as a 16 GiB one.  Once one recognizes what the
  816.   problem is, it is easily avoided.
  817.  
  818.  
  819.   13.  Extended and logical partitions
  820.  
  821.   ``Above,'' we saw the structure of the MBR (sector 0): boot loader
  822.   code followed by 4 partition table entries of 16 bytes each, followed
  823.   by an AA55 signature.  Partition table entries of type 5 or F or 85
  824.   (hex) have a special significance: they describe extended partitions:
  825.   blobs of space that are further partitioned into logical partitions.
  826.   (So, an extended partition is only a box, it cannot be used itself,
  827.   one uses the logical partitions inside.)  Only the location of the
  828.   first sector of an extended partition is important. This first sector
  829.   contains a partition table with four entries: one a logical partition,
  830.   one an extended partition, and two unused. In this way one gets a
  831.   chain of partition table sectors, scattered over the disk, where the
  832.   first one describes three primary partitions and the extended
  833.   partition, and each following partition table sector describes one
  834.   logical partition and the location of the next partition table sector.
  835.  
  836.   It is important to understand this: When people do something stupid
  837.   while partitioning a disk, they want to know: Is my data still there?
  838.   And the answer is usually: Yes. But if logical partitions were created
  839.   then the partition table sectors describing them are written at the
  840.   beginning of these logical partitions, and data that was there before
  841.   is lost.
  842.  
  843.   The program sfdisk will show the full chain. E.g.,
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.   # sfdisk -l -x /dev/hda
  860.  
  861.   Disk /dev/hda: 16 heads, 63 sectors, 33483 cylinders
  862.   Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0
  863.  
  864.      Device Boot Start     End   #cyls   #blocks   Id  System
  865.   /dev/hda1          0+    101     102-    51376+  83  Linux
  866.   /dev/hda2        102    2133    2032   1024128   83  Linux
  867.   /dev/hda3       2134   33482   31349  15799896    5  Extended
  868.   /dev/hda4          0       -       0         0    0  Empty
  869.  
  870.   /dev/hda5       2134+   6197    4064-  2048224+  83  Linux
  871.       -           6198   10261    4064   2048256    5  Extended
  872.       -           2134    2133       0         0    0  Empty
  873.       -           2134    2133       0         0    0  Empty
  874.  
  875.   /dev/hda6       6198+  10261    4064-  2048224+  83  Linux
  876.       -          10262   16357    6096   3072384    5  Extended
  877.       -           6198    6197       0         0    0  Empty
  878.       -           6198    6197       0         0    0  Empty
  879.   ...
  880.   /dev/hda10     30581+  33482    2902-  1462576+  83  Linux
  881.       -          30581   30580       0         0    0  Empty
  882.       -          30581   30580       0         0    0  Empty
  883.       -          30581   30580       0         0    0  Empty
  884.  
  885.   #
  886.  
  887.  
  888.  
  889.  
  890.   It is possible to construct bad partition tables.  Many kernels get
  891.   into a loop if some extended partition points back to itself or to an
  892.   earlier partition in the chain.  It is possible to have two extended
  893.   partitions in one of these partition table sectors so that the
  894.   partition table chain forks.  (This can happen for example with an
  895.   fdisk that does not recognize each of 5, F, 85 as an extended
  896.   partition, and creates a 5 next to an F.)  No standard fdisk type
  897.   program can handle such situations, and some handwork is required to
  898.   repair them.  The Linux kernel will accept a fork at the outermost
  899.   level.  That is, you can have two chains of logical partitions.
  900.   Sometimes this is useful - for example, one can use type 5 and be seen
  901.   by DOS, and the other type 85, invisible for DOS, so that DOS FDISK
  902.   will not crash because of logical partitions past cylinder 1024.
  903.  
  904.  
  905.  
  906.   14.  Problem solving
  907.  
  908.   Many people think they have problems, while in fact nothing is wrong.
  909.   Or, they think that the problems they have are due to disk geometry,
  910.   while in fact disk geometry has nothing to do with the matter.  All of
  911.   the above may have sounded complicated, but disk geometry handling is
  912.   extremely easy: do nothing at all, and all is fine; or perhaps give
  913.   LILO the keyword `linear' if it doesn't get past `LI' when booting.
  914.   Watch the kernel boot messages, and remember: the more you fiddle with
  915.   geometries (specifying heads and cylinders to LILO and fdisk and on
  916.   the kernel command line) the less likely it is that things will work.
  917.   Roughly speaking, all is fine by default.
  918.  
  919.   And remember: nowhere in Linux is disk geometry used, so no problem
  920.   you have while running Linux can be caused by disk geometry.  Indeed,
  921.   disk geometry is used only by LILO and by fdisk.  So, if LILO fails to
  922.   boot the kernel, that may be a geometry problem.  If different
  923.   operating systems do not understand the partition table, that may be a
  924.   geometry problem. Nothing else. In particular, if mount doesnt seem to
  925.   work, never worry about disk geometry - the problem is elsewhere.
  926.  
  927.  
  928.   14.1.  Problem: Linux invents the wrong geometry for my disk.
  929.  
  930.   It is quite possible that a disk gets the wrong geometry.  The Linux
  931.   kernel asks the BIOS about hd0 and hd1 (the BIOS drives numbered 80H
  932.   and 81H) and assumes that this data is for hda and hdb.  But on a
  933.   system that boots from SCSI, the first two disks may well be SCSI
  934.   disks, and thus it may happen that the fifth disk, which is the first
  935.   IDE disk hda, gets assigned a geometry belonging to sda.  Such things
  936.   are easily solved by giving boot parameters `hda=C,H,S' for the
  937.   appropriate numbers C, H and S, either at boot time or in
  938.   /etc/lilo.conf.
  939.  
  940.  
  941.  
  942.   14.2.  Nonproblem: Identical disks have different geometry?
  943.  
  944.   `I have two identical 10 GB IBM disks. However, fdisk gives different
  945.   sizes for them. Look:
  946.  
  947.  
  948.        # fdisk /dev/hdb
  949.        Disk /dev/hdb: 255 heads, 63 sectors, 1232 cylinders
  950.        Units = cylinders of 16065 * 512 bytes
  951.  
  952.           Device Boot  Start      End   Blocks   Id  System
  953.        /dev/hdb1           1     1232  9896008+  83  Linux native
  954.        # fdisk /dev/hdd
  955.        Disk /dev/hdd: 16 heads, 63 sectors, 19650 cylinders
  956.        Units = cylinders of 1008 * 512 bytes
  957.  
  958.           Device Boot  Start      End   Blocks   Id  System
  959.        /dev/hdd1           1    19650  9903568+  83  Linux native
  960.  
  961.  
  962.  
  963.  
  964.   How come?'
  965.  
  966.   What is happening here? Well, first of all these drives really are
  967.   10gig: hdb has size 255*63*1232*512 = 10133544960, and hdd has size
  968.   16*63*19650*512 = 10141286400, so, nothing is wrong and the kernel
  969.   sees both as 10.1 GB.  Why the difference in size? That is because the
  970.   kernel gets data for the first two IDE disks from the BIOS, and the
  971.   BIOS has remapped hdb to have 255 heads (and 16*19650/255=1232
  972.   cylinders).  The rounding down here costs almost 8 MB.
  973.  
  974.   If you would like to remap hdd in the same way, give the kernel boot
  975.   parameters `hdd=1232,255,63'.
  976.  
  977.  
  978.   14.3.  Nonproblem: fdisk sees much more room than df?
  979.  
  980.   fdisk will tell you how many blocks there are on the disk.  If you
  981.   make a filesystem on the disk, say with mke2fs, then this filesystem
  982.   needs some space for bookkeeping - typically something like 4% of the
  983.   filesystem size, more if you ask for a lot of inodes during mke2fs.
  984.   For example:
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.   # sfdisk -s /dev/hda9
  992.   4095976
  993.   # mke2fs -i 1024 /dev/hda9
  994.   mke2fs 1.12, 9-Jul-98 for EXT2 FS 0.5b, 95/08/09
  995.   ...
  996.   204798 blocks (5.00%) reserved for the super user
  997.   ...
  998.   # mount /dev/hda9 /somewhere
  999.   # df /somewhere
  1000.   Filesystem         1024-blocks  Used Available Capacity Mounted on
  1001.   /dev/hda9            3574475      13  3369664      0%   /mnt
  1002.   # df -i /somewhere
  1003.   Filesystem           Inodes   IUsed   IFree  %IUsed Mounted on
  1004.   /dev/hda9            4096000      11 4095989     0%  /mnt
  1005.   #
  1006.  
  1007.  
  1008.  
  1009.  
  1010.   We have a partition with 4095976 blocks, make an ext2 filesystem on
  1011.   it, mount it somewhere and find that it only has 3574475 blocks -
  1012.   521501 blocks (12%) was lost to inodes and other bookkeeping.  Note
  1013.   that the difference between the total 3574475 and the 3369664 avail¡
  1014.   able to the user are the 13 blocks in use plus the 204798 blocks
  1015.   reserved for root. This latter number can be changed by tune2fs.  This
  1016.   `-i 1024' is only reasonable for news spools and the like, with lots
  1017.   and lots of small files. The default would be:
  1018.  
  1019.  
  1020.        # mke2fs /dev/hda9
  1021.        # mount /dev/hda9 /somewhere
  1022.        # df /somewhere
  1023.        Filesystem         1024-blocks  Used Available Capacity Mounted on
  1024.        /dev/hda9            3958475      13  3753664      0%   /mnt
  1025.        # df -i /somewhere
  1026.        Filesystem           Inodes   IUsed   IFree  %IUsed Mounted on
  1027.        /dev/hda9            1024000      11 1023989     0%  /mnt
  1028.        #
  1029.  
  1030.  
  1031.  
  1032.  
  1033.   Now only 137501 blocks (3.3%) are used for inodes, so that we have 384
  1034.   MB more than before. (Apparently, each inode takes 128 bytes.)  On the
  1035.   other hand, this filesystem can have at most 1024000 files (more than
  1036.   enough), against 4096000 (too much) earlier.
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.