▼ZipドライブをSolaris 2.6で使用する▼

Abstract

ZipドライブをSolaris2.6マシン(SPARC Ultra1)につなげてみました。 UNIXは一般にリムーバブルドライブを苦手としていると 思っていましたが、意外にすんなり使えてしまい少々驚いています。

やるべきことはそんな多くないのですが、詳しく書いてたら やたら長くなってしまいました。 要するに

$Id: solzip.html,v 1.17 2000-06-01 00:55:44+09 kabe Exp $


材料

当然というかなんというか、このドライブはSolarisでの動作保証は していません。 iomegaのサイトには Solarisへのつなぎ方の解説 があるんですが、表玄関からは たどれなくなっているのでサポート外になったのかもしれず。

つなぎ方の種類

このテのデバイスのつなぎ方には色々な選択肢があり、


挿抜可能メディアの接続方法
▽マウントの方法:
mount を直接発行
automount(1M) にやらせる
vold(1M) を使う
マウントしない (デバイスを直接たたく)
▽ファイルシステム:
ufs で使う (mount -F ufs)
pcfs で使う (mount -F pcfs)
pcfs で使う (mtools)
なし (単なるシーケンシャルファイルとして使う)

今回行なったのは

という組合せです。 Solaris2.6に標準のソフトウェアだけで使用することができます。 使う際も一番楽チンです。

automount にマウントさせると、automountの特性上、 使い終ってから5分経たないとアンマウントされず、 イジェクトできないというハンデがあります。 (タイムアウトはもちろん変えられますが) voldでも不便はないので、rmscsiドライバがない環境での 方法だと思います。

設定するぞ

◇SCSI的に認識させる

通常のハードディスクなどを接続する手段と同じです。

念を入れるなら、モニタプロンプトでprobe-scsi して認識されることを確認します。

◇rmscsiドライバを有効にする

/etc/vold.conf を見ると、rmscsi と書かれた行が コメントアウトされているので、このコメントを外します。

	# use rmscsi drive /dev/rdsk/c*s2 dev_rmscsi.so rmscsi%d
	↑これを外す

外したら vold を再起動します。

	# /etc/init.d/volmgt stop
	# /etc/init.d/volmgt start
vold は /var/adm/vold.log にログを吐くのですが、 デフォルトでは非常に寡黙です。 初めのうちは本当に vold が動作しているのか、ちゃんと認識しているのか わかりにくいので、あらかじめ/etc/init.d/volmgt を修正して
	/usr/sbin/vold -L 14 1>/dev/console 2>&1 &
	
と、ログレベルを上げてやると、 認識しない・ラベルが読めないなどの区別がつくようになります。 ほったらかしておくとやたらにログが増えるので、 動作確認したら元に戻しておきましょう。

この段階でも挿入・イジェクトはできるので、試してみるのもよいかも。 イジェクトは eject rmscsi で行ないます。

rmscsiドライバは、Solaris2.6から標準装備となりました。 2.5の場合はソースを入手してコンパイルするようです。 もちろんSunは公式サポートしてません。 くわしくは 「voldにZipやMOを管理させよう(Solaris 2.5.1)」 あたりを参照して下さい。

◇format.datにエントリを追加

format.datに記述を加えてやらんとformatコマンドが 使えないので、素直に書きます。 以下を /etc/format.dat に書き加えます。

#
# iomega ZIP disk
#
disk_type = "ZIP 100" \
	: ctlr = SCSI \
	: ncyl = 2406 : acyl = 2 : pcyl = 2408 : nhead = 2 \
	: nsect = 40 : rpm = 3600 : bpt = 20480
partition = "ZIP 100 whole" \
	: disk = "ZIP 100" : ctlr = SCSI \
	: 0 = 0,192480 \
	: 2 = 0,192480
"ZIP 100" などの表記は人間が読むためのもので、別に SCSIの シグネチャ と照合しているわけではないので、適当に変えてもかまわんようです。


フォーマットすぞ

◇ディスクラベルを書く

ここからは root でなくても一般ユーザー権限で可能です。

メディアを突っ込んだ段階で vold が動作し、 /vol/dev/aliases/rmscsi0 といったエントリが生成されます。 生ディスクであればラベルもファイルシステムもないので、 ほかにこれといった動作はしませんが、 /var/adm/vold.log に「ラベル見つかんねーぞ」等が残るので、 トラブった時は確認してみて下さい。

◇ファイルシステムをこしらえる

イジェクトした後、再度挿せば今度は /rmscsi/rmscsi0 に マウントされて使えるようになります。 実際には /rmscsi/rmscsi0 はシンボリックリンクで、マウント自体は /rmscsi/ボリューム名 (なければunnamed_scsi) に対して行なわれます。

このため、/rmscsi/rmscsi0 を 直接share(1M) しようと しても思い通りにはいきません (試してみよう。共有したいなら rmmount.conf を使う)

使おう

ファイルシステムを作ってしまえばあとはフロッピー感覚です。

おお、簡単ぢゃん。

ufs形式なので、このメディアは Windows とかに突っ込んでも読めないんですが、 ローカルで使う分にはSamba等で共有してしまえばさほど不便しません。


俺的質問集

