はじめに
FreeBSD 4.9-RELEASEで動作しているマシンにUSBのフラッシュメモリやHDDを接続し、マウントしました。
条件としては以下の二つを挙げました。
今回の設定を行うと、ひょっとしたら最近のデジカメ等(大容量記憶装置として認識するかも)もFreeBSDマシンに繋げる事ができるかもしれません。
カーネルの設定確認
GENERICカーネルをそのまま使っている人は問題ないと思いますが、一応確認しましょう。
以下の記述が/usr/src/sys/i386/conf/GENERIC(若しくは現在のconfファイル名)に含まれているか確認してください。
options MSDOSFS # MSDOS Filesystem device uhci # UHCI PCI->USB interface device ohci # OHCI PCI->USB interface device usb # USB Bus (required) device ugen # Generic device umass # Disks/Mass storage - Requires scbus and da device scbus # SCSI bus (required) device da # Direct Access (disks) |
※今回の設定では厳密に言えばMSDOSFSの記述は不要ですが、一応入れておきましょう。
足りない行があれば追加して、カーネルを再構築してください。
| # cd /usr/src # make buildkernel KERNCONF=GENERIC # make installkernel KERNCONF=GENERIC # sync;sync;reboot |
rc.confの設定
カーネルを再構築しただけではUSBデバイスは認識してくれません。/etc/rc.confに以下の行を追加して再起動します。
usbd_enable="YES" |
OS再起動後、dmesgで起動ログを見ると、以下のような記述が見つかると思います。これがあればUSBデバイスを認識する準備が出来ました。
usb0: <Intel 82371AB/EB (PIIX4) USB controller> on uhci0 usb0: USB revision 1.0 uhub0: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub0: 2 ports with 2 removable, self powered |
必要なportsのインストール
今回は日本語対応のmsdosファイルシステムのmount用コマンド(とモジュール)である「japanese/msdosfs」と、日本語対応のlsコマンド「japanese/jls」をインストールします。
packageからでも、portsからでもいいのでインストールしてください。以下にはportsからのインストール方法を記します。
| # cd /usr/ports/japanese/msdosfs # make install clean # cd /usr/ports/japanese/jls # make install clean |
japanese/msdosfsは標準ではmoduleファイルが/modulesに無い関係上、起動時に/usr/local/etc/rc.d/ja-msdosfs.shでkldloadしています。よって、もう一度再起動してください。ここまで読んで気づいたと思いますが、再起動はここで一回やればいいです(笑)
USBデバイスの認識確認
それではFATでフォーマットされている適当なデバイスをUSBポートに差し込んでみましょう。
続いてusbdevsコマンドで認識されているか確認します。
# usbdevs addr 1: UHCI root hub, Intel addr 2: Flash Disk, USB addr 3: USB2.0 Storage Device, Cypress Semiconductor |
上の例では128MBのフラッシュメモリとUSB2.0の外付けHDDが繋がっていることが分かります。
デバイスのマウント
それではマウントしてみましょう。今回は二番目に認識されたUSB-HDDをマウントしてみます。
デバイス名は/dev/da?s1となり。?は最初に認識しているものから0が入ります。今回はport 2に刺さっているものをマウントするので/dev/da1s1となります。
始めにマウントポイントを作成します。今回は/mnt/usbdiskにします。事前にディレクトリを作成しておいてください。
以下にマウント手順を示します。
| # mkdir /mnt/usbdisk # mount_jamsdos -m 777 /dev/da1s1 /mnt/usbdisk |
無事マウントできたら、dfやmountコマンドで確認してください。
mount_jamsdosコマンドには各種オプションがありますが、標準でfatドライブのユーザはroot.wheelとなり、読み書きのパーミッションは0755となります。今回は誰でも読み書き出来るように-mオプションで0777に再設定しています。mount_jamsdosにはマニュアルページはないのですが、mount_msdosの方のマニュアルを見てオプションを確認してください。
ファイル内容を普通にlsで見るとファイル名の「ん」が「た」に変わってしまいます。他にもあるかもしれませんが、正しいファイル名の一覧を見るにはjlsコマンドを使います。jlsのオプションパラメータはlsと一緒です。
OS起動時にマウントするには
japanese/msdosfsはカーネルモジュールファイルを/usr/local/lib/ja-msdosfsにインストールして、/usr/local/etc/rc.d/ja-msdosfs.shでOSの初期設定が一通り終わった後にモジュールをロードする関係上、このままでは起動時に/etc/fstabでマウント設定をしてもうまく動作しません。
この場合は以下の手順でmsdos_ja.koを/modulesにコピーして他のモジュールと同じ扱いにすればOKです。
| # cp -p /usr/local/sbin/mount_jamsdos /sbin # cp -p /usr/local/lib/ja-msdosfs/msdos_ja.ko /modules # chmod a-x /usr/local/etc/rc.d/ja-msdosfs.sh |
/etc/fstabに書く際のFStypeは「jamsdos」です。以下に例を示します。
/dev/da1s1 /mnt/usbdisk jamsdos rw 0 0 |
sambaで共有してみる
ついでなのでsambaで共有してみましょう。ここまで来ると、直にWindowsマシンにUSBデバイスをつけた方が早くて安心という噂もありますが…
既にsambaが動いている環境が前提で話をします。今回のmount_jamsdosはFATのファイル名を全てEUCにしか変換できませんので、sambaの設定もEUCにします。以下にsmb.confの例を示します。
[global]
coding system = euc
client code page = 932
:
:
[usbdisk]
comment = USB Disk
path = /mnt/usbdisk
read only = No
guest ok = Yes |
これでWindowsマシンから共有フォルダをみると、ちゃんとファイルにアクセスができます。ただし、ファイル名に使われている文字コードによっては表示はされるけど認識されないケースがありました。以下に示します。
| 使用文字 | 例 | OK/NG |
| 1byte英数字 | abc123.txt | OK |
| 全角平仮名漢字 | ほえほえ.txt | OK |
| 半角カタカナ | ポヨヨーン.txt | OK |
| ○数字 | ①.txt | OK |
| 特殊記号 | Ⅲ.txt | NG |
特殊記号を使っているファイル名はFreeBSD側で別の文字に変更してあげれば良いので大きな問題ではないでしょう。
おわりに
FreeBSD 5.2以降ではmount_msdosfsというコマンドになり、iconvが組み込まれているため、マウントオプションで各種文字コードに対応できるみたいです。
今回は将来無くなって行く4.x系の話でしたが、まだ現役で4.xを使用している人も多いと思われるため、参考になるのではと思います。
後日談
調子に乗って、160GBのUSB-HDDをマウントしようとしたら「mountmsdosfs(): disk too big, sorry」ってカーネルメッセージが出てマウント出来ませんでした。これはFreeBSD 4.xだから駄目なのかはよく判りません。残念だった〜。※コメント内にURLを書くとSPAM扱いとなります。2ch風に表記はOKです


