Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ fs_ufs(4) — Atari System V ue12

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

inode(4)





   fs(4)                              (UFS)                              fs(4)


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

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

   DESCRIPTION
         Each disk drive contains some number of file systems.  A file system
         consists of a number of cylinder groups.  Each cylinder group has
         inodes and data.

         A file system is described by its super-block, and by the information
         in the cylinder group blocks.  The super-block is critical data and
         is replicated before each cylinder group block to protect against
         catastrophic loss.  This is done at mkfs time; the critical super-
         block data does not change, so the copies need not normally be
         referenced further.

               /*
                * Super block for a file system.
                */
               #define FSMAGIC        0x011954
               #define FSACTIVE        0x5e72d81a  /* fsstate: mounted */
               #define FSOKAY          0x7c269d38  /* fsstate: clean */
               #define FSBAD           0xcb096f43  /* fsstate: bad root */

               struct  fs {
                       struct  fs *fslink;            /* linked list of file systems */
                       struct  fs *fsrlink;           /*     used for incore super blocks */
                       daddrt fssblkno;              /* addr of super-block in filesys */
                       daddrt fscblkno;              /* offset of cyl-block in filesys */
                       daddrt fsiblkno;              /* offset of inode-blocks in filesys */
                       daddrt fsdblkno;              /* offset of first data after cg */
                       long    fscgoffset;            /* cylinder group offset in cylinder */
                       long    fscgmask;              /* used to calc mod fsntrak */
                       timet  fstime;                /* last time written */
                       long    fssize;                /* number of blocks in fs */
                       long    fsdsize;               /* number of data blocks in fs */
                       long    fsncg;                 /* number of cylinder groups */
                       long    fsbsize;               /* size of basic blocks in fs */
                       long    fsfsize;               /* size of frag blocks in fs */
                       long    fsfrag;                /* number of frags in a block in fs */
               /* these are configuration parameters */
                       long    fsminfree;             /* minimum percentage of free blocks */
                       long    fsrotdelay;            /* num of ms for optimal next block */
                       long    fsrps;                 /* disk revolutions per second */
               /* these fields can be computed from the others */
                       long    fsbmask;               /* ``blkoff'' calc of blk offsets */
                       long    fsfmask;               /* ``fragoff'' calc of frag offsets */


   7/91                                                                 Page 1









   fs(4)                              (UFS)                              fs(4)


                       long    fsbshift;              /* ``lblkno'' calc of logical blkno */
                       long    fsfshift;              /* ``numfrags'' calc number of frags */
               /* these are configuration parameters */
                       long    fsmaxcontig;           /* max number of contiguous blks */
                       long    fsmaxbpg;              /* max number of blks per cyl group */
               /* these fields can be computed from the others */
                       long    fsfragshift;           /* block to frag shift */
                       long    fsfsbtodb;             /* fsbtodb and dbtofsb shift constant */
                       long    fssbsize;              /* actual size of super block */
                       long    fscsmask;              /* csum block offset */
                       long    fscsshift;             /* csum block number */
                       long    fsnindir;              /* value of NINDIR */
                       long    fsinopb;               /* value of INOPB */
                       long    fsnspf;                /* value of NSPF */
                       long    fsoptim;               /* optimization preference, see below */
                     long  fsstate;         /* fiel system state */
                       long    fssparecon[2];         /* reserved for future constants */
               /* a unique id for this filesystem (currently unused and unmaintained) */
                       long    fsid[2];               /* file system id */
               /* sizes determined by number of cylinder groups and their sizes */
                       daddrt fscsaddr;              /* blk addr of cyl grp summary area */
                       long    fscssize;              /* size of cyl grp summary area */
                       long    fscgsize;              /* cylinder group size */
               /* these fields should be derived from the hardware */
                       long    fsntrak;               /* tracks per cylinder */
                       long    fsnsect;               /* sectors per track */
                       long    fsspc;                 /* sectors per cylinder */
               /* this comes from the disk driver partitioning */
                       long    fsncyl;                /* cylinders in file system */
               /* these fields can be computed from the others */
                       long    fscpg;                 /* cylinders per group */
                       long    fsipg;                 /* inodes per group */
                       long    fsfpg;                 /* blocks per group * fsfrag */
               /* this data must be re-computed after crashes */
                       struct  csum fscstotal;        /* cylinder summary information */
               /* these fields are cleared at mount time */
                       char    fsfmod;                /* super block modified flag */
                       char    fsclean;               /* file system is clean flag */
                       char    fsronly;               /* mounted read-only flag */
                       char    fsflags;               /* currently unused flag */
                       char    fsfsmnt[MAXMNTLEN];    /* name mounted on */
               /* these fields retain the current block allocation info */
                       long    fscgrotor;             /* last cg searched */
                       struct  csum *fscsp[MAXCSBUFS];/* list of fscs info buffers */
                       long    fscpc;                 /* cyl per cycle in postbl */
                       short   fspostbl[MAXCPG][NRPOS];/* head of blocks for each rotation */
                       long    fsmagic;               /* magic number */
                       uchar  fsrotbl[1];            /* list of blocks for each rotation */
               };




   Page 2                                                                 7/91









   fs(4)                              (UFS)                              fs(4)


         /*
          * Cylinder group block for a file system.
          */

               #define CGMAGIC        0x090255
               struct  cg {
                       struct  cg *cglink;            /* linked list of cyl groups */
                       struct  cg *cgrlink;           /*     used for incore cyl groups */
                       timet  cgtime;                /* time last written */
                       long    cgcgx;                 /* we are the cgx'th cylinder group */
                       short   cgncyl;                /* number of cyl's this cg */
                       short   cgniblk;               /* number of inode blocks this cg */
                       long    cgndblk;               /* number of data blocks this cg */
                       struct  csum cgcs;             /* cylinder summary information */
                       long    cgrotor;               /* position of last used block */
                       long    cgfrotor;              /* position of last used frag */
                       long    cgirotor;              /* position of last used inode */
                       long    cgfrsum[MAXFRAG];      /* counts of available frags */
                       long    cgbtot[MAXCPG];        /* block totals per cylinder */
                       short   cgb[MAXCPG][NRPOS];    /* positions of free blocks */
                       char    cgiused[MAXIPG/NBBY];  /* used inode map */
                       long    cgmagic;               /* magic number */
                       uchar  cgfree[1];             /* free block map */
               };

   SEE ALSO
         ufs-specific inode(4)


























   7/91                                                                 Page 3





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