USB HDD の利用
110519
最終更新日:Monday, 14-Jun-2004 18:33:53 JST

目次


機種

ノートパソコンのハードディスクがそろそろ窮屈になってきたので, ハードディスクを増設することにした。 最近は 250G などの,やたらと容量が大きいものがあるが, 映画もビデオも記録しないので,そこまで大きい必要はない。 設置面積が小さくて済むことと,余分な電源が必要ないという理由で, ポータブルな USB 接続のハードディスクにした。

機種: I-O DATA  HDPX-U80
容量: 80G バイト
金額: 29,800円

Vine Linux 2.6 の場合

取り敢えずハードディスクを USB ケーブルでノートパソコンに接続してみる。 認識できたか否かを確かめるために /var/log/messages を見る。

/var/log/messages の内容
Jun  7 14:13:16 shiba kernel: hub.c: new USB device 00:07.2-2.2, assigned address 3
Jun  7 14:13:16 shiba kernel: usb.c: USB device 3 (vend/prod 0x4bb/0x107) is not claimed by any active driver.
Jun  7 14:13:17 shiba murasaki.usb[1987]: device is added
Jun  7 14:13:17 shiba murasaki.usb[1987]: vendor:0x4bb product:0x107 Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x8 Isubclass:0x6 Iprotocol:0x50
Jun  7 14:13:17 shiba murasaki.usb[1987]: MATCH(usb-storage) -> match_flags:0x380 vendor:0x0 product:0x0 Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x8 Isubclass:0x6 Iprotocol:0x50
Jun  7 14:13:17 shiba kernel: SCSI subsystem driver Revision: 1.00
Jun  7 14:13:17 shiba kernel: Initializing USB Mass Storage driver...
Jun  7 14:13:17 shiba kernel: usb.c: registered new driver usb-storage
Jun  7 14:13:17 shiba kernel: scsi0 : SCSI emulation for USB Mass Storage devices
Jun  7 14:13:18 shiba kernel:   Vendor: I-O DATA  Model:  HDPX-U           Rev: MO4O
Jun  7 14:13:18 shiba kernel:   Type:   Direct-Access                      ANSI SCSI revision: 02
Jun  7 14:13:18 shiba kernel: USB Mass Storage support registered.

どうやら SCSI 機器として認識したらしい。 このノートパソコンには,他には SCSI 機器は無いはずなので,多分,/dev/sda が割り当てられているはずだ。 初期状態は,どうせ一つのパーティションで VFAT くらいでフォーマットされているのだろう。 念のため,/dev/sda1 をマウントして中身を確認してみる。

デバイスと初期状態の確認
[root@shiba /root]# mkdir /mnt/usbhdd
[root@shiba /root]# mount -t auto  /dev/sda1 /mnt/usbhdd
[root@shiba /root]# df
ファイルシステム      1k-ブロック 使用済   使用可 使用率% マウント場所
/dev/hda1               省略
省略          省略
/dev/sda1             78129056        32  78129024   1% /mnt/usbhdd

ちゃんと /dev/sda に割り振られて,使えそうなことが分かったので,アンマウントして, パーティションを切り直し,フォーマットする。

パーティションの切り直し
[root@shiba /root]# fdisk /dev/sda

このディスクのシリンダ数は 9729 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)
  こういうメッセージは大容量のハードディスクでは必ず出るので気にしない!

コマンド (m でヘルプ): p    初期状態の確認

ディスク /dev/sda: ヘッド 255, セクタ 63, シリンダ 9729
ユニット = シリンダ数 of 16065 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/sda1             1      9729  78148161    c  Win95 FAT32 (LBA)
コマンド (m でヘルプ): d    パーティションを削除
領域番号 (1-4): 1

コマンド (m でヘルプ): n    新しくパーティションを作成
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-9729, 初期値 1): 
初期値 1 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-9729, 初期値 9729): +20480M

コマンド (m でヘルプ): p

ディスク /dev/sda: ヘッド 255, セクタ 63, シリンダ 9729
ユニット = シリンダ数 of 16065 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/sda1             1      2611  20972826   83  Linux

コマンド (m でヘルプ): n   必要なだけパーティションを作成
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 2
最初 シリンダ (2612-9729, 初期値 2612): 
初期値 2612 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (2612-9729, 初期値 9729): +20480M

途中省略

コマンド (m でヘルプ): p

ディスク /dev/sda: ヘッド 255, セクタ 63, シリンダ 9729
ユニット = シリンダ数 of 16065 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/sda1             1      2611  20972826   83  Linux
/dev/sda2          2612      5222  20972857+  83  Linux
/dev/sda3          5223      9729  36202477+  83  Linux

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。
[root@shiba /root]# 

なお,パーティションの意味や fdisk の使い方は別のページに書いておいた。

ハードディスクのパーティションを作成したので,次に,それぞれのパーティションをフォーマットしなければならない。 Linux 用のフォーマットは 最近は ext3 なので,コマンドラインで

mkfs -t ext3 /dev/sda1

とすればよいと思ったのだが, mkfs.ext3 が無い! といって怒られた。 locate mkfs.ext3 で調べてみると,確かにそんなものはどこにもない。

mkfs は色々な種類のファイルシステムをフォーマットするためのツールを呼び出すスクリプトらしいが, Vine 2.6 の mkfs は ext3 用のスクリプトが整備されていないらしい。

