Aside from the disks you physically insert into your computer: floppies, CDs, hard
drives, and so forth; other forms of disks are understood by FreeBSD - the virtual disks.
According to the FreeBSD version you run, you will have to use different tools for
creation and use of file-backed and memory-based file systems.
The utility mdconfig(8) is used to
configure and enable memory disks, md(4), under FreeBSD.
To use mdconfig(8), you have
to load md(4) module or to add
the support in your kernel configuration file:
device md
The mdconfig(8) command
supports three kinds of memory backed virtual disks: memory disks allocated with malloc(9), memory
disks using a file or swap space as backing. One possible use is the mounting of floppy
or CD images kept in files.
To mount an existing file system image:
Example 18-4. Using mdconfig to Mount an Existing File
System Image
# mdconfig -a -t vnode -f diskimage -u 0
# mount /dev/md0 /mnt
To create a new file system image with mdconfig(8):
Example 18-5. Creating a New File-Backed Disk with mdconfig
# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
# mdconfig -a -t vnode -f newimage -u 0
# bsdlabel -w md0 auto
# newfs md0a
/dev/md0a: 5.0MB (10224 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 1.25MB, 80 blks, 192 inodes.
super-block backups (for fsck -b #) at:
160, 2720, 5280, 7840
# mount /dev/md0a /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md0a 4710 4 4330 0% /mnt
If you do not specify the unit number with the -u
option,
mdconfig(8) will use
the md(4) automatic
allocation to select an unused device. The name of the allocated unit will be output on
stdout like md4. For more details about mdconfig(8), please
refer to the manual page.
The utility mdconfig(8) is very
useful, however it asks many command lines to create a file-backed file system. FreeBSD
also comes with a tool called mdmfs(8), this program
configures a md(4) disk using mdconfig(8), puts a
UFS file system on it using newfs(8), and mounts
it using mount(8). For example,
if you want to create and mount the same file system image as above, simply type the
following:
Example 18-6. Configure and Mount a File-Backed Disk with mdmfs
# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
# mdmfs -F newimage -s 5m md0 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md0 4718 4 4338 0% /mnt
If you use the option md
without unit number, mdmfs(8) will use md(4) auto-unit
feature to automatically select an unused device. For more details about mdmfs(8), please refer
to the manual page.
For a memory-based file system the “swap backing” should normally be used.
Using swap backing does not mean that the memory disk will be swapped out to disk by
default, but merely that the memory disk will be allocated from a memory pool which can
be swapped out to disk if needed. It is also possible to create memory-based disk which
are malloc(9) backed, but
using malloc backed memory disks, especially large ones, can result in a system panic if
the kernel runs out of memory.
Example 18-7. Creating a New Memory-Based Disk with mdconfig
# mdconfig -a -t swap -s 5m -u 1
# newfs -U md1
/dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 1.27MB, 81 blks, 192 inodes.
with soft updates
super-block backups (for fsck -b #) at:
160, 2752, 5344, 7936
# mount /dev/md1 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md1 4718 4 4338 0% /mnt
Example 18-8. Creating a New Memory-Based Disk with mdmfs
# mdmfs -s 5m md2 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md2 4846 2 4458 0% /mnt
When a memory-based or file-based file system is not used, you should release all
resources to the system. The first thing to do is to unmount the file system, then use mdconfig(8) to detach
the disk from the system and release the resources.
For example to detach and free all resources used by /dev/md4:
# mdconfig -d -u 4
It is possible to list information about configured md(4) devices in using
the command mdconfig -l.