VND(4)                    OpenBSD Programmer's Manual                   VND(4)

NAME
     vnd - vnode disk driver

SYNOPSIS
     pseudo-device vnd [count]

DESCRIPTION
     The vnd driver provides a disk-like interface to a file.  This is useful
     for a variety of applications, including swap files and building miniroot
     or floppy disk images.  There are two variants, the traditional vnd that
     bypasses the buffer cache and thus is suitable for swap on files, but not
     for building disk-images, and the svnd (``safe'' vnd) variant that goes
     through the buffer cache, thereby maintaining cache-coherency after the
     block-device is closed which makes it suitable for creating disk images.
     The latter is not good for swapping on, though.

     This document assumes familiarity with how to generate kernels and how to
     properly configure disks and pseudo-devices in a kernel configuration
     file.

     In order to compile in support for vnd devices, a line similar to the
     following must be present in the kernel configuration file:

           pseudo-device  vnd  4    # vnode disk driver

     The count argument is how many vnds memory is allocated for at boot time.
     In this example, no more than 4 vnds may be configured.

     There is a run-time utility that is used for configuring vnds.  See
     vnconfig(8) for more information.

IOCTL INTERFACE
     The following ioctl(2) calls are defined in <dev/vndioctl.h>:

     VNDIOCSET struct vnd_ioctl *
             Associate the file vnd_file with a vnd pseudo device, optionally
             encrypted using the Blowfish cipher and the key specified in
             vnd_key of length vnd_keylen.  Encryption only works with svnd
             devices.  The size of the configured device is returned in
             vnd_size.

                   struct vnd_ioctl {
                           char    *vnd_file;
                           off_t   vnd_size;
                           u_char  *vnd_key;
                           int     vnd_keylen;
                   };

     VNDIOCCLR struct vnd_ioctl *
             Disassociate a vnd device.

     VNDIOCGET struct vnd_user *
             Get the associated file name, device, inode number, and unit num-
             ber of a vnd device.  If vnu_unit is -1, information on the vnd
             device corresponding to the file descriptor passed to ioctl(2)
             will be returned.  Otherwise, vnu_unit may contain the unit num-
             ber of another vnd device.  This allows for opening just vnd0 and
             querying all available devices.

                   struct vnd_user {
                           char    vnufile[VNDNLEN];
                           int     vnu_unit;
                           dev_t   vnu_dev;
                           ino_t   vnu_ino;
                   };

     Additionally, some disklabel(8) related ioctl(2) calls defined in
     <sys/disklabel.h> are available: DIOCGDINFO, DIOCSDINFO, DIOCWDINFO, and
     DIOCWLABEL.  They are documented in sd(4).

FILES
     /dev/{,r}{,s}vnd*  vnd device special files

SEE ALSO
     ioctl(2), sd(4), disklabel(5), MAKEDEV(8), config(8), disklabel(8),
     fdisk(8), fsck(8), mount(8), newfs(8), vnconfig(8)

HISTORY
     The vnd disk driver was originally written at the University of Utah.
     The svnd variant was first seen in OpenBSD 2.1.

BUGS
     The vnd driver does not work if the file does not reside in a local
     filesystem.  However the svnd variant does.

OpenBSD 4.7                     March 17, 2008                               2
