June 23, 2008 STATVFS 5

### NAME

statvfs - file system statistics

### SYNOPSIS

### DESCRIPTION

The <```sys/statvfs.h`> header defines the structures and functions that return information about a mounted file system. The statvfs structure is defined as follows: `

    typedef struct { int32_t val[2]; } fsid_t;      /* file system id type */

    #define VFS_NAMELEN  32         /* length of fs type name, including nul */
    #define VFS_MNAMELEN 1024       /* length of buffer for returned name */

    struct statvfs {
            unsigned long   f_flag;   /* copy of mount exported flags */
            unsigned long   f_bsize;  /* system block size */
            unsigned long   f_frsize; /* system fragment size */
            unsigned long   f_iosize; /* optimal file system block size */

            fsblkcnt_t      f_blocks; /* number of blocks in file system */
            fsblkcnt_t      f_bfree;  /* free blocks avail in file system */
            fsblkcnt_t      f_bavail; /* free blocks avail to non-root */
            fsblkcnt_t      f_bresvd; /* blocks reserved for root */

            fsfilcnt_t      f_files;  /* total file nodes in file system */
            fsfilcnt_t      f_ffree;  /* free file nodes in file system */
            fsfilcnt_t      f_favail; /* free file nodes avail to non-root */
            fsfilcnt_t      f_fresvd; /* file nodes reserved for root */

            uint64_t  f_syncreads;    /* count of sync reads since mount */
            uint64_t  f_syncwrites;   /* count of sync writes since mount */

            uint64_t  f_asyncreads;   /* count of async reads since mount */
            uint64_t  f_asyncwrites;  /* count of async writes since mount */

            unsigned long   f_fsid;   /* POSIX compliant file system id */
            fsid_t          f_fsidx;  /* NetBSD compatible file system id */

            unsigned long   f_namemax;/* maximum filename length */
            uid_t           f_owner; /* user that mounted the file system */

            uint32_t        f_spare[4]; /* spare space */

            char    f_fstypename[VFS_NAMELEN]; /* fs type name */
            char    f_mntonname[VFS_MNAMELEN]; /* directory on which mounted */
            char    f_mntfromname[VFS_MNAMELEN]; /* mounted file system */
    };

`

The ```f_flag` argument can have the following bits set:

```ST_RDONLY`
  The filesystem is mounted read-only; Even the super-user may not write on it.

```ST_NOEXEC`
  Files may not be executed from the filesystem.

```ST_NOSUID`
  Setuid and setgid bits on files are not honored when they are executed.

```ST_NODEV`
  Special files in the filesystem may not be opened.

```ST_UNION`
  Union with underlying filesystem instead of obscuring it.

```ST_SYNCHRONOUS`
  All I/O to the filesystem is done synchronously.

```ST_ASYNC`
  No filesystem I/O is done synchronously.

```ST_NOCOREDUMP`
  Don't write core dumps to this file system.

```ST_NOATIME`
  Never update access times.

```ST_SYMPERM`
  Recognize symbolic link permission.

```ST_NODEVMTIME`
  Never update modification times for device files.

```ST_SOFTDEP`
  Use soft dependencies.

```ST_LOCAL`
  The filesystem resides locally.

```ST_QUOTA`
  The filesystem has quotas enabled on it.

```ST_ROOTFS`
  Identifies the root filesystem.

```ST_EXRDONLY`
  The filesystem is exported read-only.

```ST_EXPORTED`
  The filesystem is exported for both reading and writing.

```ST_DEFEXPORTED`
  The filesystem is exported for both reading and writing to any Internet host.

```ST_EXPORTANON`
  The filesystem maps all remote accesses to the anonymous user.

```ST_EXKERB`
  The filesystem is exported with Kerberos uid mapping.

```ST_EXNORESPORT`
  Don't enforce reserved ports (NFS).

```ST_EXPUBLIC`
  Public export (WebNFS).

Fields that are undefined for a particular file system are set to -1.

### NOTES

f_flag
  The ```f_flag` field is the same as the ```f_flags` field in the 4.3BSD statfs(2) system call.

f_fsid
  Is defined to be
  ```unsigned` `long` by the X/Open standard. Unfortunately this is not enough space to store our
  ```fsid_t`, so we define an additional ```f_fsidx` field.

f_bavail
  Could historically be negative (in the statfs(2) system call) when the used space has exceeded the non-superuser free space. In order to comply with the X/Open standard, we have to define
  ```fsblkcnt_t` as an unsigned type, so in all cases where ```f_bavail` would have been negative, we set it to 0. In addition we provide ```f_bresvd` which contains the amount of reserved blocks for the superuser, so the old value of ```f_bavail` can be easily computed as: `

              old_bavail = f_bfree - f_bresvd;

  `

### SEE ALSO

statvfs(2)

### HISTORY

The <```sys/statvfs.h`> header first appeared in NetBSD3.0.