2004/5/23

FreeBSD 4.9でUSBディスクを使う(FreeBSD)

はじめに

FreeBSD 4.9-RELEASEで動作しているマシンにUSBのフラッシュメモリやHDDを接続し、マウントしました。

条件としては以下の二つを挙げました。

  • Windowsフォーマット(FAT/FAT32)のものをマウントする
  • 日本語ファイル名も正しく表示させる

今回の設定を行うと、ひょっとしたら最近のデジカメ等(大容量記憶装置として認識するかも)も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だから駄目なのかはよく判りません。残念だった〜。
投稿者 yotan : 2004年5月23日 11:28| トラックバック(0)
アンケート
このエントリは・・・
とても役に立った
役に立った
どちらとも言えない
あまり役に立たなかった
全く役に立たなかった
コメント
コメントする

※コメント内にURLを書くとSPAM扱いとなります。2ch風に表記はOKです










名前、アドレスを登録しますか?