|
|
1.1 ! root 1: .TH FILSYS 5 ! 2: .CT 2 sa ! 3: .SH NAME ! 4: filsys, flblk, ino \- format of a disk file system ! 5: .SH SYNOPSIS ! 6: .B #include <sys/types.h> ! 7: .br ! 8: .B #include <sys/fblk.h> ! 9: .br ! 10: .B #include <sys/filsys.h> ! 11: .br ! 12: .B #include <sys/ino.h> ! 13: .SH DESCRIPTION ! 14: Every ! 15: file system is divided into a certain number ! 16: of blocks of 1K or 4K bytes, as determined by ! 17: the predicate ! 18: .L BITFS() ! 19: applied to the minor device number ! 20: where the file system is mounted. ! 21: Block 0 is unused and is available to contain ! 22: a bootstrap program, pack label, or other information. ! 23: .PP ! 24: Block 1 is the ! 25: `super-block'. ! 26: Its layout is defined in ! 27: .LR <sys/filsys.h> : ! 28: .PP ! 29: .EX ! 30: .ta \w'#define 'u +\w's_cylsize 'u +\w'123 'u +\w'daddr_t 'u ! 31: struct filsys { ! 32: unsigned short s_isize; ! 33: daddr_t s_fsize; ! 34: short s_ninode; ! 35: ino_t s_inode[NICINOD]; ! 36: char s_flock; ! 37: char s_ilock; ! 38: char s_fmod; ! 39: char s_ronly; ! 40: time_t s_time; ! 41: daddr_t s_tfree; ! 42: ino_t s_tinode; ! 43: short s_dinfo[2]; ! 44: #define s_m s_dinfo[0] ! 45: #define s_n s_dinfo[1] ! 46: #define s_cylsize s_dinfo[0] ! 47: #define s_aspace s_dinfo[1] ! 48: char s_fsmnt[14]; ! 49: ino_t s_lasti; ! 50: ino_t s_nbehind; ! 51: union { ! 52: struct { ! 53: short S_nfree; ! 54: daddr_t S_free[NICFREE]; ! 55: } R; ! 56: struct { ! 57: char S_valid; ! 58: #define BITMAP 961 ! 59: long S_bfree[BITMAP]; ! 60: } B; ! 61: struct { ! 62: char S_valid; ! 63: char S_flag; /* 1 means bitmap not in S_bfree */ ! 64: long S_bsize; /* size of bitmap blocks */ ! 65: struct buf * S_blk[BITMAP-1]; ! 66: } N; ! 67: } U; ! 68: }; ! 69: #define s_nfree U.R.S_nfree ! 70: #define s_free U.R.S_free ! 71: #define s_valid U.B.S_valid ! 72: #define s_bfree U.B.S_bfree ! 73: .EE ! 74: .TF s_isize ! 75: .TP ! 76: .B s_isize ! 77: The address of the first block after the i-list, ! 78: which starts in block 2. ! 79: Thus the i-list is ! 80: .LR s_isize-2 ! 81: blocks long. ! 82: .PD ! 83: .TP ! 84: .B s_fsize ! 85: The address of the first block not in the file system. ! 86: .TP ! 87: .B s_inode ! 88: Array of free inode numbers. ! 89: .TP ! 90: .B s_ninode ! 91: The number of free i-numbers in the ! 92: .L s_inode ! 93: array. ! 94: Inodes are placed in the list in LIFO order. ! 95: If the list underflows, it is replenished by ! 96: searching the i-list ! 97: to obtain the numbers of free inodes. ! 98: When the list is full, ! 99: freed inodes are not recorded in ! 100: .LR s_inode . ! 101: .TP ! 102: .B s_lasti ! 103: Where the last search for free inodes ended. ! 104: .TP ! 105: .B s_nbehind ! 106: Number of free inodes before ! 107: .L s_lasti ! 108: that are not listed in ! 109: .LR s_inode . ! 110: The system will search forward for free inodes from ! 111: .L s_lasti ! 112: for more inodes unless ! 113: .L s_nbehind ! 114: is sufficiently large, in which case it will search the ! 115: i-list from the beginning. ! 116: .TP ! 117: .B s_flock ! 118: .br ! 119: .ns ! 120: .TP ! 121: .B s_ilock ! 122: Flags maintained in the core ! 123: copy of the super-block while the file system ! 124: while it is mounted. ! 125: The values on disk are immaterial. ! 126: .TP ! 127: .B s_fmod ! 128: Flag to indicate that the super-block has ! 129: changed and should be copied to ! 130: the disk during the next periodic update of file ! 131: system information. ! 132: The value on disk is immaterial. ! 133: .TP ! 134: .B s_ronly ! 135: Flag for read-only file system. ! 136: The value on disk is immaterial. ! 137: .TP ! 138: .B s_time ! 139: Time of the last change to the super block. ! 140: .TP ! 141: .B s_dinfo ! 142: Disk interleave information: ! 143: .BR s_cylsize = ! 144: blocks per cylinder, ! 145: .BR s_aspace = ! 146: blocks to skip; see ! 147: .IR fsck (8). ! 148: .TP ! 149: .B s_fsmnt ! 150: Unused. ! 151: .TP ! 152: .B s_tfree ! 153: .br ! 154: .ns ! 155: .TP ! 156: .B s_tinode ! 157: Numbers of free blocks and free inodes. ! 158: Maintained for the benefit of ! 159: .IR df ! 160: (see ! 161: .IR du (1)), ! 162: these values are otherwise irrelevant. ! 163: .PD ! 164: .PP ! 165: Different data are used to manage free space in 1K and 4K file systems. ! 166: These fields are for 1K file systems: ! 167: .TF s_isize ! 168: .TP ! 169: .B s_free ! 170: An array of free block numbers. ! 171: .LR s_free[0] ! 172: is the block address of the next ! 173: in a chain of blocks constituting the free list. ! 174: The layout of these blocks is defined in ! 175: .LR <sys/fblk.h> : ! 176: .PD ! 177: .LP ! 178: .EX ! 179: struct fblk { ! 180: int df_nfree; ! 181: daddr_t df_free[NICFREE]; ! 182: } ! 183: .EE ! 184: .ns ! 185: .IP ! 186: where ! 187: .L df_nfree ! 188: and ! 189: .L df_free ! 190: are exactly like ! 191: .L s_nfree ! 192: and ! 193: .L s_free. ! 194: .TP ! 195: .B s_nfree ! 196: Blocks given in ! 197: .L s_free[1] ! 198: through ! 199: .L s_free[s_nfree-1] ! 200: are available for allocation. ! 201: Blocks are allocated in LIFO fashion from this list. ! 202: If freeing would cause ! 203: the array to overflow, ! 204: it is cleared by copying into the newly freed block, ! 205: which is pushed onto the free chain. ! 206: If allocation would cause underflow, ! 207: the array is replenished from the next block on the chain. ! 208: .PP ! 209: These are for 4K file systems: ! 210: .TF s_isize ! 211: .TP ! 212: .B s_bfree ! 213: a bit array specifying the free blocks of a 4K file system. ! 214: The bit ! 215: .LR (s_bfree[i/w]>>(i%w))&1 , ! 216: where ! 217: .I w ! 218: is the bit size of a long, ! 219: is nonzero if the ! 220: .IR i th ! 221: data block is free. If the file system is too large for the bitmap ! 222: to fit here, then it is stored at the end of the file system, and ! 223: locked into memory when the file system is mounted. The ! 224: .B N ! 225: variant of the union is used by the kernel in this case. ! 226: .PD ! 227: .TP ! 228: .B s_valid ! 229: The bitmap of a mounted file system is maintained only in main memory; ! 230: the bitmap on the medium is marked invalid by setting ! 231: .L s_valid ! 232: to zero. ! 233: Unmounting ! 234: updates the medium copy and sets ! 235: .L s_valid ! 236: to 1. ! 237: A file system with invalid bitmap may be mounted ! 238: read-only; its bitmap can be corrected by ! 239: .IR chuck (8). ! 240: .PP ! 241: I-numbers begin at 1, and the storage for inodes ! 242: begins in block 2. ! 243: Inodes are 64 bytes long. ! 244: Inode 2 is reserved for the root directory of the file ! 245: system, but no other i-number has a built-in ! 246: meaning. ! 247: Each inode represents one file. ! 248: .PP ! 249: The layout of an inode is defined in ! 250: .LR <sys/ino.h> : ! 251: .PP ! 252: .EX ! 253: .ta \w'struct 'u +\w'unsigned 'u ! 254: struct dinode { ! 255: unsigned short di_mode; ! 256: short di_nlink; ! 257: short di_uid; ! 258: short di_gid; ! 259: off_t di_size; ! 260: char di_addr[40]; ! 261: time_t di_atime; ! 262: time_t di_mtime; ! 263: time_t di_ctime; ! 264: }; ! 265: .EE ! 266: .TF di_nlink ! 267: .TP ! 268: .B di_mode ! 269: The kind of file; it ! 270: is encoded as ! 271: .L st_mode field of ! 272: .IR stat (2), ! 273: and is 0 for a free inode. ! 274: .PD ! 275: .TP ! 276: .B di_nlink ! 277: The number of directory entries ! 278: (links) that refer to this inode ! 279: .TP ! 280: .B di_uid ! 281: Owner's userid. ! 282: .TP ! 283: .B di_gid ! 284: Owner's groupid. ! 285: .TP ! 286: .B di_size ! 287: Number of bytes in the file. ! 288: .TP ! 289: .B di_atime ! 290: Time of last access; see ! 291: .IR times (2). ! 292: .TP ! 293: .B di_mtime ! 294: Time of last modification. ! 295: .TP ! 296: .B di_ctime ! 297: Time of last change to inode or contents. ! 298: .TP ! 299: .B di_addr ! 300: For special files the first two bytes of ! 301: .L di_addr ! 302: contain the device code; see ! 303: .IR intro (4) ! 304: and ! 305: .IR types (5). ! 306: .PD ! 307: .IP ! 308: For plain files and directories ! 309: .L di_addr ! 310: contains block numbers packed into 3 bytes each. ! 311: The first 10 numbers specify device blocks directly. ! 312: The last 3 are singly, doubly, and triply ! 313: indirect and point to blocks of block pointers of type ! 314: .L daddr_t ! 315: (see ! 316: .IR types (5)). ! 317: A zero pointer indicates a `hole' ! 318: where no data has been written. ! 319: Holes read as if they contained all zeros. ! 320: .PP ! 321: A symbolic link is, aside from mode, ! 322: a plain file whose sole content is the name of the file linked to. ! 323: .SH "SEE ALSO" ! 324: .IR chuck (8), ! 325: .IR fsck (8), ! 326: .IR icheck (8), ! 327: .IR dir (5), ! 328: .IR mount (8), ! 329: .IR stat (2), ! 330: .IR types (5), ! 331: .IR l3tol (3) ! 332:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.