あなたの天然記念物
ホーム更新雑談Perl鉄ゲタランドナーコースガイド自転車Linuxリンク経歴連絡先
ディスクなしパソコンの構築 (2003.02.09)

パソコンが8台あると、ハードディスクの故障が心配です。
そこで、ハードディスクがないパソコンでLinuxを使えるようにしました。

もっとスマートに実現されている方もいらっしゃると思うので、
Googleなどで検索する際は、次のキーワードをお試しください。
このページよりも、k12ltspのページを見たほうがいいと思います。
何せ、私、Linuxユーザじゃないですから。

パーツ一覧
項番項目
1マザーボード
2CPU
3メモリ
4ケース

ポイントはマザーボードにあって、LAN内蔵、しかもLANから起動できる物です。
私が使ったのは、BIOSTAR M7VIGです。
そうすると、フロッピーもいりません。
これにはビックリしました。
Linuxってスゲーナスゴイデス。(From ヘンダーランドの大冒険)

今回の説明では、一風変わったフォーマットを用います。
パソコンの電源ON〜loginプロンプト表示までのステップと
各ステップに到達するための準備の方法を交互に並べます。
そうすることで、途中で失敗した際に、どの方面を調査すると良いか
見当をつけやすいと思ったからです。


マザーボードに内蔵されたBootROMが起動される

BIOSの設定を変更します。
起動順序の設定の最初にLANを指定、2番目、3番目を無効にします。
まだハードディスクをつけている場合は、
IDEコントローラのプライマリ、セカンダリとも無効にします。


LAN AgentやPXEが起動される

これはBootROMの中にあるプログラムです。
特に準備はありません。
この時表示されるMACアドレスをメモしてください。


クライアント(ディスクなし)からサーバ(ディスクあり)へ問合せ

クライアントは自分のIPアドレスさえ知らないので、
LANに接続されているすべてのパソコンに
「私は誰?ここはどこ?」みたいなメッセージを送信します。
サーバは、この手のメッセージを待っていて即答する訳です。

即答するソフトはdhcpdです。
設定ファイルはこんな感じ。
-----/etc/dhcpd.conf------
shared-network WORKSTATIONS {
    subnet 192.168.123.0 netmask 255.255.255.0 {
        range 192.168.123.100 192.168.123.110;
    }
}

host diskless {
    hardware ethernet    12:34:56:78:90:ab;
    fixed-address        diskless;
    option subnet-mask   255.255.255.0;
    option host-name     "diskless";
    filename             "/diskless/pxelinux.0";
    server-name          "diskserve";
}
---------------------
ホスト名、IPアドレスは変更しています。
shared-networkのブロックはIPアドレスの動的割り当てです。
当初、このブロックがなかった際にエラーが出たので、これで黙らせました。
hostブロックがポイントです。
disklessはディスクなしのホスト名で、/etc/hostsに入れてあります。
hardware ethernetはPXEが起動された際に表示されたMACアドレスです。
diskserveはサーバのホスト名で、/etc/hostsに入れてあります。


pxelinuxが転送される

転送にはtftpdを使います。
サーバにフォルダ/tftpboot/disklessを用意します。
その中にsyslinuxのアーカイブに入っているpxelinux.0を入れておきます。


pxelinuxがカーネルのファイル名、カーネルに渡すパラメタを取得

サーバにフォルダ/tftpboot/diskless/pxelinux.cfgを用意します。
末尾が.cfgだけどフォルダです。
そのフォルダの中に設定ファイルを置きます。
ファイル名はIPアドレスを元に決めます。
disklessのIPアドレスが192.168.123.45として
→16進数→C0.A8.7B.2D→結合→C0A87B2D
-----/tftpboot/diskless/pxelinux.cfg/C0A87B2D--------------
default diskless

prompt 0

label diskless
kernel bzImage
append nfsroot=192.168.123.67:/tftpboot/diskless/root nfsaddrs=192.168.123.45:192.168.123.67:192.168.123.89:255.255.255.0
---------------------------
appendが最後の行です。長いですが改行なしで一気に書きます。
nfsrootの192.168.123.67はサーバのIPアドレスです。
nfsaddrsの192.168.123.89はゲートウエイのIPアドレスです。


カーネルが転送される

カーネルはbzImageです。
ディスクなしのために設定を変更してコンパイルする必要があるため、
もし同名のファイルがあっても動作しないと思います。
kernel-source-2.4.18-3をインストールしてください。
/usr/src/linux-2.4に移動後、make configで設定を変更します。
CONFIG_IP_PNP、CONFIG_ROOT_NFS、DHCP、BOOTPなど、「y」で、
あとLANのドライバも「y」でカーネル内に入れておきます。
設定後の結果は、「.config」に残るので確認してください。
make dep、make clean、make bzImageで作成されます。
/usr/src/linux-2.4/arch/i386/boot/bzImageを
/tftpboot/disklessに入れます。


カーネルが起動される

カーネルがファイルのトップ(ルート)とするフォルダを用意します。
/tftpboot/diskless/root
空っぽではカーネルが起動しても何もできないので、
サーバの/以下のフォルダをそっくりコピーしました。(手抜き)
ファイルアクセスはnfsを使います。
-----/etc/exports-----
/tftpboot/diskless/root diskless(rw,no_root_squash)
----------------------


最後にloginプロンプトが表示される

本当は、サーバのファイルをそっくりコピーすると、
まともに起動できません。
すべてのファイルはサーバにあるので、
画面表示を見ながら、失敗している所を修正していきます。

(続きは、またいずれ)