Ubuntuでネットブート
最終更新:2008年1月24日
はじめに
本稿では,「使用するOSや利用環境を特定する」という意味において非常に限られた環境向けに, PXE (「ピー・エックス・イー」または「ピクシー」と呼ぶらしい) を利用してLinuxをネットブート運用するための設定について説明する. 最初に書いておくと,一部こちらの実際の環境に合わせて変更しているものの, 本稿のかなりの部分は「Diskless Linux by PXELinux or GRUB」を 参考にしている. 本稿よりも詳しい部分も多いので,こちらより先に目を通したほうが良いと思われる.
なお,本稿では, ネットブート(netboot または network boot)システムとディスクレス(diskless)システムという言葉を 混用している場合があるが, 概ね同じものを指していると考えていただいて構わない.
「ネットブート」というのは,起動イメージをローカルのハードディスク(ローカル・ディスク)上に持たず, ネットワーク経由でダウンロードして起動する起動形式を言う. 一番最初に実行される小さい起動プログラム(bootstrap loader)のみ, FDやCD-ROMで提供する場合もあるが, OSの主たる部分(カーネル)をネットワーク経由で取得する場合は, これもネットブート形式に含める場合が多い. 起動後はローカル・ディスクを利用しても構わない. 実際のところ,実行速度を維持するためにスワップ領域(Windowsで言うところのページファイル)を ローカル・ディスク上に作成するというのは一般的に行われている. このようにローカル・ディスクをなんらかの形で利用する場合には, ネットブートではあるが,完全なディスクレス運用とは呼べないだろう.
他方,「ディスクレス」というのは,ローカル・ディスクを持たない, もしくは持っていても利用しないで運用する形式を言う. 起動イメージはネットワーク経由でダウンロードしてくる, つまりネットブート形式である場合が多いが, FDやCD-ROMなどハードディスク以外の媒体で提供されることもある. 起動後は,サーバ上にあるファイルをネットワーク経由で利用する場合がほとんどだが, 主記憶が潤沢に利用できるようになりつつある今日では, 主記憶の一部をディスクとして用いる(RAMディスク)場合もある.
本稿で目指しているのは,起動イメージをネットワーク経由でダウンロードし, 主たるファイルはサーバ上にあるものをネットワークを介して利用するという形式である. 必要に応じて,スワップ領域や,一時ファイル領域(テンポラリ領域)はローカル・ディスク上に作成する. その意味では,ネットブートではあるが,完全なディスクレス運用とは言えない.
その他によく似た運用形式として,X端末やWBT(Windows-based Terminal)といったシステムがある. これらでは,演算に用いるCPUや,記録のためのハードディスクはサーバのものを用い, クライアント側では入出力のみを行う. 起動時にのみサーバを利用するネットブートや, ハードディスクのみサーバを利用するディスクレス運用に比べて, CPUとハードディスクをサーバに依存するため, サーバ側に大きな資源を必要とする.
ネットブート・システムや,ディスクレス・システム,X端末やWBTのように多かれ少なかれ, 資源の一部をサーバに依存し,それによって,資源を節約するように設計されたクライアントを まとめて「シンクライアント」と呼ぶ.
ネットブート・システムを構築する前に, ネットブート・システムがどのような順序で起動するのか知っておくと, これからの作業の見通しがついて良いだろう. 以下に簡単にまとめてみる.
通常のPCの起動順序
ネットブートの順序を知る前に,まず,通常のPCの起動順序を知っておこう. そうすることで,どのようなプログラムが必要なのかが分かってくるだろう. 詳細は「ブートの仕組み」を参照して欲しい.
- PCの電源が入ると,まずBIOSの起動プログラムが実行される.
- BIOSはHDDの先頭から起動用プログラムを読み込み,実行する. HDD内で, この起動用プログラムが書き込まれた領域がマスター・ブート・レコード(Master Boot Record, MBR)である.
- Linuxの場合は,MBRに書かれた起動プログラムが,直接, OSの中心部分であるカーネル(kernel)を読み込み,起動する.
- Linuxカーネルはローカル・ディスク上のファイル・システムをマウントし, /bin/initを起動する.
この後,initは設定ファイルに従ってファイル・システム上のサービスを提供するプログラム を実行する.
ちなみに,Windows NT系のOSの場合は,MBRに書かれた起動プログラムは, ブート・パーティション(Boot Partition)の先頭(ブート・セクター,Boot Sector)にある 起動プログラム(Initial Program Loader, IPL)を読み込み,実行するだけである. 実行されたIPLは基本領域にあるNTLDRと言うプログラムを実行する. これはWindows NTのカーネルを読み込むためのプログラムである.
ネットブートの順序
上記,通常のPCの起動順序をふまえて,PXEを利用したネットブートの順序を知っておこう. PXEはIntelが提唱した規格で, LinuxやBSD系UNIXなどでネットブートのために利用されることが多い. PXEに準拠した起動プログラムは, 通常ネットワーク・インターフェイス(Network Interface, NIC)のROMに納められている.
- BIOSから起動し, 続けてネットワーク・インターフェイス・カード(Network Interface Card, NIC)の ROM内の起動プログラムが実行される.
- NIC内の起動プログラムがDHCPサーバからIPアドレスを取得し, 続いて,DHCPサーバが示すTFTPサーバから起動用プログラムを読み込み,実行する.
- 起動用プログラムは,TFTPサーバからLinuxのカーネルを読み込み,起動する.
- LinuxカーネルはNFSサーバの提供するファイル・システムをマウントし, /bin/initを起動する.
この後の手順は通常の起動順序とほぼ同じである.
準備
OS
サーバOSとクライアントOSは共にDebian LinuxベースのディストリビューションであるUbuntuとする. Ubuntuの,特にサーバは長期サポート版が用意されていることが特徴である. 実際に用いたOSは以下の通り. 最新のOSについてはUbuntuのサイトを参照して欲しい.
サーバOS
- Ubuntu-6.06.1-server-i386
- いわゆるLTS(Long-Term Support)と呼ばれる長期サポート版でリリースから5年間(2011年6月まで) サポートされる.
クライアントOS
- Ubuntu-ja-7.10-desktop-i386
- 通常版(リリースから18ヶ月サポート)の日本語ローカライズ版
OSのインストール
さて,いよいよ作業にかかろう. 基本的に,サーバOS,クライアントOS,いずれのインストールも標準的な手順でインストールして構わない.
まず,サーバPCにサーバOSをインストールする. インストール時にIPアドレスの設定をしなくてはならないが, あとでクライアントPC用にDHCPサーバをインストールする関係で, このサーバのIPアドレスは固定としておき, DHCPサーバを参照しないように設定したほうが良さそうである. 以下ではサーバのIPアドレスは 133.30.244.10 として 設定を行うことにする.
デフォルトゲートウェイのIPアドレスなど, その他に必要な情報はネットワークの管理者に問い合わせること. また,ネットワーク内にすでにDHCPサーバがある場合は, 別にDHCPサーバを立ち上げることにより問題が発生することがあるので, この点についてもネットワークの管理者に確認すること.
クライアントPCが,サーバPCにインストールされるDHCPサーバを利用する場合は クライアントOSのインストールに先立ってサーバの設定を行ったほうが良い.
サーバの設定
必要なサーバ・ソフトウェアのインストールと設定などを行う. UbuntuサーバはGUIが用意されていない(標準ではX Window Systemもインストールされない)ので, 追加ソフトウェアのインストールには, コマンドラインからaptitudeまたはapt-getを利用する.
IPアドレスを固定アドレスに変更する
インストール時にはDHCPサーバから取得する設定にしていたが, 途中で固定アドレスに変更したい場合があるかもしれない. そのような場合には /etc/network/interfaces を書き換える.
DHCPサーバから取得する設定では以下のように記述されているはずである. ここで eth0 はイーサネットのデバイス名である. 環境によっては異なっている場合もあるので, ifconfigコマンドで確認しておくと良い.
# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet dhcp
ここで最初の3行の lo デバイスはループバックデバイスで, これに関する設定は変更しなくても良い. eth0に関する設定のみを以下のように書き換える. いずれの値も,ここで挙げたのは一例に過ぎないので, 各自のネットワークの管理者に確認しておくこと.
auto eth0 iface eth0 inet static address 133.30.244.10 <--- サーバPCのIPアドレスを指定する netmask 255.255.255.0 <--- 同ネットマスクを指定する broadcast 133.30.244.255 <--- 同ブロードキャストアドレスを指定する gateway 133.30.244.254 <--- デフォルト・ゲートウェイを指定する
クライアント用ディレクトリの作成
クライアント用のディレクトリを作成する. このディレクトリはTFTPサーバのルート・ディレクトリになると共に, NFSサーバによって公開され, クライアントのルートファイルシステムとして利用されるディレクトリを含む. ここでは /netboot をクライアント用のディレクトリとする.
% sudo mkdir /netboot <--- TFTPサーバのルート % sudo mkdir /netboot/linux <--- クライアントのルートファイルシステム
DHCPサーバ
インストール
apt-getを利用する場合には以下のコマンドによりインストールする. sudoはコマンドを管理者(root)権限で実行するためのものである. aptitudeを利用する場合は,メニューから選択することになる. DHCPサーバは net の項目にある.
% sudo apt-get install dhcp3-server
設定
DHCPサーバの設定ファイルは /etc/dhcp3/dhcpd.conf にあるので, これを以下のように編集する. 各項目の詳細についてはman dhcpd.confまたはman dhcp-optionsで調べてほしい.
# IPアドレス貸し出し期間 # 初期設定のままでも問題はない default-lease-time 600; # <--- 要求が無かった場合のIPアドレス貸し出し期間(秒) max-lease-time 7200; # <--- IPアドレスの最長貸出期間(秒) # ネットワークに関する設定 # ネットワーク管理者に確認のこと option domain-name "cla.kobe-u.ac.jp"; option domain-name-servers 133.30.244.1; option broadcast-address 133.30.244.255; option routers 133.30.244.254; # ネットブート・マシン以外のためのIPアドレス貸し出し設定 subnet 133.30.244.0 netmask 255.255.255.0 { range 133.30.244.200 133.30.244.220; # <--- 貸し出しIPの範囲を指定 } # ネットブート・マシン用の設定 group { use-host-decl-names on; # <--- ホスト名の自動設定をオン next-server 133.30.244.10; # <--- TFTPサーバのIPアドレス filename "pxelinux.0"; # <--- TFTPサーバから取得するファイル名 # ネットブート・マシンへの貸し出しIPの範囲を指定 subnet 133.30.244.0 netmask 255.255.255.0 { range 133.30.244.100 133.30.244.120; } # 各マシンの設定 host netboot-client1 { # <--- use-host-decl-name が on の場合はこれがホスト名になる hardware ethernet XX:XX:XX:XX:XX:XX; # fixed-address 133.30.244.50; <--- 固定アドレスを与える際はこんな感じで } }
「各マシンの設定」でhardware ethernetの部分には, クライアントPCの MACアドレス を記述する. MACアドレスはifconfigコマンドなどで調べることができる.
NFSサーバ
インストール
% sudo apt-get install nfs-kernel-server
設定
ネットブート・クライアント用のルートファイルシステムがマウントできるように公開するため, /etc/exportsに以下のように記述する.
/netboot 133.30.244.0/255.255.255.0(rw,no_root_squash)
公開する相手をIPアドレスとネットマスクで指定する. 括弧内はオプションである. rwは読み書き(read/write)できることを表し, no_root_squash は root すなわち管理者の権限でファイルにアクセスできることを表す.
TFTPサーバ
インストール
% sudo apt-get install tftpd-hpa
設定
DHCPやNFSサーバと異なり, TFTPサーバはインストールしただけでは実行されない. 設定ファイル/etc/default/tftpd-hpaを以下のように書き換える. これにより,TFTPサーバを起動時に実行すると同時に, ネットブート・クライアント向けのディレクトリを指定する.
RUN_DAEMON="yes" <--- 起動時にTFTPサーバを実行する OPTIONS="-l -s /netboot" <--- TFTPサーバでの公開ディレクトリを指定する
PXELinux
PXELinuxはPXEの起動プログラムで, TFTPサーバ経由でクライアントに渡され, カーネルの読み込みと起動を行う.
インストール
% sudo apt-get install syslinux
設定
まず,PXEを利用した起動プログラムである pxelinux.0 を以下のように TFTPサーバで公開するディレクトリにコピーする.
% sudo cp /usr/lib/syslinux/pxelinux.0 /netboot
続いて, 以下のコマンドを実行し,
% sudo mkdir /netboot/pxelinux.cfg % sudo vi /netboot/pxelinux.cfg/default
次の内容のPXE起動用の設定ファイルを /netboot/pxelinux.cfg/default に作成する.
DEFAULT linux LABEL linux KERNEL linux/boot/vmlinuz-2.6.XX <--- /netboot 以下でのカーネルの場所を相対的に指し示す APPEND root=/dev/nfs nfsroot=133.30.244.10:/netboot/linux ip=dhcp IPAPPEND 0
カーネルのファイル名などは, クライアントを設定するときにカーネルを再構築するので, その際に確認して変更しておく必要がある.
クライアントの設定
クライアントの設定は以下のような手順となる.
- クライアント環境の構築
まず利用環境にあわせて,クライアント環境を構築する. ここで設定したファイルなどをコピーしてネットブート時に利用するので, とりあえず利用できるように設定をしておく. - クライアント環境のコピー
1.で設定したクライアントPCのファイルを,NFS経由でサーバにコピーする. サーバにコピーされたファイルは, ネットブート時にルートファイルシステムとして利用されることになる. - RAMディスクの設定
サーバ上のルートファイルシステムに書き込みできない問題を回避するため, RAMディスクを用意し, ここを一時ファイルやログのために利用するように設定を行う. - その他の設定の変更
幾つかの設定ファイルをディスクレス・システム用に書き換える. - カーネルの再構築
クライアントPC用のカーネルを再構築し, これもサーバに置く.
クライアント環境の構築
クライアント環境は,ネットワーク環境などによっても設定が異なるので, 細かい部分は省略し,ここでは,カーネルを構築する手順について説明する.
後ほど,ルート・ファイルシステムをNFSサーバからマウントするためにカーネルを再構築するのだが, 再構築するカーネルのバージョンが,この時点におけるカーネルのバージョンと異なる場合, モジュール類の不整合が出てしまう. したがって,この時点で一度カーネルを再構築しておくほうが良い.
以下にカーネルの構築手順を示す.
1. 必要なパッケージのインストール
apt-getで必要なパッケージをインストールする.
% sudo apt-get install build-essential <--- 開発環境のインストール % sudo apt-get install kernel-package <--- カーネル再構築用ツールのインストール % sudo apt-get install libncurses5-dev <--- menuconfigに必要なncursesのインストール
カーネルの設定時にテキストベースの menuconfig の代わりに, GUIベースの xconfig を利用する場合は以下のコマンドにより, Qtの開発環境をインストールしておく.
% sudo apt-get install libqt3-headers libqt3-mt-dev
2. カーネルソースの取得・展開
同様に,apt-getでカーネルのソースを取得して,展開する.
% sudo apt-get install linux-source % cd /usr/src % sudo tar xjf linux-source-2.6.XX.tar.bz2 % sudo ln -s linux-source-2.6.XX linux
3. カーネルの設定
以下を実行して, 現在の設定を反映する.
% cd /usr/src/linux % sudo cp /boot/config-2.6.XX-XX-generic .config % sudo make oldconfig
不要なモジュールを作成しないなど,設定に変更を加えるのであれば, 以下を実行して設定を行う. なお,GUIベースで設定を行いたい場合は,menuconfigの代わりにxconfigを指定する.
% sudo make menuconfig
4. カーネルの構築
そのまま以下を実行するとカーネルを構築できる.
% sudo make-kpkg clean % sudo make-kpkg -initrd --revision nfsroot.20071108.0 kernel_image kernel_headers
5. カーネルのインストール
menuconfigなどでカーネルの設定を変更したのであれば, 以下を実行してカーネルのインストールを行う. 特に変更していなければ,インストールの必要はない.
% cd .. % sudo dpkg -i *.deb
インストール後に,念のためクライアントPCを再起動してみること. うまくいかない場合は,起動時にGRUBの表示が出た瞬間に「ESC」キーを押すと, メニューが出て,古いカーネルでの起動ができる.
クライアント環境のコピー
クライアント環境をコピーする際には,NFSサーバの当該ディレクトリをマウントして, ファイルをコピーする必要があるが,Ubuntu には,標準状態でNFSクライアントの機能が入っていないので, 以下のコマンドを実行して,これをインストールしておく.
% sudo apt-get install nfs-common
続いて,以下のコマンドを実行して, ネットブート時にクライアントのルートファイルシステムになるサーバのディレクトリをマウントする.
% sudo mkdir /mnt/netboot % sudo mount -t nfs 133.30.244.10:/netboot /mnt/netboot
うまくマウントできたら,クライアントの/(ルート・ファイルシステム)をサーバ側にコピーする.
% cd /mnt/netboot/linux % sudo cp -a /bin /dev /etc /lib /sbin /usr /var .
RAMディスクの設定
サーバ側に用意されたクライアントのルートファイルシステムは, ディスクレス・システムから共有される前提のため,読み込み専用でマウントされる. このままでは,一時ファイルや,ログなどを書き込めないため,クライアントが正常に動作しない. これを回避するため,ここでは参考資料[4]に従って, RAMディスクを用意する.
1. RAMディスクの用意
起動時にRAMディスクを作成するためのスクリプトを /etc/init.d/NFSROOT に用意する. ここでは,NFSサーバ上に用意されているクライアントのルートファイルシステムが, /mnt/netboot/linuxにあると仮定しているので, /mnt/netboot/linux/etc/init.d/NFSROOTに以下の内容のファイルを作成する.
# 容量120MBのRAMディスクを作成 mount -t tmpfs tmpfs /ram -o size=128m # varを用意 mkdir /ram/var/ cp -a /var.ro/* /ram/var # tmpを用意 mkdir /ram/tmp/ chmod 1777 /ram/tmp
続いて以下のコマンドを実行し, スクリプトに実行権限を付ける.
% sudo chmod +x /mnt/netboot/linux/etc/init.d/NFSROOT
このスクリプトがファイルシステムのマウントが始まる前に実行されるように, 以下のコマンドを実行して/mnt/netboot/linux/etc/rcS.dにリンクを作成する.
% cd /mnt/netboot/linux/etc/rcS.d % ln -s ../init.d/NFSROOT S34NFSROOT
2. /varのうち書き換えを行うファイルをRAMディスクに置くための設定
/varの中で,書き換えが行われるため,共有できないものをRAMディスクに置くように設定する. まず,以下のコマンドを実行して,共有できないファイルを専用のディレクトリに移動する.
% sudo mkdir /mnt/netboot/linux/var.ro % sudo mkdir /mnt/netboot/linux/var.ro/lib % cd /mnt/netboot/linux/var % sudo mv crash dev etc local lock log mail run spool tmp ../var.ro/ % sudo mv lib/nfs lib/acpi-support lib/urandom lib/gdm ../var.ro/lib/
続いて,これらの代替品をRAMディスクに置くための設定をする.
% cd /mnt/netboot/linux/var % sudo for i in crash dev etc local lock log mail run spool tmp; do ln -s /ram/var/${i} ${i}; done % sudo for i in nfs acpi-support urandom gdm; do ln -s /ram/var/lib/${i} lib; done
3. /tmpをRAMディスクに置くための設定
/tmpは一時ファイルを置くための領域で, これも書き換えをするため共有できない. よって,以下のコマンドを実行し,このディレクトリもRAMディスク上に用意する.
% cd /mnt/netboot/linux % ln -s /ram/tmp tmp
その他の設定の変更
以下の幾つかのファイルをディスクレス・システム用に書き換える.
- /etc/hostname
- DHCPサーバから取得して自動的に設定するので,削除する.
- /etc/hosts
-
インストール時にIPアドレスやホスト名を設定している場合は,
これらの情報が書き込まれているので,
localhostに関する情報のみを残して
当該の行を削除する.
127.0.0.1 localhost ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
- /etc/fstab
-
procの行のみを残して削除する.
proc /proc proc defaults 0 0
- /etc/mtab
-
mtabにはディスクなどのマウント状況が記録されるが,
ディスクレス・システムの場合は,ルートファイルシステムに書き込みができない.
下の ifstate のように RAMディスクに作成しても良いが,
以下のコマンドを実行して/proc/mountsにリンクを張るので良いらしい.
% sudo ln -sf /proc/mounts /mnt/netboot/linux/etc/mtab
- /etc/network/interfaces
-
loに関する以下の2行のみを残して削除する.
auto lo iface lo inet loopback
- /etc/network/ifstate
-
これもmtabと似たようなもので,
ネットワークの状況が保存される.
これは,以下のコマンドを実行し,
先ほど用意したRAMディスクに保存するように設定する.
% sudo ln -sf /ram/ifstate /mnt/netboot/linux/etc/network/ifstate
カーネルの再構築
ルートファイルシステムをNFSサーバからマウントするための設定を行って,カーネルを再構築する. 最も重要なポイントは, NFSサーバからルートファイルシステムをマウントするために必要な機能は モジュールではなく,カーネルに予め組み込んでおく(build-in)ことである. これを忘れると, NFSサーバにアクセスするためのモジュールが NFSサーバ上のルートファイルシステムに置いてあるという, 鶏と卵状態に陥ってしまうので注意する.
1. カーネルの設定変更
以下のコマンドを実行して menuconfig を起動し, 幾つかの設定を行う.
% cd /usr/src/linux % sudo make menuconfig
- Networking > Networking options > IP: kernel level autoconfiguration
これを組み込みにすると「IP: DHCP support」と「IP: BOOTP support」, 「IP: RARP support」が設定できるようになる. 少なくとも「IP: DHCP support」は必要で,その他は不明. いずれも組み込む設定で間違いない. - Device Drivers > Network device support > Ethernet (10 or 100Mbit)
クライアントで利用しているネットワーク・インターフェイスに合ったネットワーク・ドライバを モジュールではなく,組み込みに設定する. 使用中のモジュールはlsmodコマンドで確認できる. - File systems > Network File Systems > Root file system on NFS
まず一番上の「NFS file system support」を組み込みにすること. すると,「Root file system on NFS」の選択が表示されるので,これも組み込みに設定する.
このほか参考文献[4]によると, TMPFSとRAMFSの設定も必要らしいが, 今回使用したUbuntuのディストリビューションでは, それは既に設定されていた.
以下は .config で変更のあった部分を抜粋したものである.
# Kernel level autoconfig CONFIG_IP_PNP=y CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_BOOTP=y CONFIG_IP_PNP_RARP=y # ネットワークドライバ CONFIG_MII=y CONFIG_PCNET32=y # NFS周り CONFIG_NFS_FS=y CONFIG_ROOT_NFS=y CONFIG_LOCKD=y CONFIG_SUNRPC=y CONFIG_SUNRPC_GSS=y CONFIG_RPCSEC_GSS_KRB5=y CONFIG_CRYPTO_BLKCIPHER=y CONFIG_CRYPTO_CBC=y CONFIG_CRYPTO_DES=y
2. カーネルを再構築する
以下のコマンドを実行してカーネルを再構築する.
% sudo make-kpkg kernel_image
3. カーネルをNFSサーバに移す
以下のコマンドを実行し, ブートに必要な最小限のカーネル周りのファイルをNFSサーバにコピーする.
% cd /usr/src/linux % sudo cp arch/i386/boot/bzImage /mnt/netboot/linux/boot/vmlinuz-2.6.XX % sudo cp System.map /mnt/netboot/linux/boot/System.map-2.6.XX % cd /mnt/netboot/linux % sudo ln -s /boot/vmlinuz-2.6.XX vmlinuz
最後に
ルートファイルシステムの共有設定
基本的な設定はこれで終了だが,共有して利用できるように, ルートファイルシステムを読み込み専用でマウントするように変更する. 具体的には,NFSサーバ側で,/etc/exportsを以下のように書き換える.
/netboot/linux 133.30.244.0/255.255.255.0(ro,no_root_squash)
重要なのは,ルートファイルシステムとして利用するディレクトリを公開すること. この場合は /netboot ではなく,/netboot/linux を公開する. また,オプションにrw(read/write)の代わりにro(read only)を指定し, 読み込み専用で公開することである.
なお,この設定を行ってしまうと, クライアント側からルートファイルシステムのファイルは変更できなくなるので, ユーザ領域の共有設定を行う場合は,先に以下の設定を行う必要がある.
ユーザ領域の共有設定
1. NFSサーバ側の設定
ユーザ領域はNFSサーバ上の別の領域を,読み書き出来るように公開する. 例えば,NFSサーバ上の /home を共有するならば, NFSサーバの/etc/exportsに以下のように記述する.
/home 133.30.244.0/255.255.255.0(rw)
もし,root権限でアクセスする必要があるのであれば, no_root_squashオプションも指定すると良い.
2. クライアント側の設定
クライアント側では,公開されたユーザ領域をマウントするように設定しなくてはならない. このためには,まずクライアント側の /etc/fstab に次のように記述する. なお,これを記述するためには, ルートファイルシステムを読み書き可能な状態でマウントしている必要がある.
133.30.244.10:/home /home nfs defaults 0 0
手元で試した限りでは,このままでは起動時にユーザ領域をマウントしてくれなかったので, クライアント側の /etc/rc.local に次の1行を追加した. これにより,起動時にマウントを行うようになったが, もっと良い方法があるかもしれない.
echo -n "Mounting file systems ... " mount -a echo "done."