                         FYI

(Note: The origin of this information may be internal or external
to Novell.  Novell makes every effort within its means to verify
this information.  However, the information provided in this
document is FOR YOUR INFORMATION only.  Novell makes no explicit or
implied claims to the validity of this information.)


          TITLE: Selecting FDISK Partition Sizes
   DOCUMENT ID#: FYI-M-1207
           DATE: 08SEPT92
        PRODUCT: DR DOS
PRODUCT VERSION: 6
    SUPPLEMENTS: FYI-M-1208 

     
Important!
This Technical Bulletin describes the calculations necessary in
order to FDISK a hard drive with a specific cluster size. The
information contained in this document is intended for advanced
users and is not supported by Novell. 

The FDISK utility can erase all data on a physical drive and
backups of any existing data are strongly recommended before using
FDISK. 

The hard drive used as an example is a 405MB SCSI with 48 heads, 17
sectors per track and 1024 cylinders. 2KB clusters with a 16 bit
FAT are the target because this allows the maximum partition size
in MegaBytes with the smallest possible cluster. The cluster size
is kept as small as possible because this will be the smallest
amount of disk space, in bytes, that will be used for any file
(even zero byte files). This example assumes that the entire disk
will be utilized for DOS media. 

Conventions:
This document uses several mathematical formulas. To avoid
confusion, the dash/minus character "-" is only used for math
functions. Instead of using typical X or Y variables this document
will use variable names. Only one word for each variable will be
used. If a variable name would normally consist of more the one
word the words will be connected with underscores "_" to tie them
to a single name. An example would be the variable "sector size"
which is used in this document as "sector_size".

Mathematical operators used:
+    addition
-    subtraction
/    division
*    multiplication
<    less than
~=   approximately equal to
=    equal to

Definitions:
Hard Disk "Heads":  The number of heads for your hard disk. 

Sector:             A portion (or radial sector) of a track.

Track:              All sectors in a given track under a single
                    hard disk head.

Cylinder:           All sectors in a given track under all of the
                    hard disk heads. All "tracks" within the
                    cylinder are parallel to the hard disk's 
                    center of rotation. DOS supports a maximum of
                    1024 cylinders per physical hard disk.

Partition:          A collection of cylinders used by an Operating
                    System as it's file system.  By convention, all
                    partitions start on cylinder boundaries.

