外付け HDD にルートファイルシステムを置く方法から説明します。
まず、Win95 の載った Note PC と pcmcia-cs でサポートされている SCSI カー ド、外付けの HDD ドライブ、それらを接続するための SCSI ケーブル、ター ミネータ等を用意します。Linux のインストールには CD-ROM を使うため、 CD-ROM ドライブもあった方がいいでしょう。手元では以下のような構成で試 しています。
インストールに使う Linux のディストリビューションはトッパンの「Linux 入門」の CD-ROM(Slackware 3.1)を使うことにします。
initrd はディストリビューションに依存する機能ではないので、Red Hat や Debian を使っても同様のことは実現可能だと思いますが、筆者は Slackware 3.1 でしか試していません。
(D:\)install\notepc\tools\loadlin\loadlin.exe
と(D:\)kernels\aha1542.s\zImage
を Windows95 の
領域にコピーします。Linux 用のディレクトリを作ってそこに入れておくのが
いいでしょう。以下ではこれらのファイルは C:\linux
に置いてあ
るものとします。上でダウンロードした pcmciax2.gz も同じディレクトリに
移しておきます。
cd linux
し、loadlin を使って Linux を起動します。この時、
pcmciax.gz を initrd に指定し、ルートファイルシステムは initrd を
展開して作成される ramdisk(/dev/ram0) を指定します。
c:\linux > loadlin zimage initrd=pcmciax2.gz root=/dev/ram0
pcmciax2.gz にはネットワークカードを使って NFS 経由でインストールしたり、 EasyHard、PLIP、 SLIP 経由でもインストールできるようにモジュールを用意 していますので、ヒマと根性のある人は試してみてください(苦笑)。
/dos
のようなディレクトリを
作り、そこに Windows95 のディスク領域をマウントし、gunzip で
pcmciax2.gz を展開します。
# mkdir /dos # mount -t msdos /dev/hda1 /dos # gunzip < /dos/linux/pcmciax2.gz > /dos/linux/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/
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
root=
オプションは指定せずに起動します。initrd の
指定も修正した pcmciax2 にしていることに御注意ください。
c:\linux\> loadlin zimage initrd=pcmciax2
/etc/rc
を実行して pcmcia-cs を使えるよ
うにします。
# /etc/rc
/etc/rc
が /rc/rc.d/rc.pcmcia
を実行すると、
pcmcia-cs が機能するようになり、SCSI カードやそれに接続された外部デバ
イスも認識されるようになります。正しく認識しているか、表示されるメッセー
ジを確認してください。
/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
# ls -l /dev/sdb1 brw-r----- 1 root disk 8, 17 Apr 29 1995 /dev/sda1
/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
echo
"0xaaa"
で書きこむ場合は 16 進表記になっていることに御注意くださ
い。
/proc/sys/kernel-real-root-dev
に設定したルートファイルシステ
ムを新しいルートファイルシステムにしてシステムが起動するはずです。
/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
/var/run/stab
を見ながらカードの
監視を行うため、新しいカードを挿入しても認識できるはずです。PC カード
が正しく認識されるか、カードを抜き挿しして試してみてください。ただし、
外付けの SCSI をルートファイルシステムにしている場合、SCSI カードを抜
くと確実にハングアップしますので御注意ください。