・ボリュームラベルをつけるには?
formatコマンドの volname を使います。
	% format /vol/dev/aliases/rmscsi0
	format> volname
	Enter 8-character volume name (remember quotes)[""]:ボリューム名
	format> quit

(fmthard -n volname /vol/dev/aliases/rmscsi0 でも いいのかもしんない)

・挿したままアンマウントしたい
% volrmmount -e rmscsi

・再フォーマットしたい
いちおう format コマンドの format で可能ですが、 やんない方がいいです。(HDDではやらないでしょ) さっぱりしたい時は newfs しましょう。
・では newfs したい

・ufsをチャラにしたいんですが
美しい方法は知らなかったりするんですが、ディスクラベルを ぶち壊せばとりあえず目的は達せられます。
  1. アンマウント (volrmmount -e rmscsi)
  2. ランダムデータを書いて壊す (cp /kernel/genunix /vol/dev/aliases/rmscsi0)
  3. エジェクトする。取り出さないとキャッシュが残ってしまう。 (eject rmscsi)
再度挿してみて何も起こらない(マウントされない)なら大丈夫でしょう。 不安なら vold.log に"missing volume unlabeled" などと出ているか 確認します。

・ライトプロテクトは どおすんですか
ZIPはちょっと高級で、専用ツールを使って論理的にロックします。 ドライブを買うとMacやWin用にはツールがついてきます。 Solarisでは ZIP/JAZ Tool for Solaris 2.x をコンパイルして使いましょう。
ただこれはソースだけで roffなマニュアルがついてないので、 私がマニュアルとMakefileもつけたアーカイブを作りました。 ありがたく使うように。 ziptool.tar.gz

取り出したメディアは -r-------- であろうと 中身は誰でも読めるので、 他人に読まれたくないデータはちゃんとパスワードでロックしましょう。

・容量を使い切りたい
ケチくさいですね…もとい、「あと1MBあれば」てことはあるでしょうね。 newfs(1M)のパラメータをいじってやれば若干増やすことは可能です。 容量いっぱいに でかいファイルを書いてみた例:
newfs /vol/dev/aliases/rmscsi0 (デフォルト)
	-rw-r--r--   1 kabe     bsgroup  89718784 May 11 20:31 zero
newfs -c 128 -i 32768 -m 0 /vol/dev/aliases/rmscsi0 (かなり無茶)
	-rw-r--r--   1 kabe     bsgroup  97673216 May 11 20:48 zero
名前に反しますが、どおやっても 100MB は入りません。 (2406cyl*2head*40sec *512B/B =~ 94MB)
これでも足らない場合は、ufsにせずに直接デバイスにたたき込む 方法もあります。98631680バイトまで入るようです。
	% volrmmount -e rmscsi
	% tar cf - directory | gzip -9 | dd of=/vol/dev/aliases/rmscsi0 bs=40k

・Samba経由でイジェクトできんかな
smb.confに
	postexec = /usr/bin/eject rmscsi
と書けば可能と言えば可能。 クライアント側から net use \\hostname\sharename /delete とするとイジェクトされます。
なお、Windowsはしばらく使われてない共有は接続を解除 するので、この設定をすると「いつの間にかejectされている」 場合があります。

・…zipからブートできんかな(わくわく
できます。これが証拠だ!(説得力なし)
kabe@imzp3188% /usr/ucb/df
Filesystem            kbytes    used   avail capacity  Mounted on
/dev/dsk/c0t5d0s0      86877   79919    6872    93%    /
/proc                      0       0       0     0%    /proc
fd                         0       0       0     0%    /dev/fd
swap                   72904      16   72888     1%    /tmp
ディスクラベルを書き込んでおけば suninstall は認識してくれます。 100MBしかないのでコツがいりますが、 動き出せば結構使えます。意外に遅くない。 (メモリ128MBが効いてるのかも)
ただ、それで何が嬉しいとか いうことがあまりない。せいぜい CDROM よりブートが速いて程度か…
・format->volnameでつけたラベルが /rmscsi/ で使われないんですけど
私もよーわかってないのですが、
vold は、現在のブートセクタがそれっぽく見えている間は ボリュームラベルを変えようとしないようです。 (エジェクトしても駄目。セクタの中身だけを見ているわけではなさそう) voldを再起動すれば新しいラベルになりますが、それでは大げさなので、 この方法だとパーティション情報もなくなってしまうので、 パーティションを保存しつつボリューム名だけ書き換えるには

問題点

快適に使えてはいるのですが、 稀に voldが死んだり、OS全体がクラッシュしたりすることが ありました。 普通に使っているぶんには問題なさそうなんですが、 voldの挙動実験なんかで酷使すると vold が死んでしまう場合があります。

voldが変死すると /volが変な状態になってしまうので、

で復活する(かも)しれません。

伊達に rmscsi はコメントアウトされてるわけではなさそーです。 すぐに管理者を呼べないマシンではちと危険かもしれません。


参考文献


kabe@sra-tohoku.co.jp

なお、本ドキュメントは HTML3 Table Model を使用しているため、NetscapeやMSIEでは正常に表示されない可能性がある
くせに Mosaic-L10Nをも考慮したデザインになっております。