次のページ 前のページ 目次へ

3. 外付け HDD をルートファイルシステムにする

外付け 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 でしか試していません。

  1. まず、Windows 95 を起動して CD-ROM ドライブをシステムに認識させます。 この部分は Linux とは関係ないので、Windows 95 のマニュアルや CD-ROM ド ライブのマニュアルを読んでください。
  2. 「Linux 入門」の CD-ROM に入っている pxmciax.gz の mount は以下の作業に 必要な loopback デバイスのマウントをサポートしていないので、 http://www.st.rim.or.jp/~isle/pcmciax2.gz をダウンロードします。
  3. 「Linux 入門」の 1 枚目の CD-ROM から、 (D:\)install\notepc\tools\loadlin\loadlin.exe(D:\)kernels\aha1542.s\zImage を Windows95 の 領域にコピーします。Linux 用のディレクトリを作ってそこに入れておくのが いいでしょう。以下ではこれらのファイルは C:\linux に置いてあ るものとします。上でダウンロードした pcmciax2.gz も同じディレクトリに 移しておきます。
  4. Win95 をいったん再起動して、"Starting Windows95" のメッセージが出 た時に F8 キーを押し、立ち上げモードの選択画面を出します。6 の "Command Prompt Only" を選び、コマンドプロンプト画面で起動します。 Linux をブートする際、日本語モードでは画面が表示されなくなるので、 "us" コマンドを実行して、忘れずに英語モードに切り替えてお きましょう。
  5. cd linux し、loadlin を使って Linux を起動します。この時、 pcmciax.gz を initrd に指定し、ルートファイルシステムは initrd を 展開して作成される ramdisk(/dev/ram0) を指定します。
        c:\linux > loadlin zimage initrd=pcmciax2.gz root=/dev/ram0
    

  6. pcmciax2.gz には pcmcia-2.8.22 相当の機能が組みこまれているので、サ ポートされている SCSI カードはそのまま認識できるはずです。接続して いる CD-ROM や外付け HDD がきちんと認識されているか確認してください。
    pcmciax2.gz にはネットワークカードを使って NFS 経由でインストールしたり、 EasyHard、PLIP、 SLIP 経由でもインストールできるようにモジュールを用意 していますので、ヒマと根性のある人は試してみてください(苦笑)。
  7. Slackware のインストール作業そのものは「Linux 入門」に詳しく説明してあ るので省略します。外付けの HDD を対象に、CD-ROM からインストールするよ うに指定すれば、その後の設定は「Linux 入門」の記述に沿って進むはずです。 ただし、今回は lilo を使わず loadlin.exe で起動しますので、最後の lilo のインストールの部分は飛ばして、内蔵 HDD に lilo をインストールしない ようにしておきます。
  8. 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 をコマンドプロンプトモードで起動します。
  9. 今回はルートファイルシステムを対話的に設定したいので loadlin.exe を以 下のように root= オプションは指定せずに起動します。initrd の 指定も修正した pcmciax2 にしていることに御注意ください。
        c:\linux\> loadlin zimage initrd=pcmciax2
    

  10. この状態で起動すると、カーネルを展開した後、initrd 上にある linuxrc を 実行し、プロンプトが出て止まります(linuxrc は sh へのシンボリックリン クなので、実際には sh が動いています)。この状態ではまだ pcmcia-cs が動 いていないので、まず /etc/rc を実行して pcmcia-cs を使えるよ うにします。
     # /etc/rc
    

    /etc/rc/rc/rc.d/rc.pcmcia を実行すると、 pcmcia-cs が機能するようになり、SCSI カードやそれに接続された外部デバ イスも認識されるようになります。正しく認識しているか、表示されるメッセー ジを確認してください。
  11. 次にルートファイルシステムを外付けの 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 進表記になっていることに御注意くださ い。
  12. 実際のルートファイルシステムの設定が終われば exit を入力するか、ctrl-D を押して linuxrc(実体は sh)を終了します。すると、 /proc/sys/kernel-real-root-dev に設定したルートファイルシステ ムを新しいルートファイルシステムにしてシステムが起動するはずです。
  13. Slackwareに標準の起動用スクリプト /etc/rc.d/rc.S は通常の desktop 環境を前提にしているので nfsroot で使用するといろいろと問題が 生じます。具体的にどうすればいいかは現在も試行錯誤中ですが、nfsroot を fsck するのはヘンなので、fsck してる回りは全部コメントアウトして、 必要なコマンドを動かしているところだけにしていいように思います。
  14. 新しいルートファイルシステムで起動すると、古いルートファイルシステムは /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" 等のエラーメッセージがいくつか出ますが、特に気にする必要 はありません(と思う、、)。
  15. 再起動した cardmgr は通常の /var/run/stab を見ながらカードの 監視を行うため、新しいカードを挿入しても認識できるはずです。PC カード が正しく認識されるか、カードを抜き挿しして試してみてください。ただし、 外付けの SCSI をルートファイルシステムにしている場合、SCSI カードを抜 くと確実にハングアップしますので御注意ください。


次のページ 前のページ 目次へ