28.4.USB 虚拟存储设备
注意
大规模存储目标是由模板 0 和 10 提供的。usb_template(4) 和 cfumass(4) 两个内核模块都必须被加载。cfumass(4) 与 CTL 子系统的接口,也就是用于 iSCSI 或光纤通道目标的那个。在主机方面,USB Mass Storage 启动器只能访问一个 LUN,LUN 0。
设置只读 USB 存储目标的最简单方法是使用 cfumass rc 脚本。要这样配置,把要提交给 USB 主机的文件复制到 '/var/cfumass' 目录,并在 /etc/rc.conf 中添加这一行。
cfumass_enable="YES"
要在不重启的情况下配置目标,请运行此命令。
# service cfumass start
与串行和网络功能不同,模板不应该在 /boot/loader.conf 中设置为 0 或 10。这是因为在设置模板之前必须先设置 LUN。cfumass 启动脚本在启动时自动设置正确的模板号。
本章的其余部分将详细说明如何在不使用 cfumass rc 文件的情况下设置目标。如果想提供一个可写的 LUN,这是必要的。
# kldload cfumass
如果 cfumass.ko 没有被内置到内核中, /boot/loader.conf 可以设置在启动时加载该模块:
cfumass_load="YES"
# ctladm create -b block -o file=/data/target0
这将把映像文件 /data/target0 的内容作为一个 LUN 呈现给 USB 主机。在执行该命令之前,该文件必须存在。要在系统启动时配置 LUN,请将该命令添加到 /etc/rc.local。
target naa.50015178f369f092 {
lun 0 {
path /data/target0
size 4G
}
}
该例子创建了一个具有单个 LUN 的单一目标。'naa.50015178f369f092' 是一个由 32 个随机十六进制数字组成的设备标识符。'path' 行定义了支持 LUN 的文件或 zvol 的完整路径。在启动 ctld(8) 之前,该文件必须存在。第二行是可选的,指定 LUN 的大小。
ctld_enable="YES"
# service ctld start
# service ctld reload