▼ZipドライブをSolaris 2.6で使用する (mtools版)▼

Abstract

ZipドライブをSolaris2.6マシン(SPARC Ultra1)につなげてみました。 ufs での使用 はできたので、 今度は MS-DOS 形式での扱いができる mtools に挑戦です。

$Id: solzipm.html,v 3.10 2000-05-29 04:11:37+09 kabe Exp $


つなぎ方の種類

ここで述べるのはつなぎ方の種類 のうち、

に該当します。 vold は必須ではないのですが、voldをかませておくと root でなくてもデバイスが直接叩けるので (/vol/dev/aliases/rmscsi0)、 mtools を setuid する必要がなく便利です。 mtoolsのインストールやメディアのフォーマットにも root 権限は不要です。

材料

mtools は 本家本元から 持ってこなくても、 FreeBSD や Linux のアーカイブを漁れば大抵落ちています。

材料を揃えたら、とりあえず ハードウェアとvoldの設定を 済ませておきましょう。

コンパイル

mtools は ハードウェア寄りのツールの割には configure は簡単です。

	./configure --enable-new-vold --prefix=/usr/local --disable-floppyd
重要なのは --enable-new-vold でしょうかね。あとは趣味。

何を読んどきゃいいんぢゃ

モジュール数が多い割には mtools のソースディレクトリは 全ファイルがベタに置いてあって、何を読んだらいいかわかりにくいです。 INSTALL や README には大したことは書いてありません。ここは mtools.5mtools.1 を まず読んでおきましょう。


mtools.confの設定などなど

今回は設定に手間取りました。 基本的に Linux + フロッピー という環境がデフォルトのようで、 他の環境で使うには自分で色々考えねばならんようです。

結論から言うと、

▽解説

色々やった後わかりましたが、無理に media_findname(3x) を使おうとしなくても、 デバイスファイルの指定に関しては直接 file="/vol/dev/aliases/rmscsi0" で全然問題ないみたいです。

100MB入るぢゃん

mpartition -v で見るとわかりますが、ZIP 100 の容量は 計196608 (0x30000) セクタ == 100663296 バイト あるようです。 format.datの設定では 2406x2x40= 98549760までですので、 ジオメトリを自動設定させた mtoolsの方が詰め込めます。 (format.dat書き換えれば ufs やデバイス直叩きでも100Mいくと思いますが)

drive X: vold=1 file="rmscsi0" partition=4 scsi=1 nodelay (自動設定)
	zero          100401152 12-13-1999   7:30  zero
drive Y: file="rmscsi0" mformat_only cylinders=2406 heads=2 sectors=40 partition=4 scsi=1 privileged=0 nodelay (ジオメトリ明示)
	zero          98304000 12-13-1999   7:36  zero

直に /vol/dev/aliases/rmscsi0 にたたき込むと 100663296バイトまで 詰め込めます。format すると 98631680 までなんですよね(何が違うんだろう)


フォーマットすぞ

vold 経由なので、root権限は要りません。

DOS/V(!) のハードディスクをフォーマットするのと手順は ほとんど同じです。(めんどくさいとも言う)

mpartition -Ic x:
DOS の FDISK に相当。 パーティションテーブルを初期化(-I)し、X: パーティションを作成(-c)。 普通は やらないようですが、同一メディアに複数のパーティションを 切る場合は -I と -c をバラして発行します。
mformat x:
X: パーティション(ドライブ)をDOS形式でフォーマット。

これらの手順をすっとばすと、 「DOSのファイルシステムじゃない」「パーティションがない」 などのよくわからんエラーに悩まされます。基本を守ろう。


使おう

エジェクトする際、 mzip -e x: ではオフラインにはなるようですが、 なぜか「がこんっ」までいきません。 (それ以前にパッチ当てないと vold形式ファイル名を理解しない)


使用上の注意

ufs は証拠隠滅してからフォーマットすべし
どうも ufs を一旦こしらえたメディアは mpartition/mformat しても 中途半端にSunOSのラベルが残るようで、 再度挿入すると ufsでマウントされてしまいます。 マウントされているとロクなことはないので、 mformat する前には
	% volrmmount -e rmscsi0
	% cat /kernel/genunix >/vol/dev/aliases/rmscsi0
	% eject rmscsi0
として、ufs の痕跡を消しておいたほうが良いようです。 再度挿入してマウントされなければ大丈夫。

ufs が残っていると
voldがufsとして自動的にマウントしてしまうことがありますが、 この状態からでも mtools でパーティションを切ったり ファイルを書いたりもできちゃいます。 ufs 側からも同時に書けてしまうので、 わけわかんない状態になることは目に見えています。 マウントされてしまったら (mount(1)やdf(1)でわかる) 必ず アンマウント(volrmmount -e)してから mtools を使いましょう。
voldが落ちやすい?
いじくり倒していると vold が変死し、 /vol にアクセスしているプロセスが暴走 (? カーネルレベルで CPU 100%になる。killも効かない) 状態になることがあります。 "NFS server for volume management (/vol) not responding still trying" と出ていれば vold が死んでいます。 場合にもよるでしょうけど、 で復活します。(完全復活かどうかは…?)

俺的質問集

・ボリュームラベルをつけるには?
mlabel コマンドを使います。
・デフォルトで組み込まれる A(floppy), J(Jaz), Z(Zip) ドライブを消したい
マニュアルには載ってないのですが、 mtools.confに
	clear_drive J
	
と書くと消せます。(J: のようにコロンをつけてはいけない、らしい)
・デフォルトでは何ドライブが組み込まれてる?
mtoolstest を実行すると設定がダンプされます。
・mlabel でラベルをつけたのに、/vol/dev/dsk/unlabeled に なるんですけど
vold(1M) (実際にはvold.confに書かれている label_dos.so) が、 パーティションに対して設定されたラベルを読めないためです。 「気にしない」のが一番。 根本的な治療法はラベル判別ルーチンを新造することです。 (APIが公開されてないので不可能だと思う)

superfloppyフォーマット

ZIP は通常は FDISKパーティションを切って使うようになっているのですが、 MO みたいに SuperFloppy形式(て言うのかな?)でフォーマットすることも 一応可能だったりします。

	drive v: file="/vol/dev/aliases/rmscsi0" scsi=1 privileged=0 nodelay \
	         mformat_only cylinders=2408 heads=2 sectors=40
	drive w: file="/vol/dev/aliases/rmscsi0" scsi=1 privileged=0 nodelay \
	         mformat_only cylinders=3072 heads=2 sectors=32

要するに partition= がありません。 前者は format.dat に準じたパラメータ、 後者は 196608セクタいっぱいまで使うもの。

ただこの方法は他のOSと互換性はないと思うので、 ufsでの使用と同様、ローカルでの使用にとどまると思います。

これをそのまま突っ込んでやると vold が認識して pcfsでマウントしてくれる(!)ように見えますが、 FAT12でマウントされているのでよろこんではいけません。 書き込んだら最後 FAT ごと破壊されます。 (mdirすると腐っているのがわかる) 使う際にはいちいち volrmmount -e してから mtools でアクセスします。

FAT16でマウントするには、手動で

	mount -F pcfs /vol/dev/dsk/c0t5d0/label:c /mnt
などと、":c" をつけます。(SPARCでもできるらしい。) せっかく voldがあっても、このままでは root でしか使えません。

本来 ":c" は FDISK 形式の指定ですが、 mformat は partition=句が なくてもパーティションテーブルを偽造してくれるので FDISK 形式で マウントできたりします。 ので、Windowsでフォーマットしたハードディスクも この方法でマウントはできます。


kabe@sra−tohoku.co.jp