LinuxでNFS-root
今回はNFS-rootの話です。
つい先日、うちの EPIA M (C3 600Mhz, DDR 266 512MB)をPXEとNFS-rootでブートに成功したので、メモもかねて書いておきたいと思います。
・NFS-rootとは何か?
文字通りです。NFSをルートファイルシステムにします。
通常はOSをHDDなどにインストールして、起動時にはそこからロードしますが、NFS-rootはNFSサーバー上の一角にインストールし、起動時にはそこからOSのデータをロードします。
こんなことできて何がうれしいかと言うと、
・複数のPCにOSをインストールしなくても同じOSを立ち上げて、再起動すればすべて元通りにできる。一時的にdistccを実行したいときなどに利用できます。
・パーツが余ったので自宅サーバーを立てようと思うが、HDDが余っていない。いまある内部用のNFSサーバーから数GBでいいから使いたい。
・完全ディスクレスマシンを構築したい。
など、考えればいくつか浮かんできます。
私の場合はHDDを搭載すると、せっかくEPIAのファンレスモデルを使っているのにほぼ無音に出来ないのと発熱も上がるので、NFS-rootを導入してみました。
ちなみに、EPIAで何をするかと言うと・・・今のところ起動しているだけです。
USBのNICでも増設してルーター代わりにでも使用しようかと検討中です。
ちなみに、NFS-rootはあくまでもルートにするだけです。
別途ブートローダーを用意しなければいけません。
そのためにはIDEにHDDを・・・本末転倒なので、どうにかして用意しなければいけません。
その一つに、PXEとtftpを使用する方法があります。
・PXEとは
PXEはIntel社が策定した規格で、細かいことは以下を参照してください。
参考まで: http://ja.wikipedia.org/wiki/Preboot_Execution_Environment
要は、DHCPなどで自分のIPとtftpサーバーのIPを取得し、tftpでブートに必要なものをロードするものです。
割と最近のハードはデフォルトで対応しています。
今回はこのPXEとtftpとNFSを使って完全ディスクレスを構築したいと思います。
※以下の説明はDebianなので他のOSを使う人は適時読み替えてください。
※DHCPサーバーも構築するので、ブロードバンドルーターのDHCPサーバー機能や他のDHCPサーバーを切ってください。自宅でなければ人に迷惑をかけないように気をつけてください。
※以下の項目を試す場合は「自己責任」でおねがいします。
構成
・サーバー name.hoge.local 192.168.0.2
・クライアント epia.hoge.local 192.168.0.100
サーバーでDHCP,DNS,TFTP,NFSをすべて動かします。
・NFS-root対応カーネル作成
以下、メニューでこれらを有効にする
カーネル設定は以上。
NFS-rootのサポートとExt3のサポートを有効に、あと使用するNICのドライバも有効にします。
などで作成します。
・サーバー上にルートを構築
とすればdebootstrapが全部やってくれます。
終了したら、
chrootしてpasswdやネットワークの設定をしてください。ネットワークはもちろんDHCPでOKです。
あとはNFS-rootを有効にしたカーネルを boot/ にコピーします。(今回のようにパッケージになっていれば chroot環境で dpkg -i linux-image-2.6.22でも可)
・syslinuxのインストール
ここではブートローダーにpxelinuxを使用するので、
でsyslinuxをインストールして、
とします。/disklessがtftpのルートなので、後述のdhcpd.confではこのファイルを指定します。
中身はこんな感じです。
・NFSサーバーを用意
(/disklessを公開して、サブディレクトリをそれぞれのサーバーのルートにします)
で、/etc/exportsに以下を追加
※ no_root_squash を付けないとNFSサーバーから見たらnobodyなどとしてマウントされますので注意してください。
パーミッションの関係上付けないとダメです。
以上でOKです。
・tftpサーバーの用意
xinetdで起動するので、 /etc/xinetd.conf か /etc/xinetd.d/以下の設定 を確認(なければ作ってください)
こんな感じになっていればOKです。
しておきます。
・dhcpサーバーの構築
/etc/dhcpd.conf を編集
以上で準備は整いました。
あとはクライアントの電源を入れ、Delキーを押してBIOSの設定画面で、PXE bootを有効にし、優先度を最高にすればOKです。
再起動すると、無事に立ち上がる・・・はずです。多分。
以上、NFS-rootでディスクレスにする方法です。
このepia搭載PCですが、電源ファンが異音を発するので取り外したため、ケースファンのみで静かに動いています。
あとは夏に熱暴走しないことを祈るばかりです。
おまけ
PXE以外にも、USBメモリにブートローダーを入れておくという手もあります。
さらにOS自体もつっこめば、ディスクレスではないですがSSD買うよりかなり安価に構築できます。
この方法はそのうちに書くかもしれません。今のところ失敗続きなのでいつになるかわかりませんが・・・。
つい先日、うちの EPIA M (C3 600Mhz, DDR 266 512MB)をPXEとNFS-rootでブートに成功したので、メモもかねて書いておきたいと思います。
・NFS-rootとは何か?
文字通りです。NFSをルートファイルシステムにします。
通常はOSをHDDなどにインストールして、起動時にはそこからロードしますが、NFS-rootはNFSサーバー上の一角にインストールし、起動時にはそこからOSのデータをロードします。
こんなことできて何がうれしいかと言うと、
・複数のPCにOSをインストールしなくても同じOSを立ち上げて、再起動すればすべて元通りにできる。一時的にdistccを実行したいときなどに利用できます。
・パーツが余ったので自宅サーバーを立てようと思うが、HDDが余っていない。いまある内部用のNFSサーバーから数GBでいいから使いたい。
・完全ディスクレスマシンを構築したい。
など、考えればいくつか浮かんできます。
私の場合はHDDを搭載すると、せっかくEPIAのファンレスモデルを使っているのにほぼ無音に出来ないのと発熱も上がるので、NFS-rootを導入してみました。
ちなみに、EPIAで何をするかと言うと・・・今のところ起動しているだけです。
USBのNICでも増設してルーター代わりにでも使用しようかと検討中です。
ちなみに、NFS-rootはあくまでもルートにするだけです。
別途ブートローダーを用意しなければいけません。
そのためにはIDEにHDDを・・・本末転倒なので、どうにかして用意しなければいけません。
その一つに、PXEとtftpを使用する方法があります。
・PXEとは
PXEはIntel社が策定した規格で、細かいことは以下を参照してください。
参考まで: http://ja.wikipedia.org/wiki/Preboot_Execution_Environment
要は、DHCPなどで自分のIPとtftpサーバーのIPを取得し、tftpでブートに必要なものをロードするものです。
割と最近のハードはデフォルトで対応しています。
今回はこのPXEとtftpとNFSを使って完全ディスクレスを構築したいと思います。
※以下の説明はDebianなので他のOSを使う人は適時読み替えてください。
※DHCPサーバーも構築するので、ブロードバンドルーターのDHCPサーバー機能や他のDHCPサーバーを切ってください。自宅でなければ人に迷惑をかけないように気をつけてください。
※以下の項目を試す場合は「自己責任」でおねがいします。
構成
・サーバー name.hoge.local 192.168.0.2
・クライアント epia.hoge.local 192.168.0.100
サーバーでDHCP,DNS,TFTP,NFSをすべて動かします。
・NFS-root対応カーネル作成
$ sudo apt-get install linux-source-2.6.22 $ cd /usr/src $ sudo tar jxf linux-source-2.6.22.tar.bz2 $ cd linux-source-2.6.22 $ sudo make menuconfig
以下、メニューでこれらを有効にする
- Networking
---> Networking options ---> [*] IP: kernel level autoconfiguration [*] IP: DHCP support [*] IP: BOOTP support [*] IP: RARP support - Device
Drivers ---> Network device support ---> Ethernet (10 or 100Mbit) ---> <*> VIA Rhine support - File
systems ---> <*> Ext3 journalling file system support [*] Ext3 extended attributes [*] Ext3 POSIX Access Control Lists [*] Ext3 Security Labels Network File Systems ---> <*> NFS file system support [*] Provide NFSv3 client support [*] Provide client support for the NFSv3 ACL protocol e [*] Provide NFSv4 client support (EXPERIMENTAL) [*] Allow direct I/O on NFS files [*] Root file system on NFS
カーネル設定は以上。
NFS-rootのサポートとExt3のサポートを有効に、あと使用するNICのドライバも有効にします。
$ sudo make-kpkg --revision=1 kernel_image
などで作成します。
・サーバー上にルートを構築
$ sudo mkdir /diskless $ sudo mkdir /diskless/epia $ cd /diskless/epia $ sudo debootstrap etch ./ --arch i386
とすればdebootstrapが全部やってくれます。
終了したら、
$ sudo chroot ./ /bin/bash
chrootしてpasswdやネットワークの設定をしてください。ネットワークはもちろんDHCPでOKです。
あとはNFS-rootを有効にしたカーネルを boot/ にコピーします。(今回のようにパッケージになっていれば chroot環境で dpkg -i linux-image-2.6.22でも可)
・syslinuxのインストール
ここではブートローダーにpxelinuxを使用するので、
$ sudo apt-get install syslinux
でsyslinuxをインストールして、
$ sudo cp /usr/lib/syslinux/pxelinux.0 /diskless/
とします。/disklessがtftpのルートなので、後述のdhcpd.confではこのファイルを指定します。
$ sudo mkdir /diskless/pxelinux.cfg $ cd /diskless/pxelinux.cfg $ sudo vi default
- DEFAULT
linux - LABEL
linux KERNEL epia/boot/vmlinuz-2.6.22 APPEND root=/dev/nfs nfsroot=192.168.0.2:/diskless/epia ip=dhcp IPAPPEND 0
中身はこんな感じです。
・NFSサーバーを用意
(/disklessを公開して、サブディレクトリをそれぞれのサーバーのルートにします)
$ sudo apt-get install nfs-kernel-server
で、/etc/exportsに以下を追加
/diskless 192.168.0.0/255.255.255.0(rw,no_subtree_check,no_root_squash)
※ no_root_squash を付けないとNFSサーバーから見たらnobodyなどとしてマウントされますので注意してください。
パーミッションの関係上付けないとダメです。
$ sudo /etc/init.d/nfs-kernel-server restart
以上でOKです。
・tftpサーバーの用意
$ sudo apt-get install tftpd-hpa
xinetdで起動するので、 /etc/xinetd.conf か /etc/xinetd.d/以下の設定 を確認(なければ作ってください)
- service
tftp - {
socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /diskless disable = no per_source = 11 cps = 100 2 flags = IPv4 - }
こんな感じになっていればOKです。
$ sudo /etc/init.x/xinetd restart
しておきます。
・dhcpサーバーの構築
$ sudo apt-get install dhcp
/etc/dhcpd.conf を編集
- subnet
192.168.0.0 netmask 255.255.255.0 { server-identifier name.hoge.local; option routers 192.168.0.1; option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option domain-name hoge.local; option domain-name-servers name.hoge.local; default-lease-time 600; max-lease-time 7200; host epia { hardware ethernet FF:FF:FF:FF:FF:FF; fixed-address 192.168.0.100; filename "pxelinux.0"; option host-name "epia"; option root-path "/diskless/epia"; next-server 192.168.0.2; }
$ sudo /etc/init.d/dhcp restart
以上で準備は整いました。
あとはクライアントの電源を入れ、Delキーを押してBIOSの設定画面で、PXE bootを有効にし、優先度を最高にすればOKです。
再起動すると、無事に立ち上がる・・・はずです。多分。
以上、NFS-rootでディスクレスにする方法です。
このepia搭載PCですが、電源ファンが異音を発するので取り外したため、ケースファンのみで静かに動いています。
あとは夏に熱暴走しないことを祈るばかりです。
おまけ
PXE以外にも、USBメモリにブートローダーを入れておくという手もあります。
さらにOS自体もつっこめば、ディスクレスではないですがSSD買うよりかなり安価に構築できます。
この方法はそのうちに書くかもしれません。今のところ失敗続きなのでいつになるかわかりませんが・・・。
トラックバックURI
最近の記事
JavaScriptのクロスドメイン問題対応方法 [2012年05月17日 : 笹亀弘]
JavaScriptのコーディング規約を気軽にチェック [2012年05月14日 : 中川善樹]
誕生日プレゼント [2012年05月10日 : 阿部恵]
イラストでわかる!git入門の入門 [2012年05月09日 : 志田仁美]
【CSS3】HSL色空間による色指定のすゝめ [2012年05月09日 : 橋本章史]
インスピレーションをかきたてるポスターデザインのまとめ記事のまとめ [2012年04月25日 : 鴨田健次]
エンジニアの英会話 〜とっさの一言〜 [2012年04月19日 : 斉藤勝也]
イコライザーをFireworksで描いてみました [2012年04月16日 : 和田記光]
SFNewTech Japan Night のファイナリストに選出されました!(他、もろもろの出展の御案内) [2012年04月06日 : 小林有佳]
使えるとちょっと便利なSSHのTIPS [2012年04月04日 : 牧野克俊]













コメントフォーム