キャッシュファイルを利用したNFSマウントUNIX処方箋

最新のハードウェアやソフトウェアにかんするニュースもいいけれど、「事件は枯れたシステムが稼働する現場で起こってるんだ」と現場ですぐに役立つ知識を欲するあなたへ朗報。情報システム部門の頼れる味方、UNIX処方箋が帰ってきた。

» 2007年08月23日 01時22分 公開
[ITmedia]

現在、SolarisのNFSサーバによってファイル共有を行っています。サーバマシンでは別のサービスも提供しているので、ネットワークの帯域をあまり使用したくないのですが、何かよい方法はあるでしょうか?


クライアント側でCacheFSマウントを利用するとよいでしょう。これは、NFSサーバで公開されている内容のキャッシュファイルをクライアント側に作成することで、NFSサーバへのファイル要求の頻度を減らすものです。

CacheFSのメリット/デメリット

 キャッシュファイルを使用した場合、通常のNFSマウントよりもファイルへのアクセス時間が短くなるというメリットがあります。例えば、NFSサーバ/クライアントともにSPARCstation 5を利用した環境(10BASET)において、10Mバイトと100Mバイトのファイル転送を3回行った平均時間は表1のとおりです。

キャッシュファイルの利用 10Mバイトの転送時間 100Mバイトの転送時間
5.63 66.03
× 10.30 108.26
表1 通常のNFSとキャッシュファイルを利用した場合の平均転送時間(秒)

 ただし、CacheFSマウントなど、通常とは異なる作業が必要になるというデメリットもあります。これは、/etc/rc2.d以下に起動スクリプトを作成し、システム起動時に自動的にCacheFSマウントさせればよいでしょう。

 なお、キャッシュファイルを利用した場合、同じ領域を複数のユーザーがマウントすると、ファイルの整合性が取れなくなるケースがあるので注意してください。

キャッシュファイルの利用手順

 表2の環境を例に取り上げて、キャッシュファイルの利用手順を解説しておきます。

NFSサーバ server
NFSクライアント client
サーバで公開する共有領域 /data_server
クライアントのマウントポイント /data_client
キャッシュファイル /cache/cache_file
表2 NFSの環境

キャッシュファイルの作成とマウント

まずは、クライアント上にキャッシュファイルを作成します。キャッシュファイルの作成は、cfsadminコマンドの「-c」オプションを使用します。


# mkdir /cache
# cfsadmin -c /cache/cache_file

キャッシュファイルが作成できたら、

mount -F cachefs -o backfstype=nfs,cachedir=<キャッシュファイル> <NFSサーバ>:<共有リソース> <マウントポイント>


という書式によって、CacheFSマウントを行います。


# mount -F cachefs -o backfstype=nfs,cachedir=/cache/cache_file server:/data_server /data_client

 なお、このままでは整合性のチェック(後述)を手動で実行できないので、必要であれば「demandconst」オプションを指定するとよいでしょう(実行例1)


# mount -F cachefs -o backfstype=nfs,cachedir=/cache/cache_file,demandconst server:/data_server /data_client

実行例1 「demandconst」オプションを指定したCacheFSマウント

 システム起動時に自動的にマウントさせるには、この実行内容*を/etc/rc2.d/S99nfsmountファイルなどに書き込み、実行属性を与えておきます。


# chmod +x /etc/rc2.d/S99nfsmount

注 mountコマンドは絶対パス(/usr/sbin/mount)で指定すること

整合性のチェックとキャッシュ情報の表示

 キャッシュファイルを利用する場合、データの整合性に注意する必要があります。標準状態でも自動で定期的にチェックされますが、これを手動でチェックしたい場合は、cfsadminコマンドの「-s」オプションでマウントポイントを指定します。


# cfsadmin -s /data_client

 キャッシュファイル内の情報は、cfsadminコマンドの「-l」オプションによって表示されます(実行例2)。出力される内容については、表3を参照してください。


# cfsadmin -l /cache/cache_file
cfsadmin: list cache FS information
maxblocks 90%
minblocks 0%
threshblocks 85%
maxfiles 90%
minfiles 0%
threshfiles 85%
maxfilesize 3MB
server:_data_server:_data_client

実行例2 「-l」オプションによるキャッシュ情報の表示
項目 意味
maxblocks CacheFSが使用可能な最大領域。単位はファイルシステムの総ブロック数に対する%(デフォルトは90)
minblocks CacheFSが(内部制御メカニズムによる制限なしに)使用可能な最小領域。単位はファイルシステムの総ブロック数に対する%(デフォルトは0)
threshblocks 「minblocks」で指定された値に達した後、CacheFSが使用できる最大領域。単位はファイルシステムの総ブロック数に対する%(デフォルトは85)
maxfiles CacheFSが使用可能な最大ファイル数。単位はファイルシステムの総iノード数に対する%(デフォルトは90)
minfiles CacheFSが使用可能な最小ファイル数。単位はファイルシステムの総iノード数に対する%(デフォルトは0)
threshfiles 「minfiles」で指定された値に達した後、CacheFSが使用できる最大ファイル数。単位はファイルシステムの総iノード数に対する%(デフォルトは85)
maxfilesize キャッシュファイルの最大ファイルサイズ。単位はMB(デフォルトは3)
:_<共有領域>:_<マウントポイント> キャッシュID(ファイルシステム名)
表3 統計情報の内容

キャッシュファイルの削除

 CacheFSマウントを解除し、キャッシュファイルが不要になった場合、cfsadminコマンドの「-d」オプションによってキャッシュを削除します。

cfsadmin -d <キャッシュID> <キャッシュファイル>


 <キャッシュID>は、cfsadminコマンドの「-l」オプションで確認可能です。例えば、キャッシュIDがsever:_data_server:_data_clientのキャッシュファイル/cache/cache_fileを削除する場合は、次のように実行します。


# umount /data_client
# cfsadmin -d server:_data_server:_data_client /cache/cache_file

 再度cfsadminコマンドの「-l」オプションを実行し、最終行にあったキャッシュIDがなくなっていることを確認してください(実行例3)


# cfsadmin -l /cache/cache_file
cfsadmin: list cache FS information
maxblocks 90%
minblocks 0%
threshblocks 85%
maxfiles 90%
minfiles 0%
threshfiles 85%
maxfilesize 3MB
# ■ ←キャッシュIDが削除されている

実行例3 キャッシュファイル削除後のキャッシュ情報

関連キーワード

サーバ | UNIX | Solaris


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