28.4.USB 虚拟存储设备 ===================== .. rubric:: 注意 :name: 注意 `cfumass(4) `__ 驱动程序是一个 USB 设备模式的驱动程序。在 FreeBSD 12.0 中首次出现。 大规模存储目标是由模板 0 和 10 提供的。\ `usb_template(4) `__ 和 `cfumass(4) `__ 两个内核模块都必须被加载。\ `cfumass(4) `__ 与 CTL 子系统的接口,也就是用于 iSCSI 或光纤通道目标的那个。在主机方面,USB Mass Storage 启动器只能访问一个 LUN,LUN 0。 28.4.1.使用 cfumass 启动脚本配置 USB 大容量存储目标 --------------------------------------------------- 设置只读 USB 存储目标的最简单方法是使用 **cfumass** rc 脚本。要这样配置,把要提交给 USB 主机的文件复制到 ‘/var/cfumass’ 目录,并在 **/etc/rc.conf** 中添加这一行。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session cfumass_enable="YES" 要在不重启的情况下配置目标,请运行此命令。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # service cfumass start 与串行和网络功能不同,模板不应该在 **/boot/loader.conf** 中设置为 0 或 10。这是因为在设置模板之前必须先设置 LUN。cfumass 启动脚本在启动时自动设置正确的模板号。 28.4.2.使用其他方式配置 USB 大容量存储器 ---------------------------------------- 本章的其余部分将详细说明如何在不使用 cfumass rc 文件的情况下设置目标。如果想提供一个可写的 LUN,这是必要的。 USB 大容量存储不需要运行 `ctld(8) `__ 守护程序,尽管在需要时可以使用它。这与 iSCSI 不同。因此,有两种方法来配置目标: `ctladm(8) `__\ ,或 `ctld(8) `__\ 。两者都需要加载 **cfumass.ko** 内核模块。该模块可以手动加载: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # kldload cfumass 如果 **cfumass.ko** 没有被内置到内核中, **/boot/loader.conf** 可以设置在启动时加载该模块: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session cfumass_load="YES" 可以在没有 `ctld(8) `__ 守护程序的情况下创建一个 LUN: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # 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) `__ 以获得更完整的选项说明。 .. raw:: latex \diilbookstyleinputcell .. code:: shell-session target naa.50015178f369f092 { lun 0 { path /data/target0 size 4G } } 该例子创建了一个具有单个 LUN 的单一目标。‘naa.50015178f369f092’ 是一个由 32 个随机十六进制数字组成的设备标识符。‘path’ 行定义了支持 LUN 的文件或 zvol 的完整路径。在启动 `ctld(8) `__ 之前,该文件必须存在。第二行是可选的,指定 LUN 的大小。 要确保 `ctld(8) `__ 守护程序在启动时被启动,在 **/etc/rc.conf** 中添加这一行: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session ctld_enable="YES" 要现在启动 `ctld(8) `__\ ,运行这个命令: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # service ctld start 当 `ctld(8) `__ 守护进程被启动时,它读取 **/etc/ctl.conf**\ 。如果该文件在守护进程启动后被编辑,请重新加载修改,使其立即生效: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # service ctld reload