21世紀末の地球で飛空大陸が墜落の危機!
アキラは犯罪者の手をかいくぐり、そして墜落を阻止できるか!?
壮絶エアパニック小説《REVERSE PLANET》配信中!
ボクのPDA Linux Zaurus SL-C1000 ですが、固有名詞がありません。
以前なんかペタリンコちゃんとかそういう系統の名前をテケトーブッコイタ気がするんですが……。
そういや、前回の T10 接続のときもそうだったけど、詳しいやり方をここに書いてなかったナー。
じゃあ、今後 Linux を勉強したい人の役に立つと信じて書こう。
Linux でリムーバブルメディアやHDDを使う方法 とりあえずOSは対応しているものとし、かつ標準ドライバで間に合うような独自的でない商品を使うと仮定。
USB機器を本体に指したところから。
なお zaurus の場合、接続にはUSBホストケーブルというものが必要です。
こいつ。形の似たような別のは使えません。配線の関係でこいつじゃなきゃ駄目。
認識作業は全てスーパーユーザーモードで行います。
まずはコマンドプロンプトを起動。
SL系 zaurus の場合は標準で『ターミナル』という名前のプログラムが入っていますから、それを使います。
ほとんどの人が初期状態ではスーパーユーザーモードになっていないと思うので、下記のコマンドを入力。/home/zaurus> su -
パスワードを訊かれた場合、root のパスワードを過去に設定しているはずなので、それを入力。
zaurus の場合、『シークレット設定』で番号を設定していると思うので、それを使います。
使いたい機器がハードウェア上で認識されてるかどうかは、下記のコマンドで確認できます。# fdisk -lDisk /dev/sda: 1024MB, 1073750000 bytes
64 heads, 32 sectors/track, 992 cylinders
Units = cylinders of 1024 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 992 732441 6 FAT16
それっぽい機器がこの欄にない場合、認識に失敗しています。
これを見ると、デバイス名が "/dev/sda1" で、フォーマット形式は "FAT16" であることが分かります。
次にマウントポイントを作成。
ここではディレクトリ /mnt 配下に新たに /usbstorage というディレクトリを掘ります。
ホントはどこでもいいんですけどね。# cd /mnt
# mkdir usbstorage
この状態で下記のコマンドを。# mount /dev/sda1 /mnt/usbstorage
このとき、第1引数は fdisk の Device 欄に書かれたもの。第2引数は上記で作成したマウントポイントへの絶対パスになります。
特にエラーメッセージが出なければマウント成功。
マウントポイントをルートとし、デバイスにアクセスできるはずです。
HDDやドライブ類も基本的に全てこれでOKのハズ。
この作業のことを「マウント作業」といい、Linux でメディアを使う場合はたいがい必要です。
ただし、俺の手持ちのSDカードリーダーの場合、メディアを挿してない状態ではマウントできないみたいでした。
このときもし日本語ファイル名を認識できなければ、下記のコマンドをトライできます。# mount -o iocharset=utf8 /dev/sda1 /mnt/usbstorage
ところで、zaurus に iRiver T10 を接続する場合、上述の方法ではマウントできません。
無理やりマウントするとマシンがハングアップします。
なぜなら、fdisk の出力結果が下記のような状況になってるから。# fdisk -lDisk /dev/sda: 256MB, 268438000 bytes
64 heads, 32 sectors/track, 248 cylinders
Units = cylinders of 512 * 256 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 876876 97686876 Unknown
(以下略)
これは2000年前後に販売されたサードパーティ製品の、ウィンドウズ以外のOSに接続しない前提の機器によく見られる現象です。
パーティションテーブルに不正な値がバリバリ入ってて、巧く認識できないのです。
このような場合、下記のコマンドにトライできます。# mount -t vfat -o iocharset=utf8 /dev/sda /mnt/usbstorage
先ほどの "/dev/sda1" という部分の数字を取って "/dev/sda" に変えたものです。
デバイス名の最後の数字は「パーティション番号」といって、メディアがパーティション分割されている場合にその番号を指定するものです。
ですが T10 はそもそもパーティション情報が不正なので、メディア全体を認識するために数字を省略します。
ただし、パーティション情報が正しいメディアの場合、"/dev/sda1" という指定の仕方をしないとエラーではじかれるようです。
また、フォーマット形式が "Unknown" であるため、実際には "FAT" 形式であるということを指定するために -t vfat オプションを付加します。
(NTFS 形式を除く全ての FAT フォーマットメディアは、形式に関わらず全て -t vfat で認識できます)
これで各種メディアに読み書きできるようになりました。
ls コマンドやエクスプローラーなどで確認してみるといいと思います。
さて、増設ドライブなどの場合は、/etc/init.d 配下に自動マウント用のスクリプトを作っておくことで、起動時に自動認識できるようになります。
ですが特にUSBなどのホットプラグ対応機器の場合、OS稼働中に抜き差しが可能ですので、その際に自動マウントさせられるようになっています。
USBの制御機構が hotplug の場合、/etc/hotplug/usb/hogehoge というシェルスクリプトが自動的に走る仕組みになっています。(hogehoge の部分は機器によって色々)
zaurus でUSBメモリを認識させたい場合、/etc/hotplug/usb/usb-storage というファイルを作って、この中にシェルを組んでおけばいいのです。mount -t vfat -o iocharset=utf8 /dev/sda1 /mnt/usbstorage
if [ $? = 0 ]; then
ln -s /etc/hotplug/usb/usb-storage.off $REMOVER
fi
2行目以降の if 文はリムーバーといって、USBが抜かれたときに自動実行されるプログラムを定義しています。
mount が成功したときにだけ、ln コマンドでリムーバースクリプトへのパスを張っています。
usb-storage シェルの実行時には、それが抜かれたときに動作すべきスクリプト名が $REMOVER という変数にフルパスで入っています。
ここでは、"/etc/hotplug/usb/usb-storage.off" という名前のスクリプトへのシンボリックリンクを張って、抜かれたときそれが実行されるようにしています。
というわけで /etc/hotplug/usb/usb-storage.off という名前で下記プログラムを作っておきます。umount /mnt/usbstorage
rmmod usb-storage
これら2つのスクリプトのパーミッションを 755 に変更し、所有者も chown コマンドなどで root/root に変更しておきます。
これで、USB機器が挿されたときに自動マウントするようになりました。
ただし zaurus の場合、単純にこの状態で T10 を挿すとマシンがハングアップします。
デバイス名が "/dev/sda1" のままになっているため、このままではフォーマット形式 "Unknown" のデバイスは認識できないからです。
かといってこれを強引に "/dev/sda" に変えると、今度は普通のUSBメモリ類が認識できなくなります。
そこで俺の場合、その辺を自動認識するようなスクリプトを書いています。
具体的な内容は俺様専用で他所では動かない可能性の方が高いので割愛しますが、- fdisk -l /dev/sda | grep -i fat > /tmp/check.result を実行
- FAT 形式の機器があると /tmp/check.result はファイルサイズ≠0になるので、その場合は通常のマウントを行う
- マウント成功の場合はリムーバーを作ってスクリプト終了
- マウント失敗の場合、lsusb | grep "ID xxxx:xxxx " を実行
- lsusb コマンドによって自分がマウントしたい機器かどうか判別できるので、マッチする場合はそれ専用のマウントコマンドを実行
- マウント成功の場合はリムーバーを作る
という流れになります。