許多外部儲存裝置的解決方案,例如硬碟、USB 隨身碟及 CD 與 DVD 燒錄機皆使用通用序列匯流排 (Universal Serial Bus, 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 bus (required for ATA/SCSI)
device da # Direct Access (disks)
device pass # Passthrough device (direct ATA/SCSI access)
device uhci # provides USB 1.x support
device ohci # provides USB 1.x support
device ehci # provides USB 2.0 support
device xhci # provides USB 3.0 support
device usb # USB Bus (required)
device umass # Disks/Mass storage - Requires scbus and da
device cd # needed for CD and DVD burners
FreeBSD 使用 umass(4) 驅動程式透過 SCSI 子系統來存取 USB 儲存裝置,因此任何在系統的 USB 裝置都會以 SCSI 裝置呈現,若 USB 裝置是 CD 或 DVD 燒錄機,請不要在自訂核心設定檔中引用 device atapicam
。
本節後續的部份將示範如何檢查 FreeBSD 能夠辦識 USB 儲存裝置以及如何設定該裝置。
要測試 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)
若該裝置尚未被格式化,請參考 節 17.2, “加入磁碟” 中有關如何在 USB 磁碟格式化與建立分割區的說明。若磁碟中有檔案系統,可由 root
依據 節 3.7, “掛載與卸載檔案系統” 中的說明掛載磁碟。
要允許未被信任的使用者掛載任意媒體,可開啟 vfs.usermount
,詳細說明如下。從安全性的角度來看這並不是安全的,大多的檔案系統並不會防範惡意裝置。
要讓裝置可讓一般使用者掛載,其中一個解決方案便是使用 pw(8) 讓所有裝置的使用者成為 operator
群組的成員。接著,將下列幾行加入 /etc/devfs.rules
來確保 operator
能夠讀取與寫入裝置:
[localrules=5]
add path 'da*' mode 0660 group operator
若系統也同時安裝了內建 SCSI 磁碟,請更改第二行如下:
add path 'da[3
-9]*' mode 0660 group operator
這會從 operator
群組中排除前三個 SCSI 磁碟 (da0
到 da2
),接著取代 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
可以取消註解在 /etc/auto_master
中的下行來自動掛載 USB 裝置:
/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
要設定讓 autofs(5) 在開機時啟動可以加入此行到 /etc/rc.conf
:
autofs_enable="YES"
autofs(5) 需要開啟 devd(8),預設已經開啟。
立即啟動服務:
#
service automount start
#
service automountd start
#
service autounmountd start
#
service devd start
可以被自動掛載的檔案系統會在 /media/
中以目錄呈現,會以檔案系統的標籤來命名目錄,若標籤遺失,則會以裝置節點命名。
檔案系統會在第一次存取時自動掛載,並在一段時間未使用後自動卸載。自動掛載的磁碟也可手動卸載:
#
automount -fu
這個機制一般會用在記憶卡與 USB 隨身碟,也可用在任何 Block 裝置,包含光碟機或 iSCSI LUN。
本文及其他文件,可由此下載: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。
若有 FreeBSD 方面疑問,請先閱讀
FreeBSD 相關文件,如不能解決的話,再洽詢
<questions@FreeBSD.org>。
關於本文件的問題,請洽詢
<doc@FreeBSD.org>。