Annotation of researchv10dc/dist/man/v4/man5/fs.5, revision 1.1.1.1

1.1       root        1: .th "FILE SYSTEM" V 9/7/73
                      2: .sh NAME
                      3: fs \*- format of file system volume
                      4: .sh DESCRIPTION
                      5: .ft I
                      6: Caution: this information applies only to
                      7: the latest versions of the UNIX system.
                      8: .s3
                      9: .ft R
                     10: Every
                     11: file system storage volume
                     12: (e.g. RF disk, RK disk, RP disk, DECtape reel)
                     13: has a common format for certain vital information.
                     14: Every such volume is divided into a certain number
                     15: of 256 word (512 byte) blocks.
                     16: Block 0 is unused and is available to contain
                     17: a bootstrap program, pack label, or other information.
                     18: .s3
                     19: Block 1 is the
                     20: .it "super block."
                     21: Starting from its first word, the format of a super-block is
                     22: .s3
                     23: .nf
                     24: struct {
                     25:        int     isize;
                     26:        int     fsize;
                     27:        int     nfree;
                     28:        int     free[100];
                     29:        int     ninode;
                     30:        int     inode[100];
                     31:        char    flock;
                     32:        char    ilock;
                     33:        char    fmod;
                     34:        int     time[2];
                     35: };
                     36: .s3
                     37: .fi
                     38: .it Isize
                     39: is the number of blocks devoted to the i-list,
                     40: which starts just after the super-block, in block 2.
                     41: .it Fsize
                     42: is the first block not potentially available for allocation
                     43: to a file.
                     44: This number is unused by the system, but is used by
                     45: programs like
                     46: .it "check (I)"
                     47: to test for bad block numbers.
                     48: The free list for each volume is maintained as
                     49: follows.
                     50: The
                     51: .it free
                     52: array contains, in
                     53: .it "free[1], ... , free[nfree\*-1],"
                     54: up to 99 numbers of free blocks.
                     55: .it Free[0]
                     56: is the block number of the head
                     57: of a chain of blocks constituting the free list.
                     58: The first word in each free-chain block is the number
                     59: (up to 100) of free-block numbers listed in the
                     60: next 100 words of this chain member.
                     61: The first of these 100 blocks is the link to the
                     62: next member of the chain.
                     63: To allocate a block:
                     64: decrement
                     65: .it nfree,
                     66: and the new block is
                     67: .it free[nfree].
                     68: If the new block number is 0,
                     69: there are no blocks left, so give an error.
                     70: If
                     71: .it nfree
                     72: became 0,
                     73: read in the block named by the new block number,
                     74: replace
                     75: .it nfree
                     76: by its first word,
                     77: and copy the block numbers in the next 100 words into the
                     78: .it free
                     79: array.
                     80: To free a block, check if
                     81: .it nfree
                     82: is 100; if so,
                     83: copy
                     84: .it nfree
                     85: and the
                     86: .it free
                     87: array into it,
                     88: write it out, and set
                     89: .it nfree
                     90: to 0.
                     91: In any event set
                     92: .it free[nfree]
                     93: to the freed block's number and
                     94: increment
                     95: .it nfree.
                     96: .s3
                     97: .it Ninode
                     98: is the number of free i-numbers in the
                     99: .it inode
                    100: array.
                    101: To allocate an i-node:
                    102: if
                    103: .it ninode
                    104: is greater than 0,
                    105: decrement it and return
                    106: .it inode[ninode].
                    107: If it was 0, read the i-list
                    108: and place the numbers of all free inodes
                    109: (up to 100) into the
                    110: .it inode
                    111: array,
                    112: then try again.
                    113: To free an i-node,
                    114: provided
                    115: .it ninode
                    116: is less than 100,
                    117: place its number into
                    118: .it inode[ninode]
                    119: and increment
                    120: .it ninode.
                    121: If
                    122: .it ninode
                    123: is already 100, don't bother to enter the freed i-node into any table.
                    124: This list of i-nodes is only to speed
                    125: up the allocation process; the information
                    126: as to whether the inode is really free
                    127: or not is maintained in the inode itself.
                    128: .s3
                    129: .it Flock
                    130: and
                    131: .it ilock
                    132: are flags maintained in the core
                    133: copy of the file system
                    134: while it is mounted
                    135: and their values on disk are immaterial.
                    136: The value of
                    137: .it fmod
                    138: on disk is likewise immaterial;
                    139: it is used as a flag to indicate that the super-block has
                    140: changed and should be copied to
                    141: the disk during the next periodic update of file
                    142: system information.
                    143: .s3
                    144: .it Time
                    145: is the last time the super-block of the file system was changed,
                    146: and is a double-precision representation
                    147: of the number of seconds that have elapsed
                    148: since
                    149: 0000 Jan. 1 1970 (GMT).
                    150: During a reboot, the
                    151: .it time
                    152: of the super-block for the root file system
                    153: is used to set the system's idea of the time.
                    154: .s3
                    155: I-numbers begin at 1, and the storage for i-nodes
                    156: begins in block 2.
                    157: .tr |
                    158: Also, i-nodes are 32 bytes long, so 16 of them fit into a block.
                    159: Therefore, i-node
                    160: .it i
                    161: is located in block (\fIi\fR|+|31)|/|16, and begins
                    162: 32\u\fB.\fR\d((\fIi\fR|+|31)|(mod 16) bytes from its start.
                    163: I-node 1 is reserved for the root directory of the file
                    164: system, but no other i-number has a built-in
                    165: meaning.
                    166: Each i-node represents one file.
                    167: The format of an i-node is as follows.
                    168: .s3
                    169: .nf
                    170: .if t .ta .5i 1.i 2.5i
                    171: struct {
                    172:        int     flags;  /* +0: see below */
                    173:        char    nlinks; /* +2: number of links to file */
                    174:        char    uid;    /* +3: user ID of owner */
                    175:        char    gid;    /* +4: group ID of owner */
                    176:        char    size0;  /* +5: high byte of 24-bit size */
                    177:        int     size1;  /* +6: low word of 24-bit size */
                    178:        int     addr[8];        /* +8: block numbers or device number */
                    179:        int     actime[2];      /* +24: time of last access */
                    180:        int     modtime[2];     /* +28: time of last modification */
                    181: };
                    182: .dt
                    183: .fi
                    184: .s3
                    185: The flags are as follows:
                    186: .s3
                    187: .lp +10 9
                    188: 100000 i-node is allocated
                    189: .lp +10 9
                    190: 060000 2-bit file type:
                    191: .lp +15 9
                    192: 000000 plain file
                    193: .lp +15 9
                    194: 040000 directory
                    195: .lp +15 9
                    196: 020000 character-type special file
                    197: .lp +15 9
                    198: 060000 block-type special file.
                    199: .lp +10 9
                    200: 010000 large file
                    201: .lp +10 9
                    202: 004000 set user-ID on execution
                    203: .lp +10 9
                    204: 002000 set group-ID on execution
                    205: .lp +10 9
                    206: 000400 read (owner)
                    207: .lp +10 9
                    208: 000200 write (owner)
                    209: .lp +10 9
                    210: 000100 execute (owner)
                    211: .lp +10 9
                    212: 000070 read, write, execute (group)
                    213: .lp +10 9
                    214: 000007 read, write, execute (others)
                    215: .s3
                    216: .i0
                    217: Special files are recognized by their flags
                    218: and not by i-number.
                    219: A block-type special file is basically one which
                    220: can potentially be mounted as a file system;
                    221: a character-type special file cannot, though it is
                    222: not necessarily character-oriented.
                    223: For special files the high byte of the first address word
                    224: specifies the type of device; the low byte specifies
                    225: one of several devices of
                    226: that type.
                    227: The device type numbers
                    228: of block and character special files overlap.
                    229: .s3
                    230: The address words of ordinary files and directories
                    231: contain the numbers of the blocks in the
                    232: file (if it is small)
                    233: or the numbers of indirect blocks (if the file
                    234: is large).
                    235: .s3
                    236: Byte number
                    237: .it n
                    238: of a file is accessed as follows.
                    239: .it N
                    240: is divided by 512 to find its logical block number
                    241: (say
                    242: .it b
                    243: )
                    244: in the file.
                    245: If the file is small (flag 010000 is 0),
                    246: then
                    247: .it b
                    248: must be less than 8, and the physical
                    249: block number is
                    250: .it addr[b].
                    251: .s3
                    252: If the file is large,
                    253: .it b
                    254: is divided by 256 to yield
                    255: .it i,
                    256: and
                    257: .it addr[i]
                    258: is the physical block number of
                    259: the indirect block.
                    260: The remainder from the division 
                    261: yields the word in the indirect block
                    262: which contains the number of the block for
                    263: the sought-for byte.
                    264: .s3
                    265: For block
                    266: .it b
                    267: in a file to exist,
                    268: it
                    269: is not necessary that all blocks less than
                    270: .it b
                    271: exist.
                    272: A zero block number either in the address words of
                    273: the i-node or in an indirect block indicates that the
                    274: corresponding block has never been allocated.
                    275: Such a missing block reads as if it contained all zero words.
                    276: .sh "SEE ALSO"
                    277: check (VIII)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.