次のページ
前のページ
目次へ
外付け HDD にルートファイルシステムを置く方法から説明します。
まず、Win95 の載った Note PC と pcmcia-cs でサポートされている SCSI カー
ド、外付けの HDD ドライブ、それらを接続するための SCSI ケーブル、ター
ミネータ等を用意します。Linux のインストールには CD-ROM を使うため、
CD-ROM ドライブもあった方がいいでしょう。手元では以下のような構成で試
しています。
- Note PC : Toshiba 610CT
- CD-ROM ドライブ : Panasonic KXL-D740 4X CD-ROM
- SCSI カード : 上記に付属のカード(Qlogic OEM)
- LAN カード : Accton EN2212
- 外付け SCSI HDD : iomega jaz 1GB
インストールに使う Linux のディストリビューションはトッパンの「Linux
入門」の CD-ROM(Slackware 3.1)を使うことにします。
initrd はディストリビューションに依存する機能ではないので、Red Hat や
Debian を使っても同様のことは実現可能だと思いますが、筆者は Slackware
3.1 でしか試していません。
-
まず、Windows 95 を起動して CD-ROM ドライブをシステムに認識させます。
この部分は Linux とは関係ないので、Windows 95 のマニュアルや CD-ROM ド
ライブのマニュアルを読んでください。
- 「Linux 入門」の CD-ROM に入っている pxmciax.gz の mount は以下の作業に
必要な loopback デバイスのマウントをサポートしていないので、
http://www.st.rim.or.jp/~isle/pcmciax2.gz をダウンロードします。
- 「Linux 入門」の 1 枚目の CD-ROM から、
(D:\)install\notepc\tools\loadlin\loadlin.exe
と(D:\)kernels\aha1542.s\zImage を Windows95 の
領域にコピーします。Linux 用のディレクトリを作ってそこに入れておくのが
いいでしょう。以下ではこれらのファイルは C:\linux に置いてあ
るものとします。上でダウンロードした pcmciax2.gz も同じディレクトリに
移しておきます。
- Win95 をいったん再起動して、"Starting Windows95" のメッセージが出
た時に F8 キーを押し、立ち上げモードの選択画面を出します。6 の
"Command Prompt Only" を選び、コマンドプロンプト画面で起動します。
Linux をブートする際、日本語モードでは画面が表示されなくなるので、
"us" コマンドを実行して、忘れずに英語モードに切り替えてお
きましょう。
cd linux し、loadlin を使って Linux を起動します。この時、
pcmciax.gz を initrd に指定し、ルートファイルシステムは initrd を
展開して作成される ramdisk(/dev/ram0) を指定します。
c:\linux > loadlin zimage initrd=pcmciax2.gz root=/dev/ram0
- pcmciax2.gz には pcmcia-2.8.22 相当の機能が組みこまれているので、サ
ポートされている SCSI カードはそのまま認識できるはずです。接続して
いる CD-ROM や外付け HDD がきちんと認識されているか確認してください。
pcmciax2.gz にはネットワークカードを使って NFS 経由でインストールしたり、
EasyHard、PLIP、 SLIP 経由でもインストールできるようにモジュールを用意
していますので、ヒマと根性のある人は試してみてください(苦笑)。
- Slackware のインストール作業そのものは「Linux 入門」に詳しく説明してあ
るので省略します。外付けの HDD を対象に、CD-ROM からインストールするよ
うに指定すれば、その後の設定は「Linux 入門」の記述に沿って進むはずです。
ただし、今回は lilo を使わず loadlin.exe で起動しますので、最後の lilo
のインストールの部分は飛ばして、内蔵 HDD に lilo をインストールしない
ようにしておきます。
- Slackware のインストールが終了したら、再起動する前に pcmciax2.gz に少し
細工をして、initrd をマウントした時点で一度プロンプトを出すようにして
おきます。
pcmciax2.gz を修正するには、このファイルを loopback ファイルシステムを
使ってマウントしなければなりません。initrd には圧縮ファイルを自動的に
展開する機能がありますが、loopback ファイルシステムには自動展開機能が
ないので、一度 pcmciax2.gz を展開する必要があります。
pcmciax2.gz を展開するために、まず
/dos のようなディレクトリを
作り、そこに Windows95 のディスク領域をマウントし、gunzip で
pcmciax2.gz を展開します。
# mkdir /dos
# mount -t msdos /dev/hda1 /dos
# gunzip < /dos/linux/pcmciax2.gz > /dos/linux/pcmciax2
pcmciax2 に細工するために、pcmciax2 をマウントするためのディレクトリ
(/workdir)を作り、mount に -o loop オプションを指定して pcmciax2 ファ
イルをファイルシステムとしてマウントします。
# mkdir /workdir
# /mnt/bin/mount /dos/linux/pcmciax2 /workdir -o loop
# ls /workdir
bin/ cdrom@ etc/ lib/ proc/ sbin/ usr/
boot/ dev/ floppy/ mnt/ root/ tmp/ var/
initrd では、initrd 上に linuxrc というファイルがあればそれをまず起動
することになっています。ですから linuxrc を bin/sh にシンボリッ
クリックしておけば、initrd を起動した状態で sh を使って対話的に各種の
設定を行うことが可能になります。
# ln -s bin/sh linuxrc
# ls -l /workdir/linuxrc
lrwxrwxrwx 1 root root 6 Jan 4 14:39 /workdir/linuxrc -> bin/sh*
もう一つ、実際のルートファイルシステムになるパーティションに
/initrd というディレクトリを作っておきます。initrd 経由で起動
した時、実際のルートファイルシステムになるパーティションに /initrd と
いうディレクトリがあると、initrd で使った暫定版のルートファイルシステ
ムはこのディレクトリに移して保存されます。
# mkdir /workdir/initrd
これでインストール作業が終了しました。システムを再起動して、再度 Win95
をコマンドプロンプトモードで起動します。
- 今回はルートファイルシステムを対話的に設定したいので loadlin.exe を以
下のように
root= オプションは指定せずに起動します。initrd の
指定も修正した pcmciax2 にしていることに御注意ください。
c:\linux\> loadlin zimage initrd=pcmciax2
- この状態で起動すると、カーネルを展開した後、initrd 上にある linuxrc を
実行し、プロンプトが出て止まります(linuxrc は sh へのシンボリックリン
クなので、実際には sh が動いています)。この状態ではまだ pcmcia-cs が動
いていないので、まず
/etc/rc を実行して pcmcia-cs を使えるよ
うにします。
# /etc/rc
/etc/rc が /rc/rc.d/rc.pcmcia を実行すると、
pcmcia-cs が機能するようになり、SCSI カードやそれに接続された外部デバ
イスも認識されるようになります。正しく認識しているか、表示されるメッセー
ジを確認してください。
- 次にルートファイルシステムを外付けの SCSI ディスクに変更します。
initrd を使っている場合、proc ファイルシステムの
/proc/sys/kernel/real-root-dev というファイルにルートファイルシス
テムのデバイス番号を書きこんでやると、initrd を終了した際、そのデ
バイスをルートファイルシステムとしてマウントします。
ルートファイルシステムのデバイス番号は /dev/xxx ファイルを
ls -l すれば表示されます。例えば、外付けの 1 つめの SCSI HDD
のパーティション 1 をルートファイルシステムにしたい場合、
# ls -l /dev/sda1
brw-r----- 1 root disk 8, 1 Apr 29 1995 /dev/sda1
なので、/dev/sda1 のデバイス番号は major が 8、minor が 1 で
す。この場合、"0x801" を /proc/sys/kernel/real-root-dev に書
きこみます。
# echo "0x801" > /proc/sys/kernel/real-root-dev
同様に外付けの 2 つめの SCSI HDD 全体をルートファイルシステムにする場合、
# ls -l /dev/sdb1
brw-r----- 1 root disk 8, 17 Apr 29 1995 /dev/sda1
なので、"0x811" を /proc/sys/kernel/real-root-dev に書きこみ
ます。2 台目の IDE ドライブの 2 つ目のパーティションならば、
# ls -l /dev/hdb2
brw-r----- 1 root disk 3, 66 Apr 28 1995 /dev/hdb2
なので "0x342" を書きこみます。
ls -l /dev/xxx で表示されるデバイス番号は 10 進表記ですが、echo
"0xaaa" で書きこむ場合は 16 進表記になっていることに御注意くださ
い。
- 実際のルートファイルシステムの設定が終われば exit を入力するか、ctrl-D
を押して linuxrc(実体は sh)を終了します。すると、
/proc/sys/kernel-real-root-dev に設定したルートファイルシステ
ムを新しいルートファイルシステムにしてシステムが起動するはずです。
- Slackwareに標準の起動用スクリプト
/etc/rc.d/rc.S は通常の
desktop 環境を前提にしているので nfsroot で使用するといろいろと問題が
生じます。具体的にどうすればいいかは現在も試行錯誤中ですが、nfsroot を
fsck するのはヘンなので、fsck してる回りは全部コメントアウトして、
必要なコマンドを動かしているところだけにしていいように思います。
- 新しいルートファイルシステムで起動すると、古いルートファイルシステムは
/initrd 以下に移され read only でマウントされています。initrd
段階で動いていた各種のプロセスからはこのディレクトリはルートファイルシ
ステムのままに見えるので、例えば cardmgr の見る /var/run/stab
は /initrd/var/run/stab になります。
pcmcia-cs では /var/run/stab に現在挿入されているカードの状態
を書きこんで監視していますが、/var/run/stab が
/initrd 以下の read only ファイルシステム
(/initrd/var/run/stab )に移動すると、カードを挿し替えた時の情
報の更新が不可能になります。そのため、一旦 cardmgr を終了させてから再
起動し、cardmgr が現在の /var/run/stab を参照するようにします。
# killall cardmgr
# /sbin/cardmgr
このためには、initrd に組みこんだ pcmcia-cs とルートファイルシステ
ムにある pcmcia-cs のバージョンや設定が同じになっている必要があります。
pcmcia-cs が initrd 段階で組みこんだ pcmcia_core.o や i82365.o、ds.o
の 3 つのモジュールは外付け SCSI HDD をルートファイルシステムにしてい
る限り使用中なので取り除くことはできません。そのため再起動の際には
"device busy" 等のエラーメッセージがいくつか出ますが、特に気にする必要
はありません(と思う、、)。
- 再起動した cardmgr は通常の
/var/run/stab を見ながらカードの
監視を行うため、新しいカードを挿入しても認識できるはずです。PC カード
が正しく認識されるか、カードを抜き挿しして試してみてください。ただし、
外付けの SCSI をルートファイルシステムにしている場合、SCSI カードを抜
くと確実にハングアップしますので御注意ください。
次のページ
前のページ
目次へ
|