26.4. USB 虚拟存储设备

注意

cfumass(4) 驱动程序是一个 USB 设备模式的驱动程序。在 FreeBSD 12.0 中首次出现。

大规模存储目标是由模板 0 和 10 提供的。usb_template(4)cfumass(4) 两个内核模块都必须被加载。 cfumass(4) 与 CTL 子系统的接口,也就是用于 iSCSI 或光纤通道目标的那个。在主机方面,USB Mass Storage 启动器只能访问一个 LUN ,LUN 0 。

26.4.1. 使用 cfumass 启动脚本配置 USB 大容量存储目标

设置只读 USB 存储目标的最简单方法是使用 cfumass rc 脚本。要这样配置,把要提交给 USB 主机的文件复制到 ‘/var/cfumass’ 目录,并在 /etc/rc.conf 中添加这一行。

  1. cfumass_enable="YES"

要在不重启的情况下配置目标,请运行此命令。

  1. # service cfumass start

与串行和网络功能不同,模板不应该在 /boot/loader.conf 中设置为 0 或 10 。这是因为在设置模板之前必须先设置 LUN 。cfumass 启动脚本在启动时自动设置正确的模板号。

26.4.2. 使用其他方式配置 USB 大容量存储器

本章的其余部分将详细描述如何在不使用 cfumass rc 文件的情况下设置目标。如果想提供一个可写的 LUN ,这是必要的。

USB 大容量存储不需要运行 ctld(8) 守护程序,尽管在需要时可以使用它。这与 iSCSI 不同。因此,有两种方法来配置目标: ctladm(8) ,或 ctld(8) 。两者都需要加载 cfumass.ko 内核模块。该模块可以手动加载:

  1. # kldload cfumass

如果 cfumass.ko 没有被内置到内核中, /boot/loader.conf 可以设置在启动时加载该模块:

  1. cfumass_load="YES"

可以在没有 ctld(8) 守护程序的情况下创建一个 LUN:

  1. # ctladm create -b block -o file=/data/target0

这将把映像文件 /data/target0 的内容作为一个 LUN 呈现给 USB 主机。在执行该命令之前,该文件必须存在。要在系统启动时配置 LUN ,请将该命令添加到 /etc/rc.local

ctld(8) 也可以用来管理 LUN。创建 /etc/ctl.conf ,在 /etc/rc.conf 中添加一行,确保 ctld(8) 在启动时自动启动,然后启动守护程序。

这是一个简单的 /etc/ctl.conf 配置文件的例子。请参考 ctl.conf(5) 以获得更完整的选项说明。

  1. target naa.50015178f369f092 {
  2. lun 0 {
  3. path /data/target0
  4. size 4G
  5. }
  6. }

该例子创建了一个具有单个 LUN 的单一目标。’naa.50015178f369f092’ 是一个由 32 个随机十六进制数字组成的设备标识符。’path’ 行定义了支持 LUN 的文件或 zvol 的完整路径。在启动 ctld(8) 之前,该文件必须存在。第二行是可选的,指定 LUN 的大小。

要确保 ctld(8) 守护程序在启动时被启动,在 /etc/rc.conf 中添加这一行:

  1. ctld_enable="YES"

要现在启动 ctld(8) ,运行这个命令:

  1. # service ctld start

ctld(8) 守护进程被启动时,它读取 /etc/ctl.conf 。如果该文件在守护进程启动后被编辑,请重新加载修改,使其立即生效:

  1. # service ctld reload