マニュアルなどを調べてみると,mke2fs に -j オプションをつけてフォーマットすればよさそうだ。 (ほんまかいな??)

ext3 でフォーマット
[root@shiba /root]# mke2fs -j /dev/sda1
mke2fs 1.29 (24-Sep-2002)
warning: 326 blocks unused.

Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
2626560 inodes, 5242880 blocks
262160 blocks (5.00%) reserved for the super user
First data block=0
160 block groups
32768 blocks per group, 32768 fragments per group
16416 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000

Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@shiba /root]# 
以下同様に /dev/sda2 /dev/sda3 もフォーマットする

これで初期設定は終わった。後は好きなようにマウントすれば使えるはずだ。

マウントの例
[root@shiba /root]# mkdir /mnt/usbhdd1   マウントするためのディレクトリーの作成
[root@shiba /root]# mkdir /mnt/usbhdd2
[root@shiba /root]# mount -t auto /dev/sda1 /mnt/usbhdd1   マウントする
[root@shiba /root]# mount -t auto /dev/sda2 /mnt/usbhdd2 

これで /mnt/usbhdd1 や /mnt/usbhdd2 というディレクトリーが USB HDD になっているので, 適当に読み書きしてみる。

なお,USB 機器だと,使い終わった後,気軽に引き抜いてしまいそうだが, 引き抜く前にアンマウントしておかないと,書き込んだデーターが失われるかもしれない。

アンマウントの例
[root@shiba /root]# umount /mnt/usbhdd1
[root@shiba /root]# umount /mnt/usbhdd2

常時接続しておくなら /etc/fstab にマウントの設定を記述しておけばよいが, 私のように必要な時だけ接続するなら,手動でマウントするか,あるいは autofs を使うのがよいだろう。 このあたりの話はこちらのページに書いておいた。

autofs を使って自動マウントするには /etc/auto.misc に次のような設定を追加する。

/etc/auto.misc の設定例
usbhdd1		-fstype=auto		:/dev/sda1
usbhdd2		-fstype=auto		:/dev/sda2
usbhdd3		-fstype=auto		:/dev/sda3

/etc/auto.misc の修正をしたら,念のため コマンドラインで /etc/rc.d/init.d/autofs restart を実行する。 (必要だったかどうか覚えていないが,実行しても悪いことはないはず ..... 。)

これで,/misc/usbhdd1 や /misc/usbhdd1 にアクセスすればハードディスクが自動的にマウントされる。 また,何もせずに放っておくと,自動的にアンマウントされる。 詳しくはこちらのページに書いておいた。


Vine Linux 2.1.5 の場合

上記は研究室のノートパソコンに公費で購入したハードディスクを接続してみた話であるが, 使えることが分かったし,結構便利そうだったので, 同じ物を自宅でも購入してみた。

自宅のノートパソコンの機種は研究室のノートパソコンの機種とほとんど同じであるが, OS は,まだ Vine Linux 2.1.5 である。USB ケーブルを差し込んで /etc/messages を見ると, どうもドライバーが見つけられないようだ。

/var/log/messages の内容
Jun  7 20:54:03 cactus kernel: usb.c: USB new device connect, assigned device number 4 
Jun  7 20:54:03 cactus kernel: usb.c: USB device 4 (vend/prod 0x4bb/0x107) is not claimed by any active driver. 
Jun  7 20:54:03 cactus usbmgr[949]: vendor:0x4bb product:0x107
Jun  7 20:54:03 cactus usbmgr[949]: class:0x8 subclass:0x6 protocol:0x50
Jun  7 20:54:04 cactus usbmgr[949]: USB device isn't matched the configuration

USB 機器の認識は usbmgr が行っているようなので,取り敢えず /etc/usbmgr の中を覗いてみると, 設定ファイルらしい /etc/usbmgr/usbmgr.conf があった。 /etc/usbmgr/usbmgr.conf の STORAGE のあたりの記述をまねして,以下を追加してみる。

/etc/usbmgr/usbmgr.conf の追加内容
vendor 0x4bb product 0x107 module scsi_mod , sd_mod , usb-storage

さらに,設定ファイルの内容や /etc/usbmgr/ の中身を調べて, STORAGE のあたりの記述と同じようにするために, /etc/usbmgr/vendor/04bb の中に 0107 が無かったので 0107 ディレクトリーを作り, 0107 の中に,以下の内容のファイルを module という名前で作成した。

/etc/usbmgr/vendor/04bb/0107/module の内容
scsi_mod
sd_mod
usb-storage

以上の設定を終えたら,USB ケーブルを一旦抜いて,挿し直す。 ( その前に /etc/rc.d/init.d/usbmgr restart を実行したかもしれないが,忘れてしまった。)

/var/log/messages を見ると,SCSI デバイスとしてちゃんと認識されていた。 以後は Vine 2.6 の場合と同じなので省略する。

なお,/etc/usbmgr/usbmgr.conf に vendor を設定したり, /etc/usbmgr/vendor/04bb/ の下にファイルを作ったりする代わりに /etc/usbmgr/usbmgr.conf の中で class を設定したのでも良かったのかもしれない。

/etc/usbmgr/usbmgr.conf での class の設定例(未確認)
# Class Setup
# USB Clik! 40 [NEC]
class 0x8 subclass 0x4 module scsi_mod , sd_mod , usb-storage
class 0x8 subclass 0x6 module scsi_mod , sd_mod , usb-storage


このページの先頭へ