20.4.USB 存储设备
许多外部存储解决方案,如硬盘、USB 闪存驱动器、光盘和 DVD 刻录机,都使用通用串行总线(USB)。FreeBSD 支持 USB 1.x、2.0 和 3.0 设备。
注意
USB 3.0 支持与某些硬件不兼容,包括 Haswell(Lynx point)芯片组。如果 FreeBSD 启动时出现
failed with error 19
消息,请在系统 BIOS 中禁用 xHCI/USB3。
USB 存储设备的支持已经内建在 GENERIC 内核中。对于自定义内核,请确保在内核配置文件中包含以下行:
device scbus # SCSI 总线(ATA/SCSI 必需)
device da # 直接访问(磁盘)
device pass # 透传设备(直接 ATA/SCSI 访问)
device uhci # 提供 USB 1.x 支持
device ohci # 提供 USB 1.x 支持
device ehci # 提供 USB 2.0 支持
device xhci # 提供 USB 3.0 支持
device usb # USB 总线(必需)
device umass # 磁盘/大容量存储 - 需要 scbus 和 da
device cd # 需要用于 CD 和 DVD 刻录机
FreeBSD 使用 umass(4) 驱动程序,通过 SCSI 子系统访问 USB 存储设备。由于任何 USB 设备都会被系统视为 SCSI 设备,因此如果 USB 设备是 CD 或 DVD 刻录机,不要 在自定义内核配置文件中包含 device atapicam
。
本节的其余部分演示了如何验证 USB 存储设备是否被 FreeBSD 识别,并如何配置该设备以便使用。
20.4.1. 设备配置
要测试 USB 配置,插入 USB 设备。使用 dmesg
确认驱动器是否出现在系统消息缓冲区中。它应类似如下所示:
umass0: <STECH Simple Drive, class 0/0, rev 2.00/1.04, addr 3> on usbus0
umass0: SCSI over Bulk-Only; quirks = 0x0100
umass0:4:0:-1: Attached to scbus4
da0 at umass-sim0 bus 0 scbus4 target 0 lun 0
da0: <STECH Simple Drive 1.04> Fixed Direct Access SCSI-4 device
da0: Serial Number WD-WXE508CAN263
da0: 40.000MB/s transfers
da0: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)
da0: quirks=0x2<NO_6_BYTE>
品牌、设备节点(da0)、速度和大小会根据设备不同而有所不同。
由于 USB 设备被视为 SCSI 设备,因此可以使用 camcontrol
列出连接到系统的 USB 存储设备:
# camcontrol devlist
<STECH Simple Drive 1.04> at scbus4 target 0 lun 0 (pass3,da0)
或者,可以使用 usbconfig
列出设备。有关此命令的更多信息,请参考 usbconfig(8)。
# usbconfig
ugen0.3: <Simple Drive STECH> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)
如果设备尚未格式化,请参考 添加磁盘 了解如何格式化并创建 USB 驱动器上的分区。如果驱动器已包含文件系统,可以按照 “挂载和卸载文件系统” 中的说明进行挂载。
警告
让不可信的用户挂载任意媒体(如下面所述启用
vfs.usermount
)从安全角度来看是不安全的。大多数文件系统并未为防范恶意设备而构建。
为了使设备能够作为普通用户挂载,一种解决方案是将所有使用该设备的用户添加到 operator
组中,使用 pw(8)。接下来,确保 operator
组能够读写设备,可以在 /etc/devfs.rules 中添加以下行:
[localrules=5]
add path 'da*' mode 0660 group operator
注意
如果系统中还安装了内置 SCSI 磁盘,请将第二行修改如下:
add path 'da[3-9]*' mode 0660 group operator
这将把前三个 SCSI 磁盘(da0 到 da2)排除出
operator
组。请将 3 替换为内置 SCSI 磁盘的数量。有关此文件的更多信息,请参考 devfs.rules(5)。
接下来,在 /etc/rc.conf 中启用规则集:
devfs_system_ruleset="localrules"
然后,通过在 /etc/sysctl.conf 中添加以下行,指示系统允许普通用户挂载文件系统:
vfs.usermount=1
由于此设置只在下次重启后生效,可以立即使用 sysctl
设置此变量:
# sysctl vfs.usermount=1
vfs.usermount: 0 -> 1
最后一步是创建一个目录,在该目录下挂载文件系统。此目录需要由将要挂载文件系统的用户拥有。可以通过 root
创建一个由该用户拥有的子目录,如 /mnt/username。在以下示例中,将 username 替换为用户的登录名,将 usergroup 替换为用户的主组:
# mkdir /mnt/username
# chown username:usergroup /mnt/username
假设插入了一根 USB 闪存驱动器,出现了设备 /dev/da0s1。如果该设备格式化为 FAT 文件系统,用户可以使用以下命令进行挂载:
% mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/username
在设备被拔出之前,必须首先卸载它:
% umount /mnt/username
拔出设备后,系统消息缓冲区将显示类似以下内容的消息:
umass0: at uhub3, port 2, addr 3 (disconnected)
da0 at umass-sim0 bus 0 scbus4 target 0 lun 0
da0: <STECH Simple Drive 1.04> s/n WD-WXE508CAN263 detached
(da0:umass-sim0:0:0:0): Periph destroyed
20.4.2. 自动挂载可移动媒体
USB 设备可以通过取消注释 /etc/auto_master 中的这一行来自动挂载:
/media -media -nosuid
然后,将以下内容添加到 /etc/devd.conf 文件中:
notify 100 {
match "system" "GEOM";
match "subsystem" "DEV";
action "/usr/sbin/automount -c";
};
如果 autofs(5) 和 devd(8) 已经在运行,则重新加载配置:
# service automount restart
# service devd restart
通过将以下行添加到 /etc/rc.conf 文件中,可以设置 autofs(5) 在启动时启动:
autofs_enable="YES"
autofs(5) 需要启用 devd(8),默认情况下已启用。
立即启动服务:
# service automount start
# service automountd start
# service autounmountd start
# service devd start
每个可以自动挂载的文件系统都会作为 /media/ 下的一个目录出现。该目录的名称是文件系统标签。如果标签缺失,目录名称将以设备节点命名。
文件系统会在首次访问时自动挂载,并在一段时间的非活动后自动卸载。自动挂载的驱动器也可以手动卸载:
# automount -fu
该机制通常用于内存卡和 USB 闪存驱动器。它也可以用于任何块设备,包括光驱或 iSCSILUN。
最后更新于
这有帮助吗?