Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

icheck(1m) [v7 man page]

ICHECK(1M)																ICHECK(1M)

NAME
icheck - file system storage consistency check SYNOPSIS
icheck [ -s ] [ -b numbers ] [ filesystem ] DESCRIPTION
Icheck examines a file system, builds a bit map of used blocks, and compares this bit map against the free list maintained on the file sys- tem. If the file system is not specified, a set of default file systems is checked. The normal output of icheck includes a report of The total number of files and the numbers of regular, directory, block special and character special files. The total number of blocks in use and the numbers of single-, double-, and triple-indirect blocks and directory blocks. The number of free blocks. The number of blocks missing; i.e. not in any file nor in the free list. The -s option causes icheck to ignore the actual free list and reconstruct a new one by rewriting the super-block of the file system. The file system should be dismounted while this is done; if this is not possible (for example if the root file system has to be salvaged) care should be taken that the system is quiescent and that it is rebooted immediately afterwards so that the old, bad in-core copy of the super- block will not continue to be used. Notice also that the words in the super-block which indicate the size of the free list and of the i- list are believed. If the super-block has been curdled these words will have to be patched. The -s option causes the normal output reports to be suppressed. Following the -b option is a list of block numbers; whenever any of the named blocks turns up in a file, a diagnostic is produced. Icheck is faster if the raw version of the special file is used, since it reads the i-list many blocks at a time. FILES
Default file systems vary with installation. SEE ALSO
dcheck(1), ncheck(1), filsys(5), clri(1) DIAGNOSTICS
For duplicate blocks and bad blocks (which lie outside the file system) icheck announces the difficulty, the i-number, and the kind of block involved. If a read error is encountered, the block number of the bad block is printed and icheck considers it to contain 0. `Bad freeblock' means that a block number outside the available space was encountered in the free list. `n dups in free' means that n blocks were found in the free list which duplicate blocks either in some file or in the earlier part of the free list. BUGS
Since icheck is inherently two-pass in nature, extraneous diagnostics may be produced if applied to active file systems. It believes even preposterous super-blocks and consequently can get core images. ICHECK(1M)

Check Out this Related Man Page

FILSYS(5)							File Formats Manual							 FILSYS(5)

NAME
filsys, flblk, ino - format of file system volume SYNOPSIS
#include <sys/types.h> #include <sys/flbk.h> #include <sys/filsys.h> #include <sys/ino.h> DESCRIPTION
Every file system storage volume (e.g. RF disk, RK disk, RP disk, DECtape reel) has a common format for certain vital information. Every such volume is divided into a certain number of 512-byte blocks. Block 0 is unused and is available to contain a bootstrap program, pack label, or other information. Block 1 is the super block. The layout of the super block as defined by the include file <sys/filsys.h> is: S_isize is the address of the first block after the i-list, which starts just after the super-block, in block 2. Thus is i-list is s_isize-2 blocks long. S_fsize is the address of the first block not potentially available for allocation to a file. These numbers are used by the system to check for bad block addresses; if an `impossible' block address is allocated from the free list or is freed, a diag- nostic is written on the on-line console. Moreover, the free array is cleared, so as to prevent further allocation from a presumably cor- rupted 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 NICFREE free block numbers. NICFREE is a configuration constant. S_free[0] is the block address of the head of a chain of blocks constituting the free list. The layout of each block of the free chain as defined in the include file <sys/fblk.h> is: The fields df_nfree and df_free in a free block are used exactly like s_nfree and s_free in the super block. To allocate a block: decre- ment s_nfree, and the new block number is s_free[s_nfree]. If the new block address is 0, there are no blocks left, so give an error. If s_nfree became 0, read the new block into s_nfree and s_free. To free a block, check if s_nfree is NICFREE; 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 address and increment s_nfree. 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 inodes (up to NICINOD) into the s_inode array, then try again. To free an i-node, provided s_ninode is less than NICINODE, place its number into s_inode[s_ninode] and increment s_nin- ode. If s_ninode is already NICINODE, don't 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 inode is really free or not is maintained in the inode itself. 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 write-protection indicator; its disk value is also immaterial. S_time is the last time the super-block of the file system was changed. During a reboot, s_time of the super-block for the root file sys- tem is used to set the system's idea of the time. The fields s_tfree, s_tinode, s_fname and s_fpack are not currently maintained. I-numbers begin at 1, and the storage for i-nodes begins in block 2. I-nodes are 64 bytes long, so 8 of them fit into a block. 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. The format of an i-node as given in the include file <sys/ino.h> is: Di_mode tells the kind of file; it is encoded identically to the st_mode field of stat(2). Di_nlink is the number of directory entries (links) that refer to this i-node. Di_uid and di_gid are the owner's user and group IDs. Size is the number of bytes in the file. Di_atime and di_mtime are the times of last access and modification of the file contents (read, write or create) (see times(2)); Di_ctime records the time of last modification to the inode or to the file, and is used to determine whether it should be dumped. Special files are recognized by their modes and not by i-number. A block-type special file is one which can potentially be mounted as a file system; a character-type special file cannot, though it is not necessarily character-oriented. For special files, the di_addr field is occupied by the device code (see types(5)). The device codes of block and character special files overlap. Disk addresses of plain files and directories are kept in the array di_addr packed into 3 bytes each. The first 10 addresses specify device blocks directly. The last 3 addresses are singly, doubly, and triply indirect and point to blocks of 128 block pointers. Pointers in indirect blocks have the type daddr_t (see types(5)). For block b in a file to exist, it is not necessary that all blocks less than b exist. A zero block number either in the address words of the i-node or in an indirect block indicates that the corresponding block has never been allocated. Such a missing block reads as if it contained all zero words. SEE ALSO
icheck(1), dcheck(1), dir(5), mount(1), stat(2), types(5) FILSYS(5)
Man Page