In addition to physical disks, FreeBSD also supports the creation and use of memory disks. One possible use for a memory disk is to access the contents of an ISO file system without the overhead of first burning it to a CD or DVD, then mounting the CD/DVD media.
In FreeBSD, the md(4) driver is used to provide support
for memory disks. The GENERIC
kernel
includes this driver. When using a custom kernel configuration
file, ensure it includes this line:
device md
To mount an existing file system image, use
mdconfig
to specify the name of the
ISO file and a free unit number. Then,
refer to that unit number to mount it on an existing mount
point. Once mounted, the files in the ISO
will appear in the mount point. This example attaches
diskimage.iso
to the memory device
/dev/md0
then mounts that memory device
on /mnt
:
#
mdconfig -f
diskimage.iso
-u0
#
mount -t cd9660 /dev/md
0
/mnt
Notice that -t cd9660
was used to mount
an ISO format. If a unit number is not specified with
-u
, mdconfig
will
automatically allocate an unused memory device and output
the name of the allocated unit, such as
md4
. Refer to mdconfig(8) for more
details about this command and its options.
When a memory disk is no longer in use, its resources
should be released back to the system. First, unmount the
file system, then use mdconfig
to detach
the disk from the system and release its resources. To
continue this example:
#
umount /mnt
#
mdconfig -d -u
0
To determine if any memory disks are still attached to the
system, type mdconfig -l
.
FreeBSD also supports memory disks where the storage to use
is allocated from either a hard disk or an area of memory.
The first method is commonly referred to as a file-backed file
system and the second method as a memory-backed file system.
Both types can be created using
mdconfig
.
To create a new memory-backed file system, specify a type
of swap
and the size of the memory disk to
create. Then, format the memory disk with a file system and
mount as usual. This example creates a 5M memory disk on unit
1
. That memory disk is then formatted with
the UFS file system before it is
mounted:
#
mdconfig -a -t swap -s
5
m -u1
#
newfs -U md
/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, 79361
#
mount /dev/md
1
/mnt
#
df
Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md1 4718 4 4338 0% /mnt/mnt
To create a new file-backed memory disk, first allocate an
area of disk to use. This example creates an empty 5MB file
named newimage
:
#
dd if=/dev/zero of=
5120+0 records in 5120+0 records outnewimage
bs=1k count=5
k
Next, attach that file to a memory disk, label the memory disk and format it with the UFS file system, mount the memory disk, and verify the size of the file-backed disk:
#
mdconfig -f
newimage
-u0
#
bsdlabel -w md
0
auto#
newfs -U md
/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, 78400
a#
mount /dev/md
0
a/mnt
#
df
Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0a 4710 4 4330 0% /mnt/mnt
It takes several commands to create a file- or
memory-backed file system using mdconfig
.
FreeBSD also comes with mdmfs
which
automatically configures a memory disk, formats it with the
UFS file system, and mounts it. For
example, after creating newimage
with dd
, this one command is equivalent to
running the bsdlabel
,
newfs
, and mount
commands shown above:
#
mdmfs -F
newimage
-s5
m md0
/mnt
To instead create a new memory-based memory disk with
mdmfs
, use this one command:
#
mdmfs -s
5
m md1
/mnt
If the unit number is not specified,
mdmfs
will automatically select an unused
memory device. For more details about
mdmfs
, refer to mdmfs(8).
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.