Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ fs(4S5) — UnixWare 2.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

fsck(1M)

fsdb(1M)

inode(4S5)

mkfs(1M)

mount(2)






       fs(4S5)                         (S5)                         fs(4S5)


       NAME
             fs (s5) - format of s5 file system volume

       SYNOPSIS
             #include <sys/types.h>
             #include <sys/param.h>
             #include <sys/fs/s5filsys.h>

       DESCRIPTION
             Every file system storage volume has a common format for
             certain vital information.  Every such volume is divided into
             a certain number of 512-byte long sectors.  Sector 0 is unused
             and is available to contain a bootstrap program or other
             information.

             Sector 1 is the super-block.  The format of a super-block is:

             struct    filsys
             {
               ushort  s_isize;          /* size in blocks of i-list */
               daddr_t s_fsize;          /* size in blocks of entire volume */
               short   s_nfree;          /* number of addresses in s_free */
               daddr_t s_free[NICFREE];  /* free block list */
               short   s_ninode;         /* number of i-nodes in s_inode */
               o_ino_t s_inode[NICINOD]; /* free i-node list */
               char    s_flock;          /* lock during free list */
                                         /* manipulation */
               char    s_ilock;          /* lock during i-list manipulation */
               char    s_fmod;           /* super block modified flag */
               char    s_ronly;          /* mounted read-only flag */
               time_t  s_time;           /* last super block update */
               short   s_dinfo[4];       /* device information */
               daddr_t s_tfree;          /* total free blocks*/
               o_ino_t s_tinode;         /* total free i-nodes */
               char    s_fname[6];       /* file system name */
               char    s_fpack[6];       /* file system pack name */
               long    s_fill[12];       /* ADJUST to make */
                                         /* sizeof filsys be 512 */
               long    s_state;          /* file system state */
               long    s_magic;          /* magic number to denote new file
                                         /* system */
               long    s_type;           /* type of new file system */
             };
             #define FsMAGIC   0xfd187e20  /* s_magic number */
             #define Fs1b      1           /* 512-byte block */
             #define Fs2b      2           /* 1024-byte block */


                           Copyright 1994 Novell, Inc.               Page 1













      fs(4S5)                         (S5)                         fs(4S5)


            #define Fs4b      3           /* 2048-byte block */
            #define FsOKAY    0x7c269d38  /* s_state: clean */
            #define FsACTIVE  0x5e72d81a  /* s_state: active */
            #define FsBAD     0xcb096f43  /* s_state: bad root */
            #define FsBADBLK  0xbadbc14b  /* s_state: bad block corrupted it */

            s_type indicates the file system type.  Currently, three types
            of  file  systems are supported: the original 512-byte logical
            block, the 1024-byte logical block, and the 2048-byte  logical
            block.  s_magic is used to distinguish the s5 file system from
            other FSTypes.  The s_type field  is  used  to  determine  the
            blocksize  of  the  file  system;  512-bytes,  1K, or 2K.  The
            operating system takes care of all  conversions  from  logical
            block numbers to physical sector numbers.

            s_state is unique for each file system and indicates the state
            of  the file system.  The numerical value of the ``file system
            state'' is computed as the sum of s_state and s_time and  will
            ordinarily  be  one  of FsOKAY, FsACTIVE, or FsBAD.  A cleanly
            unmounted, undamaged file system is indicated  by  the  FsOKAY
            state.   After  a file system had been mounted for update, the
            state changes to FsACTIVE.  The state reverts to FsOKAY  after
            a  file system has been unmounted.  A special case is used for
            the root file system.  If it appears damaged at boot time,  it
            is mounted but marked FsBAD.

            s_isize is the address of the first data block  after  the  i-
            list;  the i-list starts just after the super-block, namely in
            block 2; thus the i-list is s_isize-2 blocks long.  s_fsize is
            the  first block not potentially available for allocation to a
            file.  These numbers are used by the system to check  for  bad
            block  numbers; if an ``impossible'' block number is allocated
            from the free list or is freed, a diagnostic is written on the
            on-line  console.   Moreover, the free array is cleared, so as
            to prevent further allocation from a presumably corrupted free
            list.

            The free list for each volume is maintained as  follows.   The
            s_free  array  contains, in s_free[1], ..., s_free[s_nfree-1],
            up to 49 numbers of  free  blocks.   s_free[0]  is  the  block
            number  of the head of a chain of blocks constituting the free
            list.  The first long in each free-chain block is  the  number
            (up  to  50) of free-block numbers listed in the next 50 longs
            of this chain member.  The first of these  50  blocks  is  the
            link  to  the  next member of the chain.  To allocate a block:
            decrement s_nfree, and the new block is  s_free[s_nfree].   If


                          Copyright 1994 Novell, Inc.               Page 2













       fs(4S5)                         (S5)                         fs(4S5)


             the  new  block number is 0, there are no blocks left, so give
             an error.  If s_nfree became 0, read in the block named by the
             new  block number, replace s_nfree by its first word, and copy
             the block numbers in the next 50 longs into the s_free  array.
             To  free  a block, check if s_nfree is 50; if so, copy s_nfree
             and the s_free array into it, write it out, and set s_nfree to
             0.   In  any  event  set  s_free[s_nfree] to the freed block's
             number and increment s_nfree.

             s_tfree is the total free blocks available in the file system.

             s_ninode is the number of free i-numbers in the s_inode array.
             To  allocate  an  i-node:  if  s_ninode  is  greater  than  0,
             decrement it and return s_inode[s_ninode].  If it was 0,  read
             the  i-list  and  place the numbers of all free i-nodes (up to
             100) into the s_inode array, then try again.  To  free  an  i-
             node,  provided  s_ninode  is  less than 100, place its number
             into s_inode[s_ninode] and increment s_ninode.  If s_ninode is
             already  100, do not bother to enter the freed i-node into any
             table.   This  list  of  i-nodes  is  only  to  speed  up  the
             allocation  process;  the information as to whether the i-node
             is really free or not is maintained in the i-node itself.

             s_tinode is the total  free  i-nodes  available  in  the  file
             system.

             s_flock and s_ilock are flags maintained in the core  copy  of
             the  file  system while it is mounted and their values on disk
             are immaterial.  The value  of  s_fmod  on  disk  is  likewise
             immaterial;  it  is used as a flag to indicate that the super-
             block has changed and should be copied to the disk during  the
             next periodic update of file system information.

             s_ronly is a read-only flag to indicate write-protection.

             s_time is the last time the super-block of the file system was
             changed,  and is the number of seconds that have elapsed since
             00:00 Jan. 1, 1970 (UTC).  During a reboot, the s_time of  the
             super-block  for  the  root  file  system  is  used to set the
             system's idea of the time.

             s_fname is the name of the file system and s_fpack is the name
             of the pack.





                           Copyright 1994 Novell, Inc.               Page 3













      fs(4S5)                         (S5)                         fs(4S5)


            I-numbers begin at 1, and the storage for  i-nodes  begins  in
            block  2.   Also,  i-nodes  are  64  bytes  long.  I-node 1 is
            reserved for future use.  I-node 2 is reserved  for  the  root
            directory  of  the  file  system,  but no other i-number has a
            built-in meaning.  Each i-node represents one file.   For  the
            format of an i-node and its flags, see inode(4S5).

      REFERENCES
            fsck(1M), fsdb(1M), s5-specific inode(4S5), mkfs(1M), mount(2)







































                          Copyright 1994 Novell, Inc.               Page 4








Typewritten Software • bear@typewritten.org • Edmonds, WA 98026