1. FreeBSD 11.1 RELEASE - usb - NTFS フォーマットのドライブをマウントする

 
1.1 概要
1.2 dmesg 確認
1.3 ports
1.4 fuse 有効化
1.5 マウント

1.1 概要

 ちょっとやる機会があったので、記録を残しておきます。  USB へのアクセスの仕方は、FreeBSD 4.0 あたりとずいぶん変わっているようで・・・。  本記事は主に「FreeBSD 10 で ntfs-g3 を使って NTFS を mount: uyota 匠の一手」「Mounting NTFS on FreeBSD」を参考にさせていただきました。

1.2 dmesg 確認

 USB を認識させるには、カーネルに定義しておく必要があるのですが、特にコメントアウトしていなければ、FreeBSD 11.1 RELEASE ではデフォルトで有効になっています。  確認するならば

/usr/src/sys/アーキテクチャ/conf/カーネルソース名
 のファイルで(下記は amd64 のものですが)下記が有効になっていることを確認します。

# USB support
options         USB_DEBUG               # enable debug msgs
device          uhci                    # UHCI PCI->USB interface
device          ohci                    # OHCI PCI->USB interface
device          ehci                    # EHCI PCI->USB interface (USB 2.0)
device          xhci                    # XHCI PCI->USB interface (USB 3.0)
device          usb                     # USB Bus (required)
device          ukbd                    # Keyboard
device          umass                   # Disks/Mass storage - Requires scbus and da
 次に USB デバイスのポートが有効になっているかを下記のコマンドで確認します。

> cat /var/run/dmesg.boot | grep usb
 わたしが実際にマウントの確認を行った、VirtualBox 上の環境では、以下のように出力されました。

usbus0 on xhci0
usbus0: 5.0Gbps Super Speed USB v3.0
ugen0.1: <0x8086 XHCI root HUB> at usbus0
uhub0: <0x8086 XHCI root HUB, class 9/0, rev 3.00/1.00, addr 1> on usbus0
 マウントはしていませんが、持っている実機では、以下のように出力されました。

ugen0.2: <vendor 0x056e TK-FCP025 Series> at usbus0
ukbd0: <vendor 0x056e TK-FCP025 Series, class 0/0, rev 1.10/1.03, addr 1> on usbus0
ugen2.2: <vendor 0x8087 product 0x0024> at usbus2
uhub3: <vendor 0x8087 product 0x0024, class 9/0, rev 2.00/0.00, addr 2> on usbus2
ugen1.2: <vendor 0x8087 product 0x0024> at usbus1
uhub4: <vendor 0x8087 product 0x0024, class 9/0, rev 2.00/0.00, addr 2> on usbus1
uhid0: <vendor 0x056e TK-FCP025 Series, class 0/0, rev 1.10/1.03, addr 1> on usbus0
usbus0 on xhci0
usbus0: 5.0Gbps Super Speed USB v3.0
usbus1: EHCI version 1.0
usbus1 on ehci0
usbus1: 480Mbps High Speed USB v2.0
usbus2: EHCI version 1.0
usbus2 on ehci1
usbus2: 480Mbps High Speed USB v2.0
ugen1.1: <Intel EHCI root HUB> at usbus1
ugen0.1: <0x8086 XHCI root HUB> at usbus0
ugen2.1: <Intel EHCI root HUB> at usbus2
uhub0: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus1
uhub1: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus2
uhub2: <0x8086 XHCI root HUB, class 9/0, rev 3.00/1.00, addr 1> on usbus0
ugen0.2: <vendor 0x056e TK-FCP025 Series> at usbus0
ukbd0: <vendor 0x056e TK-FCP025 Series, class 0/0, rev 1.10/1.03, addr 1> on usbus0
ugen2.2: <vendor 0x8087 product 0x0024> at usbus2
uhub3: <vendor 0x8087 product 0x0024, class 9/0, rev 2.00/0.00, addr 2> on usbus2
ugen1.2: <vendor 0x8087 product 0x0024> at usbus1
uhub4: <vendor 0x8087 product 0x0024, class 9/0, rev 2.00/0.00, addr 2> on usbus1
uhid0: <vendor 0x056e TK-FCP025 Series, class 0/0, rev 1.10/1.03, addr 1> on usbus0
 usbusx がミソのようで、USB 用のバスが何のバージョンの USB をサポートしているかが出力されているようです。

1.3 ports

 NTFS フォーマットを認識させるには、ports が必要なようで。

cd /usr/ports/sysutils/fusefs-ntfs
make
make install

1.4 fuse 有効化

 fuse が何なのかをわたしは知らないのですが・・・。  以下のいずれかの方法で fuse のカーネルモジュールをロードする必要があるそうです。  テンポラリにロードしたいなら(わたしはこれを使用しました)

> kldload fuse
 /boot/loader.conf に書くなら、以下の行を追加します。(未確認)

fuse_load="YES"
 /etc/rc.conf に書くなら、以下の行を追加します。(未確認)

fusefs_enable="YES"

1.5 マウント

 さて、いよいよマウントですが。  まず、USB デバイスをぶっ指します。  今回使用したのは SONY の USB メモリです。  ぶっ指した時点で、コンソールと /var/log/message に以下が出力されます。

ugen0.2: <Sony Storage Media> at usbus0
umass0 on uhub0
umass0: <Sony Storage Media, class 0/0, rev 2.00/1.00, addr 1> on usbus0
umass0:  SCSI over Bulk-Only; quirks = 0x8100
umass0:2:0: Attached to scbus2
da0 at umass-sim0 bus 0 scbus2 target 0 lun 0
da0: <Sony Storage Media 0100> Removable Direct Access SCSI device
da0: Serial Number 5A08100900139
da0: 40.000MB/s transfers
da0: 15296MB (31326208 512 byte sectors)
da0: quirks=0x2<NO_6_BYTE>
 6行目でデバイス名が da0 らしいことが分かります。  確認してみます。

> ls /dev/da0*
/dev/da0  /dev/da0s1
 実際にマウントするのは /dev/da0s1 になります。  マウント用のディレクトリを作成しておきます。

> mkdir -pv /mnt/ntfs
 いよいよマウント・・・。

> ntfs-3g -oro /dev/da0s1 /mnt/ntfs
 エラーも警告もなく次の行になれば、マウント成功です。

> mount
/dev/ada0s1a on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
/dev/fuse on /mnt/ntfs (fusefs, local, read-only, synchronous)
> ls /mnt/ntfs
 .   ..  'Age of King'   key   Manjaro  'System Volume Information'   カタログ   仮想環境Vagrant
 日本語まで綺麗に表示されるので、ある意味、びっくりです。  満足してアンマウントして USB メモリをはずします。

> umount /mnt/ntfs