25.4. USB Virtual Storage Device
前一頁 | 章 25. USB Device Mode / USB OTG | 下一頁

## 25.4. USB Virtual Storage Device

### 注意:

cfumass(4) 驅動程式是一個在 FreeBSD 12.0 之後才可用的 USB 裝置模式驅動程式。

Mass Storage target is provided by templates 0 and 10. Both usb_template(4) and cfumass(4) kernel modules must be loaded. cfumass(4) interfaces to the CTL subsystem, the same one that is used for iSCSI or Fibre Channel targets. On the host side, USB Mass Storage initiators can only access a single LUN, LUN 0.

### 25.4.1. Configuring USB Mass Storage Target Using the cfumass Startup Script

The simplest way to set up a read-only USB storage target is to use the `cfumass` rc script. To configure it this way, copy the files to be presented to the USB host machine into the `/var/cfumass` directory, and add this line to `/etc/rc.conf`:

    cfumass_enable="YES"

To configure the target without restarting, run this command:

    # service cfumass start

Differently from serial and network functionality, the template should not be set to 0 or 10 in `/boot/loader.conf`. This is because the LUN must be set up before setting the template. The cfumass startup script sets the correct template number automatically when started.

### 25.4.2. Configuring USB Mass Storage Using Other Means

The rest of this chapter provides detailed description of setting the target without using the cfumass rc file. This is necessary if eg one wants to provide a writeable LUN.

USB Mass Storage does not require the ctld(8) daemon to be running, although it can be used if desired. This is different from iSCSI. Thus, there are two ways to configure the target: ctladm(8), or ctld(8). Both require the `cfumass.ko` kernel module to be loaded. The module can be loaded manually:

    # kldload cfumass

If `cfumass.ko` has not been built into the kernel, `/boot/loader.conf` can be set to load the module at boot:

    cfumass_load="YES"

A LUN can be created without the ctld(8) daemon:

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

This presents the contents of the image file `/data/target0` as a LUN to the USB host. The file must exist before executing the command. To configure the LUN at system startup, add the command to `/etc/rc.local`.

ctld(8) can also be used to manage LUNs. Create `/etc/ctl.conf`, add a line to `/etc/rc.conf` to make sure ctld(8) is automatically started at boot, and then start the daemon.

This is an example of a simple `/etc/ctl.conf` configuration file. Refer to ctl.conf(5) for a more complete description of the options.

    target naa.50015178f369f092 {
    	lun 0 {
    		path /data/target0
    		size 4G
    	}
    }

The example creates a single target with a single LUN. The `naa.50015178f369f092` is a device identifier composed of 32 random hexadecimal digits. The `path` line defines the full path to a file or zvol backing the LUN. That file must exist before starting ctld(8). The second line is optional and specifies the size of the LUN.

To make sure the ctld(8) daemon is started at boot, add this line to `/etc/rc.conf`:

    ctld_enable="YES"

To start ctld(8) now, run this command:

    # service ctld start

當 ctld(8) Daemon 啟動後，它會讀取 `/etc/ctl.conf`，若這個檔案在 Daemon 啟動之後才做修改，要重新載入變更的內容才能立即生效：

    # service ctld reload

前一頁 | 上一層 | 下一頁
25.3. USB Device Mode Network Interfaces | 起始頁 | 部 IV. 網路通訊

本文及其他文件，可由此下載： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。

若有 FreeBSD 方面疑問，請先閱讀 FreeBSD 相關文件，如不能解決的話，再洽詢 <questions@FreeBSD.org>。
關於本文件的問題，請洽詢 <doc@FreeBSD.org>。