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
number 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 number 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 ALSOioctl(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.9 March 17, 2008 OpenBSD 4.9