ースー ノヾー NFS ユーサーへの道 4 前回は、ネットワーク・サービスについて説明しました。 ネットワークを使うためにはそれなりの苦労を覚語しなけ ればなりませんが、それを乗り越えればメールやファイル 転送など、バラ色の世界 ( 茨の道 ? ) が開けてきます。何も しないで環境がよくなるはすはありませんし、苦労したぶ んだけ手に入れたときの喜びはひとしおでしよう。 さて、ネットワークを使う目的の 1 つに資源の共有ク が挙げられます。卒業論文の提出期限も近くなってきた 1 月のある日のこと、自分が使っているマシンがとても遅く て、ログインしたのはいいがいつまでたっても返事が返っ てきません。、、なんでこんなに重いねん〃と思いつつ、 ps コ マンドでプロセスを調べてみました。すると、 3 日も前か ら妙なプロセスが走り続けているではあませんか。さっそ く走らせている当人に訊いてみると、「シミュレーションの プログラムを走らせてんねん」とひとこと。どうやら彼は、 あちこちのマシンにリモートログインしまくって、シミュ レーションを実行させていたようです。 まったく迷惑な話ではありますが、余っている CPU を 有効に使うという意味では、これも立派な、、資源の共有〃 といえるかもしれません。 そのはかにもプリンタの共有など、ネットワークによっ てさまざまな資源が共有できるようになります。ここで紹 介する NFS (Network File System) は、、、ディスクの共 有〃を実現しているシステムです。この章では NFS につい て、何ができるのか、実際の設定、使い方についてみてい きます。 どこかいいの ? NFS は、 Sun Microsystems によって開発された分散 ファイルシステムです。分散ファイルシステム〃とは、 く簡単に説明すると、あちらこちらに散らばっているファ イル ( システム ) を 1 つのファイルシステムであるかのよ うに見せるためのものです。 ネットワーク上でファイルを共有するには、 NFS に代 表される分散ファイルシステムと、前回説明した ftp など に代表されるファイル転送の 2 つの方法が考えられます。 ますこの両者を比べ、 NFS の利点を探ってみましよう。 UNIX MAGAZINE 1991.8 ・特別なコマンドを知らなくてもよい AT&T が開発した RFS(Remote FiIe Sharing) など、 せん。 CMU が開発した AFS (Andrew FiIe System) 、 ましたが、分散ファイルシステムは NFS だけではありま さきほどヾ NFS は分散ファイルシステムである〃と書き を利用するかを決定します。 ァイルの性質や周りの環境なども検討したうえで、どちら NFS が使えないこともあります。したがって、共有するフ あります。また、相手が NFS をサポートしていないなど、 度など、場合によってはファイル転送のはうがよいことも NFS の利点をいくっか挙げましたが、アクセスする頻 や大きなファイルを扱う場合、大きなメリットになるでし ないので、ディスク容量が節約できます。多数のファイル 前述のように NFS ではファイルのコピーを作る必要が ・ディスク容量が節約できる を考える必要はありません。 どのマシンのディスクなのかというネットワーク上の所在 ーサーはローカルのファイルとしてアクセスできるので、 ファイルシステムのように扱えます。したがって、一般ュ NFS では、リモートのファイル ( システム ) をローカル・ ・ファイルがある場所を知らなくてもよい す。 るので、一貫性の確保はファイル転送よりはるかに容易で コピーを作らすにオリジナルのファイルを直接アクセスす 大きな問題になります。これに対し、 NFS ではファイルの です。とくに複数の人間でプログラムを開発するときには、 存在し、ファイルのバージョンなどの一貫性の保持が困難 ファイル転送の場合、ネットワーク上に複数のコピーが ・ファイルのコピーを作る必要がない ァイルにアクセスできます。 ルマシン上のファイルと同し感覚でリモートマシン上のフ こなうべきものです。したがって、一般ューサーはローカ NFS を使うための設定は必要ですが、これは管理者がお なりませんが、 NFS ではその必要はありません。もちろん ざわざ ) リモートマシンからファイルをコピーしなけれは ファイル転送の場合には、 ftp コマンドなどを使って ( わ 43
e $ & 第 0 ee 0 ee たちの設定に問題があるのかもしれませんが、 NIS の ypbind デーモンが動作していると NIS を利用するプ ログラムの立ち上がりが目に見えて遅くなります。たと えば、ー 1 ク "ypmatch" などで NIS のデータ べースを参照する場合、その実行ははっきりとヾ遅い〃 と感しさせるぐらいで、通常の使用にも問題があるはど です。これは ypbind の問題と考えられるので、新しい ypbind の登場に期待したいと思います。 ・ NFS4.0 RISC / os は SVR3 寄りの OS という印象がありま すが、ファイルシステムは BSD 系の FFS(Fast File System) をもとにしており、リモート・ファイルシステ ムも BSD 系の SunOS をオリジナルとする NFS が搭 載されています。今回の評価のなかでは、 NFS マウント の相手 ( サーバーでもクライアントでも ) が N FS 4.0 な ら問題はなかったのですが、 SunOS3.5 などに搭載され ている旧い NFS の場合には、 root が 9 以上のグループ に属していると、、 authentification error" が出て正常 に動作しませんでした。この場合 /etc/group などを適 当に編集し、 root を含むグループを減らすと正常に動作 します。 NFS4.0 では、あるユーサーが同時に 16 までの グループに属せるようになりました。以前は 8 までだっ たことを考えると、原因はこの点にあると考えられます。 ・ DNS NIS と同様の機能を提供する、、 DARPA Domain Name Service" も搭載されています。 NIS 同様に、各 種設定の整備が必要です。 ・ /etc/vis. conf による情報サービスの選択 /etc/vis. conf というファイルを利用して、 NIS およ び DNS を使用するか否かという選択をするようになっ ています。このファイルはデフォルト・インストールの 状態ではそもそも存在していないので、一から書かなけ ればなりません。記述の詳細はマニュアル Cman vis" でオンライン・マニュアルが参照できます ) に譲ります UNIX MAGAZINE 1991.8 のように記述します。簡単に説明すると、それぞれのフ netgroup : ms group: IS passwd : nis host : files n1S が、 NIS を全面的に使用する場合には、 ァイル ( さきほどの例では hosts や passwd など ) に関 して files(UNIX の通常ファイル ) 、 nis(NIS) 、 dns (DNS) を指定します。サーピスに対する要求の処理は、 ここで指定した順番でおこなわれます。 これらが OS の特徴ですが、正直なところ BSD 系の マシンばかりのなかで生活している私たちにとって、 BSD 系のマシンでの /etc/rc に相当する /etc/inittab ( 後述 ) の編集などはかなり苦労させられました。 SVR3 と BSD を統合した点は評価できるのですが、やはり SVR3 べースの OS であることを忘れてはいけないよ うです。 端末のセットアップ RISC/os の SVR3 機能を利用したシステム管理の 例として、シリアル端末 ( ttyline ) のセットアップをとり あげます。 tty は、 SystemV 流にしか管理できません。 つまり、 /etc/inittab や /etc/ttytype で管理するので すが、通常の SystemV の管理手順に従って sysadm コ マンドを動かすことにより、対話的に設定していくこと ができます。設定作業そのものもたいへん簡単で、とて も快適です。もちろん、直接 /etc/inittab などを自分で 編集してもかまいません。 tty の設定作業で興味深いの は、 BSD 流の tty 管理ファイルである /etc/ttys が 、、 fakedversion" として起動時に自動生成されることで す。これらは、 BSD 系との融合にともなう苦肉の策とい うところでしよう。ちなみに、 / etc / ttys を編集しても意 味がありません ( これは、 / etc / ttys ファイルにも書かれ ています ) 。 なお tty 設定に関しても、 root が属するグループ数を 8 以下に抑えないと getty が正常に動作しないという 症状がみられました。 プリンタのセットアップ RISC/os の BSD 機能を利用したシステム管理の例 として、プリンタのセットアップに触れましよう。プリ ンタは SVR3 機能でも管理できますが、 BSD 系の機能 も問題なく重川乍します。このため、すでに LAN に BSD 系の機械が多数存在する場合には、リモートプリントな どとの兼合いを考えて、 /etc/printcap と lpd 、 lpr 、 29
第 e $ & 0 ce 0 ee リスト 2 ファイル nfs # ! /bin/sh start) nfs-start $ { 1 + “ $@" } ・ case $ 1 in main() { eval $ { 1 + " $@" } & return 1 Ⅱ return 0 not() { USAGE="usage: /etc/imt. d/nfs {startl stop}" ; # lnitialize the nfs software. stop) esac echO "$USAGE"; exit 1 nfs-start ( ) { PAIY=/net:/bin:/etc:/usr/bin:/usr/etc:/usr/ucb:/usr/etc/yp nfs=/etc # Have they set the hostname yet. If not' don't start the network ・ "no—hostname-set" ] ; then if [ "'hostname exit 0 fi # Check fo て existance Of tcp first. if [ ! -x /etc/havetcp ] Ⅱ not /etc/havetcp then exit 0 # Fire up NFS daemons if they are present and executable. # 1 五 e portmapper is the sine qua Ⅱ 0 Ⅱ , since doesn't vork it out # him. NO 響 that inetd supports RPC, init. d/tcp must start portmap # Therefore 土Ⅱ1t. d/tcp must be invoked before this script ・ 〔 -x /etc/havenfs ] 誠 /etc/havenfs then # Truncate /etc/xtab & 11m exprtfs if [ -x $nfs/exportfs ] ; 新 > /etc/xtab if $nfs/exportfs -a; then echO 'tExport file systems' else echO " 、、 nWARNING: /etc/exprtfs f 凾 1 . echo "(Can't mount to this systa)\n" else echo "(Can't mount tO this system)\n" echo "\n\nWARNING: unexecutable file: /etc/exportfs fi fi echo "NFS daemons:\ci' # NFS fi fi else fi if [ —r /etc/lockd. conf ] ; then server daemons if [ -x $nfs/nfsd ] ; then $nfs/nfsd 4 : # NFS client biO daemons if [ -x $nfs/biod ] ; then $nfs/biod 4 ; # NFS LOCk manager daemon echo echo nfsd\c" ー biod\c't $nfs/rpc. lockd 'head ー 1 /etc/lockd. conf' $nfs/rpc. lockd echo ” lockd\c" # NFS status monitoring daemon $nfs/rpc. statd ; echO UNIX MAGAZINE 1991.8 statd\c" 39
さまざまな分散ファイルシステムがあります。これらの分 散ファイルシステムのなかで、なぜ NFS がもっとも普及 しているのでしようか。 NFS の特徴をすこしみてみまし よっ。 NFS はサーバー・クライアント形式をとっており、ファ イルを提供する側がサーバーとなります。基本的には、各 マシンでデーモンを起動し、それらが通信することによっ てファイルのアクセスなどの処理をおこないます。また、 サーバー・クライアント間の通信には SunRPC1 というプ ロトコルを利用しています。 特集の第 1 回 ( 1991 年 5 月号 ) で説明したように、 UNIX ではローカルなファイルシステムを 1 つのツリー 構造にまとめるためにマウントという概念を用いています。 NFS はこれを拡張し、リモートのファイル ( システム ) を ローカルなファイルシステムにマウントすることで、散在 するファイルを 1 つのツリー構造に見せかけているのです。 ディスク上のファイルはファイルシステムというかたちで まとめられ、ファイルシステム単位でマウントされます。 NFS では、ディレクトリ単位でのマウントが可能です。た とえは・、マシン monkey00 の /usr/local を monkey()l に マウントすると、図 1 のようになります。これによって、 ューサーはローカルのファイルと同様にアクセスできるよ うになっているわけです。 そのほかにも、 NFS には以下のような特徴があります。 ・機種や OS に依存しない NFS は、特定の機種や OS に依存しない設計になって います。現在では、 MS-DOS や Macintosh など、 UNIX 以外の多くの OS でもサポートされています。ネットワー クには多種多様なマシンか接続されていますから、これは 大きな利点です。 ・ステートレス (stateless) である ファイルには、大きく分けて、、オープン〃とツローズ〃 の 2 つの状態があります。 NFS でアクセスした場合には、 この状態は存在しません ( ステートレス ) 。つまり、アクセ スするたびにサーバーはファイルをオープンし、シークし、 読み書きをおこない、クローズするという処理をおこなう のです。 1 Sun RPC(Remote ProcedureCaII) は、通信を関数呼出しのかたちで実現して いるプロトコルです。フォーマットは、 Sun XDR(eXternal Data Representa- tion) で規定されています。詳細は、 RFC1057 および RFC1014 または Sun Microsystems の "Network Programming Guide" などを参照してください。 44 図ー etC lib N FS マウント NFS クライアント bin c 引 N FS サーバー lib NFS mount lib etC bin bin NFS クライアント bin 池 c 引 etC にして、ますどのようなときに利用するかをみていきまし した。 NFS の設定や実際の使い方はあとで説明すること 以降からはオートマウンタもサポートされるようになりま 現在は NFS のバージョンも 4 . 0 になり、 SunOS 4 . 0 回復すればただちに作業が再開できます。 クライアントはサーバーの回復を待ち続けるだけでよく、 ますないということです。また、サーバーが停止しても、 きなり停止しても NFS の先にあるファイルを壊すことが この方式の利点は、状態がないためにクライアントがい 何に使う ? UNIX MAGAZINE 1991.8 を圧縮してなんとかディスクの空きスペースを確保しよ ジが出ると、皆慌ててゴミファイルを消したり、ファイル たときに表示されるメッセージです。このようなメッセー しています。言わすと知れた、ディスクがいつばいになっ 最近、私たちの研究室ではこのようなメッセージが頻出 /var : file system full
ースー NFS の ユーサーへの道 4 うとします。しかし、メッセージが出るたびにこのような ことをするのは非能率的ですし、そもそも根本的な解決に はなりません。 このようなとき、 N FS を使うとある程度ディスク不足 を解消することができます。 NFS を使って共有できるも のを、いくっか挙げてみましよう。 ・ホームディレクトリ 同一ユーサーのホームディレクトリが各マシンのローカ ルディスクに存在する場合、これをあるマシンにまとめる ことができます。つまり、ユーサー okayama のホームデ ィレクトリはマシン monkey00 だけに作っておき、あと のマシンは NFS マウントを使ってマウントしてしまうわ けです。ホームディレクトリの . cshrc ファイルや . aliases ファイルなど、共有できるファイルはたくさんありますか ら、これをまとめればディスクが節約できます。また、 れらのファイルの変更が集中的におこなえるなどのメリッ トもあります。 ・ /usr/local ューザーカ噺たにソフトウェアをインストールする場合、 通常は / usr / 10Cd1 の下に bin や lib などのサプディレク トリを作り、そこにファイルを置きます。時がたつにつれ てソフトウェアの量は膨大になりますし、ソフトウェアの インストールをマシンごとにおこなうのも面倒です。そこ で、ファイルサーバーを 1 台作って、そこでインストール するようにすれは、ディスクの節約だけでなくインストー ル作業も効率がよくなります。ただし、バイナリファイル などマシンのアーキテクチャに依存するファイルは、アー キテクチャごとにファイルを用意しなければなりません。 1 台のマシンのディスク容量が足りない場合は、複数のフ ァイルサーバーを用意する必要があります。また、ファイ ルサーバーにトラブルが発生した場合を想定して、バック アップ用のサーバーを用意することも考えておいたはうが よいでしよう。 これら以外にも、オンライン・マニュアルやソースファ イルなど、共有できるものはまだいくつかあります。私た ちの研究室の場合もそうですが、こうした手段を講しても ディスクが足りないようなら、そのときはディスクの増設 を考えるしかありません : ー ( UNIX MAGAZINE 1991.8 それでは、いよいよ NFS の設定とその使い方に入りま す。すでにお話ししたとおり、 NFS ではファイルの共有に 、、マウント〃という概念を使っています。したがって、、、 NFS の設定 = マウントの設定〃と考えることができます。また NFS ではサーバー・クライアント・モデルを用いているの で、サーバーとクライアントでは異なる設定が必要です。 こでは、、サーバーの設定〃とクライアントの そこで、 設定クに分けて考えていきます。 以降で紹介する設定は、前回のサンプル・ネットワーク を例にしています。 monkey00 と monkey02 をファイル サーバー、それ以外のマシンはクライアントとして設定し ています。また、 NFS はバージョン 4.0 を対象にしていま す。これよりバージョンの旧いものではサポートされてい ない機能もあるので、注意してください。 テーモンの起動 NFS を使うためには、処理をおこなうデーモンたちを 起動する必要があります。 Sun の場合、 NFS のデーモンは 起動時に /etc/rc. local ファイルから立ち上げるようにな っています。起動されないような場合は、コメントアウト されていないか調べましよう。もちろん、デーモンを手動 で起動することも可能です。 前回の「 NFS のデーモン」の項でもすこし説明しました が一こで NFS を構成するデーモンについてもうすこし 詳しく紹介しておきましよう。 ・ nfsd 通常、サーバーのマシン上では 4 つないし 8 つのデーモ ンが同時に起動されます。 nfsd は、クライアントからのア クセス要求などを処理してその結果をクライアントに返す という仕事をおこなっており、 NFS の中心的な役割を担 っています。実際のコードはカーネル内に用意されている ので、 nfsd は起動されるとカーネル内のシステムコールを 呼び出し、カーネル内で処理をおこないます。また、後述 の biod も同様ですが、デーモンの数はサーバーの負荷に もとづいて設定されています。起動するデーモンの数が多 いということは、仕事をする人間がたくさんいるのと同し です。つまり、 NFS の応答は速くなりますが、数が多いぶ 45
の工クスポートの状態を表示させています。、、マウントがう まくいかへんにというとき、このように使えばサーバー がェクスポートしているかどうかを調べることができます。 こまでの説明では、 NFS を利用すると作業環境が向 上し、ディスクも節約できるなど、いいことだらけのよう に思えます。しかし、しつかりと計画を立てておかないと 田わぬところで足をすくわれることがあります。そこで、 この項の最後に、 NFS を運用・管理していくうえで注意す べき点をいくっか挙げておきましよう。 ・サー / ヾーのディスクが足らへん みんなが寄ってたかってソフトウェアなどをインスト ールしていくと、知らないうちにサーバーのディスクがい つばいになってしまうことがあります。こうなると、サー バーのディレクトリ構成やパーティションを変更しなけれ はなりませんが、その作業中、クライアントはたいてい何 もできなくなってしまいます。したがって、サーバーとな るマシンのディスク容量やディレクトリ構成などはよく考 えて、途中で変更する必要がないようにしておきましよう。 ・バックアップがない・・ NFS の利点の 1 っとしてファイルのコピーを作らなく てもよいことを挙げましたが、裏を返せば、、ファイルはサ ーにしか存在しない〃わけです。万が一サーバーのデ イスクがクラッシュしてしまうと、これまでの努力も水の 泡、バックアップがなければ呆然とするしかありません。 ですから、サーバーではとくに定期的なバックアップを心 掛けましよう。また、サーバーがクラッシュすると、たい ていは復旧するまでクライアントも身動きがとれなくなっ てしまいます。余裕があれば、バックアップ用のサーバー を作っておくのが望ましいでしよう。 ・クロスマウントにはご注思 NFS 環境では、あるマシンがサーバーであると同時に クライアントでもあることがよくあります。たとえは、お 互いのホームディレクトリをマウントしあっている場合 などがそれにあたります。このようなマウントの方法をヾク ロスマウンドと呼びますが、とくにハードマウントして いるときには注意が必要です。 両方のマシンを落とさなければならないときは、あらか N FS 環境での注意点 UNIX MAGAZINE 1991.8 ースーバーユーサーへの道 4 しめアンマウントしてから落とさなければなりません。さ もないと、片方を落としたとたんにもう一方がハングアッ プしかねません。やむを得すクロスマウントしなけれはな らない場合、ソフトマウントにしておくか、ハードマウン トを利用する場合でも intr オプションを指定するなど、万 が一に備えておいたほうがよいでしよう。 また、停電などの理由ですべてのマシンを落とさなけれ ばならないときは、かならすサーバーを最後に落とすよう にしましよう ( 理由はもうお分かりですね ? ) 。サー クライアントの関係が入り乱れているような環境では、 の順番にはとくに注意が必要です。また、マシンを起動す るときも同様です。 ・ユーサー ID とグループ ID の管理にもご注意 NFS でファイルを共有している計算機のあいだでは、 ューザーのユーザー ID とグループ ID を統一する必要が あります。その理由は、次のような場合を考えてみれば分 かるでしよう。 ◆ X という計算機の A というューサーのユーサー ID が 1000 、グループ ID が 500 ◆計算機 Y では、ユーザー B のユーサー ID が 1000 、グル ープ ID が 500 ◆そして、 X が Y にあるユーザー B のホームディレクトリ を NFS マウント この場合 X のユーサー A は、自分のファイルはもちろん のこと、 Y のディスクにある B のファイルも読み書きでき てしまいます。 ューザー ID とグループ ID の統一は、手作業でやると たいへん面倒なものです。これを自動的に管理するのが NIS です。 NIS については、次の章でお話しします。 ・ NFS の NFS はでけへん たとえば、ある NFS クライアント A がさまざまな計算 機上にある各ューサーのホームディレクトリを、 /home に美しく NFS マウントしたとします。これを見た別の NFS クライアント B が、あれこれとマウントするのは面 倒だとばかりに、 A の / h 。 me を NFS マウントしたとし ます。さてこのような状況で、 A が NFS マウントしてい るファイルやディレクトリが B からでも見えるでしよう 残念ながら、これはうまくいきません。 N FS マウントし 51
e $ & 0 ce 0 齎ー ee 図ー /etc の下のファイル tmp/ lib/ bin/ inittab etc/ rcl . d/ rc2 init . d/ rcO nf s て cO . d/ て cl て c2. d / rc3 て c3. d / この場所の実行ファイルもシェルスクリプトで、適当 な引数 (start か stop ) がえられると、いくつかのコ マンドを実行するように記述されています。一例とし て、ファイル nfs ( リスト 2 ) を挙げておきます。 ・ / etc/rcO 、 / etc/rcO. d /etc/rcO は、実行レベルを 0 、 5 、 6 に移行させるた めに、 /etc/rc0. d の下の S または K で始まるファイ ルを実行します。これらのファイル名は S??name 、 K??name という形式で、 S は起動 (start) を K は停止 ( kill) を示し、 ? ? は 2 桁の数字で実行する順序を示し % ls /etc/rc2. d K60nfs S40nfs ファイルを実行します。 せるために、 / etc / rc2. d の下の S または K で始まる / etc / rc2 ( リスト 4 ) は、実行レベルを 2 、 3 に移行さ ・ /etc/rc2 、 /etc/rc2. d 字のファイルのあとになります。 う引数を渡して実行し、実行順序は 60 より小さい数 /K60nfs( リスト 3 ) は /etc/init. d/nfs に stop とい にあるファイル名です。たとえば、 /etc/rc0. d ます。 name は、このファイルに関連する /etc/init. d K60nfs K70tcp SOIMOUNTFSYS S15autoconfig S16addswap S1610ckfix S17set—kopts S17tzsetup S20sysetup S2 lperf S22account S30t cp S35sys 10g S36savecore S37netdaemons S38ni s S40nfs S70uucp S72smtp S75cron S76printer S78j server S80x 面 1 ・ /etc/rc3 、 /etc/rc3. d 32 / etc / init の動作を追ってみましよう。 これで役者が揃ったので、実行レベルが 2 の場合の が /etc/init. d/nfs です。 S40nfs があり、このファイルから実行されるファイル 実行します。図 1 では /etc/rc3. d の下に K60nfs と /etc/rc3. d の下の S または K で始まるファイルを /etc/rc3 は、実行レベルを 3 に移行させるために 1 ) /etc/inittab を読む /etc/inittab のなかで、実行レベルと同し工ントリを もっプロセスが起動される。 2 ) 実行レベルが 2 なので /etc/rc2 が実行される /etc/rc2 は、 /etc/rc2. d の下の K で始まるファイル に stop を / etc / rc2. d の下の S で始まるファイルに start を引数として与えて実行する。 3 ) S 、 K で始まるファイルは / etc / init. d のファイルを 実行する たとえば、 /etc/rc2. d/S40nfs は /etc/init. d/nfs を S73RMnff)FILES UNIX MAGAZINE 1991.8
表ー NFS のマウント・オプション 読み書き可能でマウントする て 0 noautO bg ret ry= 〃 soft hard intr rSIZe=n WSIZe=n timeo=n 読出し専用でマウントする setuid ビットがセットされたファイルの実行を許す setuid ピットがセットされたファイルの実行を禁止する mount -a でマウントしない マウントが失敗した場合、リトライを〃回おこなう サーバーが応答しない場合、エラーを返す hard のとき、リトライをキーポードから中止できるようにする バーが応答しない場合、応答があるまでリトライする マウントが失敗した場合、リトライをフォアグラウンドでおこなう マウントが失敗した場合、リトライをバックグラウンドでおこなう データの再送回数を〃にする タイムアウトをれ / 10 秒にする 書込み時のバッフアサイズをれバイトにする 読出し時のバッフアサイズをれバイトにする /dev/sdOa /dev/sdOh /dev/sdOe /dev/sdOd /dev/sdOf れ /export 4 2 /tmp /home /usr monkey00 : /home/monkey00 /home/monkey00 monkey02 : /home/monkey02 monkeyOO : /usr/local /etc/fstab ファイルは、次のように記述します。 4.2 /home/monkey02 / Ⅱ s ツ 10C 訌 1 1 nfs nfs nfs rw,hard,intr,bg rw,hard, intr,bg ro,hard,intr,bg 0 0 0 0 0 0 五ル s. 襯市 cto e 0 カ Pass 万な ) 襯は NFS の場合、、、 ( ホスト名 ) : ( パス名 ) 〃の かたちで指定し、市はマウントするディレクトリ のパス名を指定しますにのマウントする場所を、、マウント ポイント〃などと呼びます ) 。 e はファイルシステムの種 類ですが、 NFS の場合には、、 nfs" を指定します。の はマウントする際のオプションです。数多くのオプション が用意されていますが、おもなものを表 1 にまとめておき ます。 eq はダンプの間隔 ( 日数 ) 、 pass は fsck の順番で すが、 NFS の場合は両方とも 0 にしておきます。また、 # で始まる行はコメントとみなされます。 マニュアルの mount や fstab の項を読めば分かります が、マウントのオプションは表 1 に示したもの以外にもた くさんあります。これらのオプションのなかで、とくに注 意が必要なものを挙げておきましよう。 ・ rw ? それとも ro ? read-only でマウントするのか、はたまた読み書き可能 48 にするのかは悩むところです。たとえはホームディレクト リなどは書込みができなけれは話になりませんが、マニュ アルなどは read ー only でもかまわないでしよう。基本的に は、マウントしたディレクトリ上で作業するかどうかを基 準にすれはよいのですが、なるべく ro にしておいたはう が無用のトラブルを防ぐことができます。ただし、サー ー側が ro でェクスポートしていれは、クライアントも ro でしかマウントできません ()w でマウントしようとする と警告メッセージが表示され、実際には ro でマウントさ れます ) 。 ・ soft? それとも hard? soft の場合を、、ソフトマウント′′、 hard の場合を、一 ドマウンドと呼びます。 NFS ではサーバーからの応答がないとクライアントは 何度か要求を繰り返しますが、ソフトマウントの場合、途 中であきらめてエラーを返します。したがってサーバーが ダウンしていてもクライアントはなんとか動いていますが、 データが失われることがあります。一方、ハードマウント では、サーバーの応答があるまで要求を繰り返すのでデー タは保証されますが、サーバーがダウンすると再び立ち上 UNIX MAGAZINE 1991.8
if [ - て /etc/autanount. conf ] ; then $nfs/autcmount 'head ー 1 /etc/automount. C0社, echo "Starting automounter. fi # Workaround to k1Ck 1アC. mountd [ -x fs / ci 0 ] ; $nfs/rpcinfo -u 'hostname' 皿盟 > /dev/null; 第 e $ & 0 ce 0 ・ # ! /bin/sh リスト 3 K60nfs exit 0 main $ { 1 + ““ } fi ki11 $pidlist then if test "$pidlist" ! = ” done pidlist="$pidlist ps —e ー fO て proc in nfsd biOd pidlist=" " ー 0 nt -v —k -t nfs nfs-stop() { fi mount —a —v —t nfs fi # ! /bin/sh リスト 4 rc2 の例 fi exit 1 echO "Warning: $REALFII. E does not exist" exec "$REAI. FII. E" $ { 1 + " " } else then if [ -f "$REAI. FILE" ] REALFII. E="/etc/init. d/nfs" # /etc/init. d. # make your modifications. DO not change the file in # opration, copy the /etc/init. d file on top 0f this file and # If you vant tO make a special 10Ca1 version Of this # This script executes a correspondlng script in /etc/init. d. "Run Commands" executed when the system is changing t0 init state 2 , traditionally called "multi¯user". # N01 ・ Any shells executed by the for—loops should return: 2 十 : catastrophic error, don't continue 1 bad/irregular usage 0 : Ⅱ 01 a1 execution . /etc/TIMEZONE Pickup start-up packages f0 て mounts, daanons' set ( ho —rc then echO systan is comxng up. P1ease wait. ' BWT=yes etc . if [ —f /etc/rc. d/PRBERVE ] # historical segrent for vi and then mv /etc/rc. /etc/init. d /etc/init. d/PRESmE /etc/rc2. d/S02PB.æmE fi 40 UNIX MAGAZINE 1991.8
ワークステーションのおと一の 2. NFS を通して 4.01R に時刻の設定が依頼される。 NFS そこで、 NFS を使ってどのように時刻を設定してい るカ躱ってみます。簡単に「探る」といっても、ふつ うはかなりたいへんです。私たちの場合、たまたまプ ロトコル・アナライサがあったので、これで NFS の バケットの中身を直接覗いてみました。すると、 Set File Attribute という手続きを使って設定している ことがわかりました。これは、 NFS サーバーに対して 次のような構造体を送り、ファイルのモードやアクセ ス日該リを設定しているようです。 struct sattrargs { fhandle file , sattr attributes ; コマンドを実行したときに、そのコマンドが発行し たシステムコールやシグナルを表示してくれるのです。 論より証拠、実際に使ってみましよう。実列を次ペー ジの図 1 に挙げます。 この図の見方ですが、最初の行を例にとってみます。 open ("/usr/lib/ld. so", 0 , 03 ) = 3 これは、次のように読みます。 三→ ~ ー。 0000 ~ 。 0 、 フラグ 0 、つまり read-only で open すると、 ディスクリプタ 3 か返ってきた 実行例の前半は共有ライプラリの処理をしています。 touch の処理をおこなっているのは、 stat ("FILE", 0X4658 ) 0 access ("FILE", 06 ) 0 utimes ("FILE", 0 ) 0 の部分です。たぶん次のようなことをしているのではな いかと思われます。 1. stat() で、ファイルの情報を取り出します。 2. access() の引数に 6 を与えているので (man の ac- このファイルに対して読み書きができ : 参 . 照 ) 、 ce,SS ラ るかどうかを調べているようです。 0 が返ってきて いるので、読み書きができます。 3. utimes で、そのファイルがアクセス / 変更された時 刻を設定しています。 man utimes で見ると、次のようになっています。 int utimes(file, tvp) char *file ; struct timeval *tvp , modification sets the access and utimes times of the file named by file. If tvp is NULL, the access and modification times are set to the current time. touch は、時間をえる構造体へのポインタに NULL を設定して、ファイルのアクセス / 変更された 時刻を現在の時刻に設定しようとしているようです。 どのように touch がおこなわれるか整理してみま す。ここでは NFS を使っていますから、次のように なります。 1. SunOS 側で utimes ("FILE", 0 ) がおこなわれ る。 struct sattr int mode ; unsigned int uid; unslgned unsigned int gid; unsigned int Size ; timeval atime ; timeval mtime ; 今回の場合、この構造体の時間に関係するメンバー mtime には、現在の時刻は入っておらす、つねに 定の値 (Magic Number) が入っていることがわかり ました。これは推測ですが、 4.01R は、この Magic Number をうまく処理できず、今回のような事態が発 生したと思われます。 原因はなんとはなしに分かったような気もしますが、 逆に、なぜ、 SunOS をクライアントにしたときだけ、 このようなことか起こるのでしようか ? ほかの言算機 でも、同しように t 。 uch していれは、つまり、 touch のなかで utimes ("FILE" , のがおこなわれていれ ば、同じ現象カ起こるはずです。 LUNA の UniOS-B の man がヒントとなりまし た。 man touch としてみると、 116 UNIX MAGAZINE 1991.8