COHERENT manpages

This page displays the COHERENT manpage for mkfs [Make a new file system].

List of available manpages
Index


mkfs -- Command

Make a new file system
/etc/mkfs [-b boot] [-d] [-f name] [-i inodes] [-m arg] [-n arg] [-p pack] filesystem proto

mkfs makes a new file system.   filesystem names the file (normally a block
special file) where  the new file system will reside.   The contents of the
newly created  file system are  described in proto.  proto can be  either a
number or a file name.

If proto is a number, mkfs  creates an empty file system (containing only a
root directory) of the size in blocks given by proto. The number of i-nodes
is calculated as a percentage of this number.  The command

    /etc/mkfs /dev/fha0 2400

creates a file system on a high-density, 5.25-inch diskette in drive 0.  If
the disk is a high-density, 3.5-inch diskette, use the command:

    /etc/mkfs /dev/fva0 2880

If proto is a file name, however, the contents of that file will be used as
a prototype for modeling the new  file system.  This prototype file must be
laid out in the following manner:

bootstrap_file_name  file_system_name  device_name
no._of_blocks  no._of_i-nodes  n   m
%b XX XX XX
...
directory_name
    directory_name mode user_id group_id contents
    ...
    $
$

Each line is described below.

The first  line has three  fields.  Field 1,  bootstrap_file_name, contains
the name of  a file that holds the boot  strap, which must fit into block 0
of the disk.  Field 2, file_system_name, gives the name of the file system;
and field  3, device_name, gives the name of  file system's physical device
(for example, /dev/hd1).  Only the first six characters in field 2 and  the
first 11 in field 3 are significant; all characters after them are ignored.

The second  line contains four  fields.  Field 1,  no._of_blocks, gives the
size of the file system in blocks; field 2, no_of_i-nodes, gives the number
of i-nodes in the file system.  Because each file or directory requires one
i-node, this number represents the limit on the number of files that may be
created in the  file system.  A ratio of seven  blocks per i-node generally
works well.

Fields 3 and 4 control free  list interleaving on your disk.  n is the size
of a  ``virtual cylinder'':  fsck allocates all  the blocks on  one virtual
cylinder before it  advances to the next virtual cylinder.   The value of n
must be less than or equal to 255, and should evenly divide the actual size
of a  cylinder on the device.   m tells the system how  many blocks to skip
each  time it  increments a  free list  block number,  i.e., the  free list
``interleave''; n mod m must be zero.  Choosing an optimal interleave value
may improve  system performance for  the device.  The optimal  values for n
and m are hardware-specific and can be determined by experimentation.

Next,  the third  line and  following begin  with %b.   These list  the bad
blocks on  your storage device.   One or more  block numbers may  appear on
each line, separated by white space.  These blocks are allocated to the bad
block file (i-node 1).

The remaining lines in the proto file define the names, modes, and contents
of the directories  and files in the file system.   These lines are divided
into fields separated by white space (blanks or tabs) as follows:

-> The first field  names the file or directory to  be created.  This field
   is missing on the first line,  which describes the root directory of the
   file system.

-> The second field describes the mode of the file, which is six characters
   long.  The  first character  gives the file  type, that is,  whether the
   file  is  ordinary  (`-'), directory  (`d'),  block  special (`b'),   or
   character special (`c').  The second character is `u' for set user id on
   execution,  and `-' otherwise.  The third character is `g' for set group
   id on  execution,  and  `-' otherwise.   Characters 4 through  6 specify
   permissions  in  octal;  for  example,  644  specifies  read  and  write
   permission for the owner, read  permission for other users from the same
   group, and read permission for users from other groups.
   If  the  above  file   type  were  a  directory,  subsequent  files  are
   recursively  defined under  that directory, until  the current  level of
   directory is terminated by a line containing a `$' character.

-> The next two fields specify the owner's numerical user id and group id.

-> The  last field  describes file  contents.  For a  directory, it  is not
   needed.  For  an ordinary file, it  is the name of  a COHERENT file that
   will be  copied into  the newly created  file.  For block  or character-
   special  files, there  are two  fields that specify  the numbers  of the
   major and minor devices.

Finally,  each  directory's  description and  the  entire  proto file  must
terminate with dollar signs `$'.

The proto file need not contain  all of the above fields.  However, it must
contain the name  of the boot block (line 1),  the number of blocks and the
number of  i-nodes (line 2), the  list of bad blocks, the  name of at least
one directory, and the dollar sign that ends the file.

Command-line Options

mkfs recognizes the following command-line options:

-b boot
   Specifies the file to use as the ``bootstrap'' for the file system.

-d Preserve file dates and times on the new file system.

-f name
   Label the file system with the given name.  name must be less than seven
   characters in length.

-i inodes
   Use inodes as the number of inodes for the file system.

-m arg
   Set the number of blocks to skip when incrementing virtual block number.
   This is the same as the m option as set on line 2 of the prototype file.
   You can use this option if you choose not to use a prototype file.

-n arg
   Set  the size  of a  ``virtual cylinder''.   This is the  same as  the n
   option as set on line 2  of the prototype file.  You can use this option
   if you choose not to use a prototype file.

-p pack
   Set the file system ``pack name'' to pack.  pack must be less than seven
   characters in length.

Example

The following example specifies  a proto file for a high-density, 5.25-inch
floppy disk; note that this floppy  disk is faulty and contains a number of
bad blocks:

/conf/boot.fha
2400 100
%b 55
%b 185 86
d--755 3 1
     coherent ---644 3 1 /coherent
     tmp     d--777 3 1
     $
     bin     d--755 3 1
             mail   -u-755 0 1 /bin/mail
     $
     dev     d--755 3 1
             tty30  c--644 0 1 3 0
             tty35  c--644 0 1 3 5
             mt0    b--600 0 1 12 0
     $
$

You can use  the command badscan to draw up  the list of bad blocks on your
disk and create a skeleton proto file.

See Also

badscan,
chmod,
commands,
fsck,
mount,
restor

Notes

When the command fsck checks a  file system, it stores files that it cannot
decypher  into directory  lost+found. However,  fsck  cannot modify  a file
system  during  its work.   This  rule  was adopted  to  prevent fsck  from
attempting to  modify a corrupt  file system, and so  making matters worse.
However, this  means that (among other things) fsck  cannot change the size
of directory  lost+found. Thus,  if more files  are detached from  the file
system than  lost+found can hold, fsck must delete  them outright.  If your
newly  created file  system will  hold  a large  number of  transient files
(e.g., a news  system), you should increase the size  of lost+found so that
it has  a fighting chance  of holding all  detached files that  fsck finds.
For example, the following script expands  /lost+found so it can hold up to
500 files:

    su root
    for i in `from 1 to 500`
    do
        touch /lost+found/$i
    done
    rm /lost+found/*

Run this script for each file system whose lost+found directory you wish to
expand.  For example, if you have  a file system mount on directory /u, run
this script for directory /u/lost+found instead of for /lost+found.