To compile this driver into the kernel, place the following lines in your kernel
Alternatively, to load the driver as a module at boot time, place the following
driver provides support for four kinds
of memory backed virtual disks:
- Backing store is allocated using
Only one malloc-bucket is used, which means that all
md devices with
malloc backing must share the
malloc-per-bucket-quota. The exact size of this quota varies, in
particular with the amount of RAM in the system. The exact value can be
- A file loaded by
with type ‘md_image’ is used for backing store. For
backwards compatibility the type ‘mfs_root’ is also
recognized. If the kernel is created with option
MD_ROOT the first preloaded image found
will become the root file system.
- A regular file is used as backing store. This allows for mounting ISO
images without the tedious detour over actual physical media.
- Backing store is allocated from buffer memory. Pages get pushed out to the
swap when the system is under memory pressure, otherwise they stay in the
operating memory. Using
swap backing is
generally preferable over
For more information, please see
To create a kernel with a ramdisk or MD file system, your kernel config needs
the following options:
options MD_ROOT # MD is a potential root device
options MD_ROOT_READONLY # disallow mounting root writeable
options MD_ROOT_SIZE=8192 # 8MB ram disk
The image in /h/foo/ARM-MD
will be loaded as
the initial image each boot. To create the image to use, please follow the
steps to create a file-backed disk found in the
man page. Other tools will also create these images, such as NanoBSD.
On armv6 and armv7 architectures, an MD_ROOT image larger than approximately 55
MiB may require building a custom kernel using several tuning options related
to kernel memory usage.
- This configures how much memory is mapped for the kernel during the early
initialization stages. The value must be at least as large as the kernel
plus all preloaded modules, including the root image. There is no downside
to setting this value too large, as long as it does not exceed the amount
of physical memory. The default is 64 MiB.
- This configures the number of kernel L2 page table pages to preallocate
during kernel initialization. Each L2 page can map 4 MiB of kernel space.
The value must be large enough to map the kernel plus all preloaded
modules, including the root image. The default value is 32, which is
sufficient to map 128 MiB.
- This configures the amount of kernel virtual address (KVA) space to
dedicate to the kmem_arena map. The scale value is the ratio of physical
to virtual pages. The default value of 3 allocates a page of KVA for each
3 pages of physical ram in the system.
The kernel and modules, including the root image, also consume KVA. The
combination of a large root image and the default scaling may preallocate
so much KVA that there is not enough remaining address space to allocate
kernel stacks, IO buffers, and other resources that are not part of
kmem_arena. Overallocating kmem_arena space is likely to manifest as
failure to launch userland processes with "cannot allocate kernel
Setting the scale value too high may result in kernel failure to allocate
memory because kmem_arena is too small, and the failure may require
significant runtime to manifest. Empirically, a value of 5 works well for
a 200 MiB root image on a system with 2 GiB of physical ram.
driver first appeared in
as a cleaner replacement for the MFS
functionality previously used in PicoBSD and in the
driver did a hostile takeover of the
driver in FreeBSD 5.0
driver was written by