第21章 其他文件系统
附录 D. OpenPGP 密钥
18.4.USB 存储设备
许多外部存储解决方案,如硬盘、U 盘、CD 和 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 内核中的。对于一个自定义的内核,要确保在内核配置文件中存在以下几行:
1
device scbus # SCSI bus (required for ATA/SCSI)
2
device da # Direct Access (disks)
3
device pass # Passthrough device (direct ATA/SCSI access)
4
device uhci # provides USB 1.x support
5
device ohci # provides USB 1.x support
6
device ehci # provides USB 2.0 support
7
device xhci # provides USB 3.0 support
8
device usb # USB Bus (required)
9
device umass # Disks/Mass storage - Requires scbus and da
10
device cd # needed for CD and DVD burners
Copied!
FreeBSD 使用 umass(4) 驱动程序,它使用 SCSI 子系统来访问 USB 存储设备。由于任何 USB 设备都会被系统视为 SCSI 设备,如果 USB 设备是 CD 或 DVD 刻录机,请不要在自定义的内核配置文件中包含device atapicam
本节的其余部分演示了如何验证 USB 存储设备是否被 FreeBSD 识别,以及如何配置设备以便使用。

18.4.1. 设备配置

要测试 USB 配置,请插上 USB 设备。使用dmesg确认该驱动器出现在系统信息缓冲区中。它应该看起来像这样:
1
umass0: <STECH Simple Drive, class 0/0, rev 2.00/1.04, addr 3> on usbus0
2
umass0: SCSI over Bulk-Only; quirks = 0x0100
3
umass0:4:0:-1: Attached to scbus4
4
da0 at umass-sim0 bus 0 scbus4 target 0 lun 0
5
da0: <STECH Simple Drive 1.04> Fixed Direct Access SCSI-4 device
6
da0: Serial Number WD-WXE508CAN263
7
da0: 40.000MB/s transfers
8
da0: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)
9
da0: quirks=0x2<NO_6_BYTE>
Copied!
品牌、设备节点(da0)、速度和空间大小将因设备而异。
由于 USB 设备被看作是 SCSI 设备,camcontrol可以用来列出连接到系统的 USB 存储设备:
1
# camcontrol devlist
2
<STECH Simple Drive 1.04> at scbus4 target 0 lun 0 (pass3,da0)
Copied!
另外,可以用usbconfig来列出设备。请参考usbconfig(8)以了解关于这个命令的更多信息。
1
# usbconfig
2
ugen0.3: <Simple Drive STECH> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)
Copied!
如果设备还没有被格式化,请参阅“添加磁盘”,了解如何在 U 盘上格式化和创建分区。如果驱动器带有文件系统,可以使用“挂载和卸载文件系统”中的说明在 root 用户下挂载。
注意:
通过启用下面描述的vfs.usermount,允许不受信任的用户挂载任意的媒体是不安全的。大多数文件系统都不是为了防范恶意设备而建立的。
为了使普通用户可以挂载设备,可以使用pw(8)使设备的所有用户成为operator组的成员。接下来,通过在 /etc/devfs.rules中添加这些行,确保operator能够读写设备:
1
[localrules=5]
2
add path 'da*' mode 0660 group operator
Copied!
注意:
如果系统中也安装了内部 SCSI 磁盘,请将第二行修改如下:
1
add path 'da[3-9]*' mode 0660 group operator
Copied!
这将使前三个SCSI磁盘( da0da2 )不属于operator组。用内部 SCSI 磁盘的数量代替3。参考devfs.rules(5)了解更多关于这个文件的信息。
接下来,在 /etc/rc.conf中启用该规则集:
1
devfs_system_ruleset="localrules"
Copied!
然后,在 /etc/sysctl.conf中添加以下一行,指示系统允许普通用户挂载文件系统:
1
vfs.usermount=1
Copied!
因为这只在下次重启后生效,可以使用sysctl来立即设置这个变量:
1
# sysctl vfs.usermount=1
2
vfs.usermount: 0 -> 1
Copied!
最后一步是创建一个要挂载文件系统的目录。这个目录需要由要装载文件系统的用户拥有。一种方法是让root创建一个由该用户拥有的 /mnt/username子目录。在下面的例子中,用用户的登录名代替username,用用户的主组代替usergroup
1
# mkdir /mnt/username
2
# chown username:usergroup /mnt/username
Copied!
假设一个 U 盘被插入,并且出现了一个设备/dev/da0s1。如果该设备是用 FAT 文件系统格式化的,用户可以用以下方法挂载它:
1
% mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/username
Copied!
在拔掉设备的插头之前,必须先将其卸载:
1
% umount /mnt/username
Copied!
移除设备后,系统信息缓冲区将显示类似以下的信息:
1
umass0: at uhub3, port 2, addr 3 (disconnected)
2
da0 at umass-sim0 bus 0 scbus4 target 0 lun 0
3
da0: <STECH Simple Drive 1.04> s/n WD-WXE508CAN263 detached
4
(da0:umass-sim0:0:0:0): Periph destroyed
Copied!

18.4.2 自动挂载可移动媒体

通过取消对 /etc/auto_master中这一行的注释,USB 设备可以被自动挂载:
1
/media -media -nosuid
Copied!
然后在 /etc/devd.conf中添加这些行:
1
notify 100 {
2
match "system" "GEOM";
3
match "subsystem" "DEV";
4
action "/usr/sbin/automount -c";
5
};
Copied!
如果 autofs(5)devd(8) 已经在运行,可以重新加载配置:
1
# service automount restart
2
# service devd restart
Copied!
可以通过在 /etc/rc.conf 中添加这行来设置为在启动时启动autofs(5)
1
autofs_enable="YES"
Copied!
autofs(5)需要启用 devd(8) ,它在默认情况下是启用的。
使用如下命令立即启动服务:
1
# service automount start
2
# service automountd start
3
# service autounmountd start
4
# service devd start
Copied!
每个可以自动挂载的文件系统在 /media/ 中显示为一个目录。该目录是以文件系统的标签命名的。如果标签缺失,该目录就以设备节点命名。
文件系统在第一次访问时被透明地挂载,并在一段时间的非活动后被取消挂载。也可以手动卸载自动挂载的驱动器:
1
# automount -fu
Copied!
这种机制通常用于存储卡和 U 盘。它可以用于任何块状设备,包括光驱或 iSCSILUN。