EFS(4) — Silicon Graphics
NAME
Extent file system − layout of the Extent file system
SYNOPSIS
#include <sys/param.h>
#include <sys/fs.h>
DESCRIPTION
Every Extent 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, also called basic blocks. Basic block 0 is unused and is available to contain a bootstrap program or other information.
Basic block 1 is the super-block. The format of an Extent file system super-block is:
/*
* Structure of the super-block for the Extent file system
*/
structefs {
/*
* This portion is read off the volume
*/
longfs_size;/* size of file system, in sectors */
longfs_firstcg;/* bb offset to first cg */
longfs_cgfsize;/* size of cylinder group in bb’s */
shortfs_cgisize;/* bb’s in inodes per cylinder group */
shortfs_sectors;/* sectors per track */
shortfs_heads;/* heads per cylinder */
shortfs_ncg;/* # of groups in file system */
shortfs_dirty;/* fs needs to be fsck’d */
time_tfs_time;/* last super-block update */
charfs_fname[6];/* file system name */
charfs_fpack[6];/* file system pack name */
longfs_magic;/* magic number */
longfs_prealloc;/* a good file system pre-alloc size */
longfs_bmsize;/* size of bitmap in bytes */
longfs_tfree;/* total free data blocks */
longfs_tinode;/* total free inodes */
charfs_spare[100];/* space for expansion */
longfs_checksum;/* checksum of volume portion of fs */
/*
* The remainder of this structure, defined fully in <sys/fs.h>
* is used by the operating system only.
*/
};
#defineEFS_MAGIC0x041755
Note that the struct efs that is defined in <sys/fs.h> contains more fields. The extra fields are used internally by the operating system, and are not discussed here. fs_size holds the size in basic blocks of the file system. This variable is filled in when the file system is first created with mkfs(1M).
fs_firstcg contains the basic block offset to the first cylinder group. There are fs_ncg cylinder groups contained in the file system. Each cylinder group is composed of fs_cgfsize basic blocks, of which fs_cgisize basic blocks are used for inodes.
fs_sectors, and fs_heads are used to specify the geometry of the underlying disk containing the file system.
fs_dirty is a flag which indicates if the file system needs to be checked by the fsck(1M) program. The fs_time field contains the time stamp of when the file system was last modified. fs_name holds the name of the file system (where it is mounted, more or less) while fs_fpack contains which volume this file system is. The fs_fpack field is singularly useless, but is provided for utility compatibility. fs_magic is used to tag the superblock of the file system as an Extent file system. fs_prealloc is sometimes used by the allocator for pre-allocation during file writing and should indicate a particularly good pre-allocation for the given file system. The fs_bmsize field contains, in bytes, the size of the data block bitmap. The data block bitmap is used for data block allocation. Each one in the bitmap indicates a free block. fs_tfree and fs_tinode contain the total free blocks and inodes, respectively. The fs_spare field is reserved for future use. Lastly, the fs_checksum variable holds a checksum of the above fields (not including itself).
During the mount(1M) of the file system, the fs_dirty and fs_checksum fields are examined. If fs_dirty is non-zero, or the fs_checksum variable does not match the systems computed checksum, then the file system must be cleaned with fsck before it can be mounted. If the file system is the root partition, then this check is ignored, as it is necessary to be able to run fsck on a dirty root from a dirty root. For the format of an inode and its flags, see inode(4).
CAVEATS
During the usage of an extent filesystem, several errors are possible which are not possible on the bell filesystem. Because the extent filesystem uses extents for all allocation, it is possible that an extremely fragmented filesystem will cause “out of space” messages before the filesystem is actually full. A possible temporary solution to this problem is to write the filesystems data to tape, then using mkfs(1) to clean the filesystem, then reading the tape back in. We do not recommend this procedure for novice users. Eventually a filesystem reorganizer will be available which will solve this problem.
FILES
/usr/include/sys/fs.h
/usr/include/sys/stat.h
SEE ALSO
fsck(1M), mkfs(1M), inode(4), efsinode(4), bellfs(4).
Version 2.4 — May 08, 1986