Primary Partition:  Under DOS, this is the Active Partition (where
                    DOS's system files are located).

Extended Partition: Under DOS, in order to reserve space on the
                    hard disk as owned by DOS and therefore
                    unavailable to any other operating system, 
                    DOS creates an Extended Partition within which
                    Logical Partitions can be created.

Logical Partition:  Under DOS, each Logical Partition resides
                    within the Extended Partition. There should be
                    at least one Logical Partition in the Extended
                    Partition.

Constants:
HD Head Count: 48 (30h)   This number is drive specific. In the
               sample hard disk, this is a translated value.
               Translation is a method that enables a disk with
               more than 1024 cylinders to be supported by DOS. 

Sectors/Track: 17 (11h )   This number is drive specific, but
               typically 17.

Sector Size:   512 bytes   Usually a constant, but if varied, this
               value must be a power of 2.

Cylinder Count:1023   DOS and most other software have this upper
               limit. Remember that this value is zero relative, so
               1023 means 1024 total cylinders.

FAT Sizes:     12 bit fats  4096-18 reserved values = 4078 entries
               16 bit fats 65536-18 reserved values = 65518 entries
               (binary 1000000000000 = decimal 4096)

Cluster Sizes: 2KB clusters 4 sectors per cluster (512 bytes each
               sector)
               4KB clusters   8 sectors per cluster
               8KB clusters   16 sectors per cluster
               16KB clusters  32 sectors per cluster

Maximum DOS Partition Sizes:
To determine the capacity of a drive multiply the FAT_SIZE with the
CUSTER_SIZE. This will be the size in Bytes. To get the size in
MegaBytes divide twice by 1024 and 3 times to get GigaBytes.

8MB = 12 bit FATs * 2KB Clusters  = (((4077 * 2048) / 1024) / 1024)

16MB= 12 bit FATs * 4KB Clusters  = (((4077 * 4096) / 1024) / 1024)

32MB= 12 bit FATs * 8KB Clusters  = (((4077 * 8192) / 1024) / 1024)

128MB= 16 bit FATs * 2KB Clusters  = (((65517 * 2048) / 1024) /  
       1024)

256MB= 16 bit FATs * 4KB Clusters  = (((65517 * 4096) / 1024) /   
       1024)

512MB= 16 bit FATs * 8KB Clusters  = (((65517 * 8192) / 1024) /   
       1024)

1GB = 16 bit FATs * 16KB Clusters = (((65517 * 16384) / 1024) /   
      1024 / 1024)

2GB = 16 bit FATs * 32KB Clusters = (((65517 * 32768) / 1024) /   
      1024 / 1024)

Cluster sizes are a direct result of the size of the partition. 
For example, requesting a partition size of 101M will result in a
partition with 16 bit FATs and a cluster size of 2KB,  just as a 12
bit FAT with 8KB clusters will be limited to 32MB.  The reason for
support of 12 bit FATs is backward compatibility with versions of
DOS prior to 3.0. 

Recommended Example of Logical Partition Layout:
To get 2KB clusters, the partition needs to be greater than 32MB
but less than 128MB. The example drive is 405MB. 4 Partitions of
101MB each will achieve the target cluster size.

32MB < Primary Part. 1 < 128MB (101MB  16 bit FATs with 2KB
Clusters)

32MB < Logical Part. 2 < 128MB (101MB  16 bit FATs with 2KB
Clusters)

32MB < Logical Part. 3 < 128MB (101MB  16 bit FATs with 2KB
Clusters)

32MB < Logical Part. 4 < 128MB (101MB  16 bit FATs with 2KB
Clusters)

Using FDISK to Create the Example Partitions:
Assuming that the hard disk is empty of partitions, create the
following partitions using FDISK.  Here are the necessary variables
and formulas for performing this task: 

divisor  = number_of_heads * number_sectors_per_track * sector_size
partition_size = size_of_partition_in_bytes / divisor
max_cylinders   = 1023  

In our example of 48 heads, 17 sectors and 512 byte sector size,
the divisor would be:
divisor = 48 * 17 * 512 = 417,792

partition_size =  101MB / divisor = 101 * 1024 * 1024 / 417,792 = 
 253.49 ~= 254

The reason for multiplying by 1024 twice is because the partition
size is in Bytes not MegaBytes. Round up any fractional amount.

max_cylinders = 1023 (or the maximum cylinder count for the sample
hard disk. FDISK will show you this value.)

Below is what is needed to create a disk with a 101MB primary
partition and 3 logical drives of 101MB each in 1 extended
partition. (This equates to having 4 drive letters - C: D: E: F:) 

1) Primary Partition with a Cylinder Range of (0,254).
Starting Cylinder = 0
Ending Cylinder = 254 (partition_size calculated above)

2) Create an Extended Partition with a Cylinder Range of (255,    
   1023).
Starting Cylinder = 255 (Ending Cylinder from step 1 + 1)
Ending Cylinder  = 1023 (max_cylinders)

3) Create a Logical Partition with a Cylinder Range of (255, 511).
Starting Cylinder = 255 (Same as the Starting Cylinder for the    
   Extended Partition in step 2.)
Ending Cylinder  = 511 (Starting Cylinder + partition_size)

4) Create a Logical Partition with a Cylinder Range of (512, 766).
Starting Cylinder = 512 (Ending Cylinder from step 3 + 1)
Ending Cylinder  = 766 (Starting Cylinder + partition_size)

5) Create a Logical Partition with a Cylinder Range of (767, 1023).
Starting Cylinder = 767 (Ending Cylinder of step 3 + 1)
Ending Cylinder  = 1023 (Starting Cylinder + partition_size)