Linux&FreeBSD ハードウェア設定 |
YAMAMORI Takenori ●yamamori |
●Vine 1.1の場合
さて,それでは今,新たにSCSIカードを追加したとして, このカードに対応するドライバは何でしょうか? …わかりません…というか,最初からSCSIカードを挿した状態で Vineなどをインストールすると,たいていはインストーラが自動的に ドライバを捜し出して,適切な設定を行なってくれているため, あとから追加した場合には困ってしまったりするのです.
それならば,面倒なのでOSごと再インストールしてしまえ…と, ついなりがちです. (もっとも,redhat系のインストールは10分〜20分くらいで 出来てしまい,また,インストール過程の理解にもなるため, 必ずしも悪い方法とは思いませんが)
○Vine のインストーラを使って認識させる
追加したSCSIカードに対応するドライバが何かわからない場合, ちょっと緊張する方法ですが,以下のようにして試してみるという方法があります.
いったんマシンをシャットダウンして
Vine 1.1のインストーラを起動し,画面を
「インストール」→「カスタム」
と選んで進めて下さい.
するとこの次の,Disk Druidの画面に行く前に,
SCSIカードの自動検出が行なわれるのです.
ここではこれ以上インストーラを進めないように注意して,
左[Alt]+[F2]でシェルのプロンプトに切替え,
そこでlsmodコマンドを実行して以下のような表示を確認して下さい.
ドライバがモジュールとしてロードされているのがわかります.
(なお,この後,インストーラ本体の画面を進めない限り,
すでにインストールされているシステムに影響はありません)
bash# lsmod Module: #pages: Used by: aic7xxx 23 0 ncr53c8xx 12 0 isofs 5 1 |
上の例は,AHA-2940Uと,53c875の載ったカードの,計2枚のSCSIカードを
挿したマシンにおいて試してみた結果で,ここではドライバとして,
aic7xxxとncr53c8xxが使用されていることがわかります.
(isofsはCD-ROMのファイルシステムのドライバですのでここでは関係ありません)
○モジュールを手動でロードしてみる
ドライバ名がわかったので,OSをブートし直し, これらのモジュールを手動でロードしてみましょう. その結果は以下のようになりました.
# /sbin/modprobe aic7xxx scsi0 : Adaptec AHA274x/284x/294x (EISA/VLB/PCI-Fast SCSI) 5.1.7/3.2.4 <Adaptec AHA-294X Ultra SCSI host adapter> scsi : 1 host. |
# /sbin/modprobe ncr53c8xx ncr53c875-0: resetting, command processing suspended for 2 seconds ncr53c875-0: enabling clock multiplier ncr53c875-0: Downloading SCSI SCRIPTS. scsi1 : ncr53c8xx - revision 3.1e scsi : 2 hosts. ncr53c875-0: command processing resumed |
このように,手動でモジュールをロードすれば,その後すぐSCSIデバイスを 使うことができます.ここで,すでにSCSIのハードディスクやCD-ROMが つながっている場合は,以下のように生データを読んでみることもできます. いきなりマウントするのではなく,まずこのようにして確認するといいと思います.
# od -c /dev/sda | head ← SCSI ハードディスクの場合 # od -c /dev/scd0 | head ← SCSI CD-ROMの場合 |
これらのモジュールを,ブート時(rootファイルシステムのマウント前)に ロードするために,以下の設定を行ないます.
# vi /etc/conf.modules (以下の2行を追加) alias scsi_hostadapter aic7xxx alias scsi_hostadapter1 ncr53c8xx |
OSのインストール時に,IDEしか存在していなかった場合は, initrd(初期RAMディスク)が作られていないと思いますが, SCSIを使う場合は,以下のようにmkinitrdコマンドを使って, SCSIモジュールの入ったinitrdを作成します.
# /sbin/mkinitrd -v -f /boot/initrd-2.0.36-3vl3.img 2.0.36-3vl3 Using modules: scsi/aic7xxx.o scsi/ncr53c8xx.o Using loopback device /dev/loop0 /bin/ash.static -> /tmp/initrd.598/bin/sh /sbin/insmod.static -> /tmp/initrd.598/bin/insmod /lib/modules/2.0.36-3vl3/scsi/aic7xxx.o -> /tmp/initrd.598/lib/aic7xxx.o /lib/modules/2.0.36-3vl3/scsi/ncr53c8xx.o -> /tmp/initrd.598/lib/ncr53c8xx.o Loading module aic7xxx with options Loading module ncr53c8xx with options |
次にこのinitrdをlilo.confに登録します.
# vi /etc/lilo.conf …略… image=/boot/vmlinuz-2.0.36-3vl3 label=linux root=/dev/hda2 initrd=/boot/initrd-2.0.36-3vl3.img ← この1行を追加 read-only …略… |
最後に忘れずにliloを実行します.
# /sbin/lilo
なお,kernel 2.2.12でも試してみましたが,こちらでは, /etc/conf.modules に必要なモジュールを記述した状態で /dev/sda や /dev/scd0 などのデバイスをアクセスしようとすると, SCSIモジュールが自動的にロードされるのを確認できました.
もし,SCSIハードディスクから直接ブートする必要がない (rootファイルシステムとしては使わない)とか, あるいはCD-ROM(CD-R),MOなどのリムーバブルSCSI機器のみを使う場合は, この状態のままでも使えると思います.
SCSIハードディスクをrootファイルシステムにする場合は, カーネルが / をマウントする時点で, すでにSCSIドライバがカーネルにロードされていなければならないため, やはりinitrdを作成するか, あるいはドライバをカーネルに静的に組み込んでおく必要があります.
なお筆者は,せっかくモジュールが使えるなら, できる限りモジュールにすることを好みますので, SCSIドライバについても,カーネルの再構築の際には, 主なものはすべてモジュールとして作成しておき, SCSIカードの追加,交換時には/etc/conf.modulesの 記述の変更,initrdの再作成等で済むようにしています.
・関連コラム:■ initrd の中身を見てみよう
●FreeBSD 3.2の場合
FreeBSDの場合,GENERICカーネルに主要なSCSIドライバがすでに 組み込まれているため,カードを挿してブートするだけで 認識されてOKだと思います. 実際に試してみたところ,ブート時のメッセージ(あとで dmesgコマンドを使っても見られます)に以下のような表示が出ました.
ahc0: <Adaptec 2940 Ultra SCSI adapter> rev 0x00 int a irq 11 on pci0.9.0 ahc0: aic7880 Single Channel A, SCSI Id=7, 16/255 SCBs |
ncr0: <ncr 53c875 fast20 wide scsi> rev 0x03 int a irq 10 on pci0.10.0 |
なお,GENERICカーネルではなく,すでに現状のマシンに合わせて 不要ドライバの削除を済ませたカーネルを作ってチューニングされている方は, ここでは新しいSCSIカードを認識できなかったかも知れません. しかし,そのような方の場合は,すでに何をやるべきかご存知のはずなので, ここではあえて説明は不要でしょう.
To「Linux&FreeBSD ハードウェア設定」index