fs_vxfs(F)
fs (vxfs) - format of a VERITAS File System volume
Synopsis
#include <sys/types.h>
#include <sys/param.h>
#include <sys/fs/vx_fs.h>
Description
The vxfs super-block always begins at byte offset 1024 from the start of the file system. The super-block location is fixed so utilities know where to look for it.
The super-block contains the following fundamental sizes and offsets:
- fs_magic
- The magic number for the file system (VX_MAGIC). This number identifies the file system as
being a vxfs file system type.
- fs_version
- The version number of the file system layout (VX_VERSION).
- fs_ctime
- The creation date of the file system. The
time(S)
system call supplies the time.
- fs_ectime
- This field is a placeholder in instances when the creation date for a file system is expanded for more
precision. It currently is zero.
- fs_logstart
- The block address of the first Log Area block. It currently is two.
- fs_logend
- The block address of the last Log Area block. The Log Area size in blocks may be specified as part
of mkfs. If not specified, a default of 512 blocks is used. A minimum size of 32 blocks is
enforced. For smaller file systems, the default is reduced to avoid wasting space.
- fs_bsize
- The block size of the file system. The current choices are 1024, 2048, 4096, and 8192 bytes. The
default is 1024 bytes.
- fs_size
- The number of blocks in the file system, expressed as the number of blocks of size fs_bsize. The
fs_size field is a signed 32 bit number. The maximum number of blocks in a vxfs file
system is limited to 31 bits.
- fs_dsize
- The number of data blocks in the file system. A data block is a block which may be allocated to a
file in the file system.
- fs_ninode
- The number of inodes in the file system allocation units. For file systems with a Version 2 layout or
greater, this field is 0.
- For Version 1 layout file systems:
- The fs_ninode field contains the number of inodes in all of the file system allocation units. This field
is the limit on the number of inodes in the file system.
- The fs_ninode field is an unsigned 32-bit number.
- The number of inodes may be specified as part of mkfs. If not specified, the default will be fs_dsize
divided by 4.
- fs_nau
- The number of allocation units in the file system. The number of allocation units may be specified
as part of mkfs.
- fs_defiextsize
- The default size for indirect data extents, expressed in blocks. This field is currently set to 64 by
default.
- fs_oilbsize
- The size of an old inode list block, expressed in bytes. This size may be specified as part of mkfs. If
not specified, a default of either 2K or fs_bsize (whichever is larger) is used. For file
systems with a Version 2 layout or greater, this is initialized to 0 and not used.
- fs_immedlen
- The size, in bytes, of the immediate data area in each inode. This value is 96 for the vxfs file system.
- fs_ndaddr
- The number of direct extents supported by the VX_EXT4 mapping type (see the section describing
inode list). This value is 10 for the vxfs file system.
The preceding fields define the size and makeup of the file system. To reduce the calculations required in utilities, a number of values are derived from the fundamental values and placed in the super-block.
The super-block contains the following derived offsets:
- fs_aufirst
- The address, in blocks, of the first allocation unit. There can be a gap between the end of the intent
log and the first allocation unit. This gap could be used to align the first allocation unit on
a desired boundary.
- fs_emap
- The offset in blocks of the free extent map (emap) from the start of an allocation unit.
- fs_imap
- The offset in blocks of the free inode map (imap) from the start of an allocation unit.
- fs_iextop
- The offset in blocks of the extended inode operation map from the start of an allocation unit. For file
systems with a Version 2 layout or greater, this is initialized to 0 and not used.
- fs_istart
- The offset in blocks of the inode list (ilist) from the start of an allocation unit. For file systems with
a Version 2 layout or greater, this is initialized to 0 and not used.
- fs_bstart
- The offset in blocks of the first data block from the start of an allocation unit. An allocation unit
header may contain padding to align the first data block to a specific boundary.
- fs_femap
- The offset in blocks of the first free extent map (emap) from the start of the file system.
- fs_fimap
- The offset in blocks of the first free inode map (imap) from the start of the file system.
- fs_fiextop
- The offset in blocks of the first extended inode operation map from the start of the file system. For
file systems with a Version 2 layout or greater, this is initialized to 0 and not used.
- fs_fistart
- The offset in blocks of the first ilist from the start of the file system. For file systems with a Version
2 layout or greater, this is initialized to 0 and not used.
- fs_fbstart
- The offset in blocks of the first data block from the start of the file system.
- fs_nindir
- The number of entries in an indirect address extent. An indirect address extent is currently 8192
bytes in length, making the current value for fs_nindir 2048.
- fs_aulen
- The length of an allocation unit in blocks.
- fs_auimlen
- The length of a free inode map in blocks. For file systems with a Version 2 layout or greater, this is
initialized to 0 and not used.
- fs_auemlen
- The length of a free extent map in blocks.
- fs_auilen
- The length, in blocks, of the inode list for this allocation unit. For file systems with a Version 2
layout or greater, this is initialized to 0 and not used.
- fs_aupad
- The length, in blocks, of the allocation unit alignment padding.
- fs_aublocks
- The number of data blocks in an allocation unit.
- fs_maxtier
- The log base 2 of fs_aublocks.
- fs_inopb
- The number of inode entries per fs_bsize block in the inode list. The vxfs inode is currently 256
bytes long.
- fs_inopau
- The number of inodes in an allocation unit.
- fs_inopilb
- The number of inode entries per fs_oilbsize block in the inode list. For file systems with a Version
2 layout or greater, this is field is obsolete.
- fs_ndiripau
- Expected number of directory inodes per allocation unit. For file systems with a Version 2 layout or
greater, this field is initialized to 0 and not used. For the Version 1 layout, this field is
unused, but mkfs initializes it to about one ninth of the total number of inodes in the
allocation unit.
- fs_iaddrlen
- The size, in blocks, of an indirect address block. An indirect address block is 8K bytes. This field
will be set to (8K / fs_bsize).
- fs_bshift
- The log base 2 of fs_bsize. Used to convert a byte offset into a block offset.
- fs_inoshift
- The log base 2 of fs_inopb. Used to convert an inode number into a block offset in the inode list.
- fs_bmask
- A mask value such that (byte_offset + fs_bmask) rounds the offset to the nearest smaller block
boundary.
- fs_boffmask
- A mask value such that (byte_offset + fs_boffmask) yields the offset from the start of the nearest
smaller block boundary.
- fs_inomask
- A mask value such that (inode_number + fs_inomask) yields the offset from the start of the
containing inode list block of the corresponding inode list entry. For file systems with a
Version 2 layout or greater, this field is obsolete.
- fs_checksum
- A simple checksum of the above fields. A macro, VX_FSCHECKSUM is provided to verify or
calculate the checksum.
The preceding fields are initialized when the file system is created and do not change unless the file system is resized. These fields are replicated in each allocation unit header.
There are additional fields which are considered to be dynamic:
- fs_free
- The current number of free data blocks.
- fs_ifree
- The current number of free inodes. For file systems with a Version 2 layout or greater, a separate
free inode count is kept for each fileset; this is initialized to 0 and is not used.
- fs_efree
- An array of the current number of free extents of each extent size in the file system.
- fs_flags
- The following flags are recognized:
- VX_FULLFSCK
- Set when a file system requires a full structural check to recover from an error. If this flag
is set, a full check will be performed after the replay recovery is finished.
- VX_NOLOG
- Set when the file system was mounted with the VX_MS_NOLOG option. If this flag is set,
then no log replay recovery will be performed.
- VX_LOGBAD
- Set when an I/O error has invalidated the log. If this flag is set, then no log replay recovery
will be performed.
- VX_LOGRESET
- Set when the log ID runs over VX_MAXLOGID ( 2^30 ). The log ID will be reset at the
next appropriate opportunity (such as a mount or system sync).
- VX_RESIZE
- Set when a file system resizing is in progress. If an fsck sees this flag, it will have to
perform resize recovery.
See
fsadm(ADM)
for a description of file system expansion.
- VX_UPGRADING
- Set when a file system upgrade is in progress. If an fsck sees this flag, it will have to
perform upgrade recovery.
- fs_mod
- Set whenever a mounted file system is modified. It is used to indicate if the super-block needs to be
written when a sync operation is performed.
- fs_clean
- Set to VX_DIRTY when a file system is mounted for read/write access. Set to VX_CLEAN upon
umount or successful fsck. The file system cannot be mounted for read/write access unless
the fs_clean field is VX_CLEAN.
- fs_reserved
- Reserved for future use.
- fs_firstlogid
- Initial log ID to use when the file system is mounted.
- fs_time
- Last time the super-block was written to disk, indicated as the number of seconds and microseconds
that have elapsed since 0:00:00 GMT January 1, 1970.
- fs_fname
- File system name (6 characters).
- fs_fpack
- File system pack label (6 characters).
- fs_logversion
- The version number of the log format. This field is set by the kernel on each mount to ensure that an
fsck running log replay understands the log format written by the kernel.
- The log format may change with each release, so all file systems should be clean before upgrading
to a new release.
The following fields are related to the vxfs Version 2 disk layout and later. These fields are set when the file system is created and do not change. These fields are replicated in each allocation unit header.
- fs_oltext
- This is an array of two extent addresses. These extent addresses point to the two replicated copies of
the first object location table extent.
- fs_oltsize
- This is the size, in blocks, of the object location table extents pointed to by fs_oltext.
- fs_iauimlen
- The length, in blocks, of a free inode map in an inode allocation unit.
- fs_iausize
- The size, in blocks, of an inode allocation unit.
- fs_dinosize
- The size, in bytes, of a disk inode. This is currently 256 bytes.
- fs_dniaddr
- The number of indirect address levels per inode.
- fs_checksum2
- This is a checksum of the fields specific to layout Version 2 or later.
References
fsadm(ADM),
fsck(ADM),
fsdb(ADM),
mkfs(ADM),
mount(S),
time(S),
inode_vxfs(F)
© 1997 The Santa Cruz Operation, Inc. All rights reserved.