16.12. 网络、内存和 File-Backed 文件系统

Reorganized and enhanced by Marc Fonvieille.

除了你的物理磁盘以外,插入你计算机的: 软盘 CDs,硬盘驱动器,等等;其它磁盘格式是不被 FreeBSD - virtual disks支持的。

这还包括网络文件系统,例如 Network File System 和 Coda, 基于内存的 文件系统和后备文件系统。

按照你运行的 FreeBSD 版本,你可以使用不同的工具来创建和使用 后备文件系统和内存文件系统。

Note: FreeBSD 4.X 用户可以使用 MAKEDEV(8) 来创建需要的设备。 FreeBSD 5.0 和更新的版本使用 devfs(5) 来创建设备节点,对用户来说是透明的。

16.12.1. FreeBSD 4.X 下的 File-Backed 文件系统

应用程序 vnconfig(8) 可以配置和启用 vnode 伪磁盘设备。 一个 vnode 代表一个文件。这就意味 使用 vnconfig(8) 可以用来创建和操作一个文件系统。 也可以在文件中挂接一个软盘或 CD 映像。

要使用 vnconfig(8),你需要在内核配置文件中 vn(4) 的支持:

pseudo-device vn

挂接一个存在的文件系统映像:

Example 16-4. 使用 vnconfig 来挂接一个存在的文件系统映像在 FreeBSD 4.X 系统上。

# vnconfig vn0 diskimage
# mount /dev/vn0c /mnt

使用 vnconfig(8) 创建一个新的文件系统映像:

Example 16-5. 使用 vnconfig 创建一个新的 File-Backed 磁盘

# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
# vnconfig -s labels -c vn0 newimage
# disklabel -r -w vn0 auto
# newfs vn0c
Warning: 2048 sector(s) in last cylinder unallocated
/dev/vn0c:     10240 sectors in 3 cylinders of 1 tracks, 4096 sectors
        5.0MB in 1 cyl groups (16 c/g, 32.00MB/g, 1280 i/g)
super-block backups (for fsck -b #) at:
 32
# mount /dev/vn0c /mnt
# df /mnt
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/vn0c        4927        1     4532     0%    /mnt

16.12.2. FreeBSD 5.X 下的 File-Backed 文件系统

在 FreeBSD 5.X 系统中使用应用程序 mdconfig(8)  被用来配置和启用内存磁盘,md(4),使用 mdconfig(8)你需要在你的内核配置文件中添加 md(4) 模块来支持它:

device md

mdconfig(8) 命令支持三种类型的内存后备虚拟磁盘: 使用 malloc(9),来分配内存磁盘,内存磁盘作为文件或作为 备用的交换分区。一种使用方式是在文件中来挂接一个软盘和 CD 映像。

挂接一个存在的文件系统映像:

Example 16-6. 在 FreeBSD 5.X 中使用 mdconfig 命令来挂接一个存在的文件系统映像。

# mdconfig -a -t vnode -f diskimage -u 0
# mount /dev/md0 /mnt

使用 mdconfig(8) 来创建一个新的文件系统映像:

Example 16-7. 用 mdconfig 创建一个新的 File-Backed 磁盘

# 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
# disklabel -r -w md0 auto
# newfs md0c
/dev/md0c: 5.0MB (10240 sectors) block size 16384, fragment size 2048
    using 4 cylinder groups of 1.27MB, 81 blks, 256 inodes.
super-block backups (for fsck -b #) at:
 32, 2624, 5216, 7808
# mount /dev/md0c /mnt
# df /mnt
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/md0c        4846        2     4458     0%    /mnt

如果你没有使用 -u 选项指定一个单位号 mdconfig(8) 将使用 md(4) 自动为它选择一个未使用的设备。 分配给它的单位名将被输出到标准输出设备像 md4。想得到更多的关于 mdconfig(8) 的信息请参考手册页。

Note: 从 FreeBSD 5.1-RELEASE 开始, bsdlabel(8) 程序代替了旧版的 disklabel(8) 程序。相应的 bsdlabel(8) 中的许多陈旧的选项和参数也被取消; 在上面的例子中选项 -r 应该被删掉。想获得更多的信息, 请参考 bsdlabel(8) 的手册页。

应用程序 mdconfig(8) 是非常有作的,然而它 需要许多命令行来创建一个 file-backed 文件系统。 FreeBSD 5.0 也提供了一个被称作 mdmfs(8) 的工具, 这个程序配置一个 md(4) 磁盘使用 mdconfig(8),在它上面安装一个 UFS 文件系统使用 newfs(8),挂接它使用 mount(8)。例如, 如果你想创建和挂接像上面一样的文件系统映像, 简单的执行下面的步骤:

Example 16-8. 使用 mdmfs 命令配置和挂接一个 File-Backed 磁盘

# 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        4846    2  4458     0%    /mnt

如果你使用没有加单位号的 md 选项, mdmfs(8) 将使用 md(4) 的自动单位号特性来自动为其 选择一个未使用的设备。更详细的 mdmfs(8),请参考手册页。

16.12.3. FreeBSD 4.X 下的内存后备式文件系统

md(4) 驱动程序是一个简单有效的手段用来创建 内存文件系统在 FreeBSD 4.X 系统上。malloc(9) 被 用来分配内存。

简单的获得一个文件系统你需要准备,例如: vnconfig(8)

Example 16-9. FreeBSD 4.X 下的 md 内存磁盘

# dd if=newimage of=/dev/md0
5120+0 records in
5120+0 records out
# mount /dev/md0c /mnt
# df /mnt
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/md0c        4927        1     4532     0%    /mnt

更多的详情,请参考 md(4) 手册页。

16.12.4. FreeBSD 5.X 下的内存后备式文件系统

同样的工具也可以用来创建内存后备式文件系统: mdconfig(8)mdmfs(8)。内存后备文件系统的 内存分配要使用 malloc(9) 来完成。

Example 16-10. 用 mdconfig 创建一个新的内存后备磁盘

# mdconfig -a -t malloc -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, 256 inodes.
    with soft updates
super-block backups (for fsck -b #) at:
 32, 2624, 5216, 7808
# mount /dev/md1 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity  Mounted on
/dev/md1        4846    2  4458     0%    /mnt

Example 16-11. 用 mdmfs 创建一个新的内存后备磁盘

# mdmfs -M -s 5m md2 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity  Mounted on
/dev/md2        4846    2  4458     0%    /mnt

代替使用一个 malloc(9) 后备文件系统,可以使用 swap,正确的替换使用 swap 替换 malloc 在命令行 mdconfig(8) 中。mdmfs(8) 程序默认 (没有 -M 选项) 创建一个 swap-based 磁盘。更多的详情,请参考 mdconfig(8)mdmfs(8) 手册页。

16.12.5. 从系统中移除内存盘

当一个内存后备式文件系统不再使用时,你应该释放掉系统的资源。 每一件要做的事情就是摘掉文件系统,然后使用 mdconfig(8) 把磁盘从系统中分离出来释放看资源。

例如分离和释放所有的资源使用 /dev/md4 命令:

# mdconfig -d -u 4

mdconfig -l 命令可以列出关于配置 md(4) 设备的信息。

在 FreeBSD 4.X 系统中,vnconfig(8) 命令用来分离设备。 例如分离所有的资源使用 /dev/vn4 命令:

# vnconfig -u vn4