最新のハードウェアやソフトウェアにかんするニュースもいいけれど、「事件は枯れたシステムが稼働する現場で起こってるんだ」と現場ですぐに役立つ知識を欲するあなたへ朗報。情報システム部門の頼れる味方、UNIX処方箋が帰ってきた。
現在、SolarisのNFSサーバによってファイル共有を行っています。サーバマシンでは別のサービスも提供しているので、ネットワークの帯域をあまり使用したくないのですが、何かよい方法はあるでしょうか?
クライアント側でCacheFSマウントを利用するとよいでしょう。これは、NFSサーバで公開されている内容のキャッシュファイルをクライアント側に作成することで、NFSサーバへのファイル要求の頻度を減らすものです。
キャッシュファイルを使用した場合、通常のNFSマウントよりもファイルへのアクセス時間が短くなるというメリットがあります。例えば、NFSサーバ/クライアントともにSPARCstation 5を利用した環境(10BASET)において、10Mバイトと100Mバイトのファイル転送を3回行った平均時間は表1のとおりです。
キャッシュファイルの利用 | 10Mバイトの転送時間 | 100Mバイトの転送時間 |
---|---|---|
○ | 5.63 | 66.03 |
× | 10.30 | 108.26 |
ただし、CacheFSマウントなど、通常とは異なる作業が必要になるというデメリットもあります。これは、/etc/rc2.d以下に起動スクリプトを作成し、システム起動時に自動的にCacheFSマウントさせればよいでしょう。
なお、キャッシュファイルを利用した場合、同じ領域を複数のユーザーがマウントすると、ファイルの整合性が取れなくなるケースがあるので注意してください。
表2の環境を例に取り上げて、キャッシュファイルの利用手順を解説しておきます。
NFSサーバ | server |
---|---|
NFSクライアント | client |
サーバで公開する共有領域 | /data_server |
クライアントのマウントポイント | /data_client |
キャッシュファイル | /cache/cache_file |
まずは、クライアント上にキャッシュファイルを作成します。キャッシュファイルの作成は、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
システム起動時に自動的にマウントさせるには、この実行内容*を/etc/rc2.d/S99nfsmountファイルなどに書き込み、実行属性を与えておきます。
# chmod +x /etc/rc2.d/S99nfsmount
キャッシュファイルを利用する場合、データの整合性に注意する必要があります。標準状態でも自動で定期的にチェックされますが、これを手動でチェックしたい場合は、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
項目 | 意味 |
---|---|
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(ファイルシステム名) | |
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が削除されている
Copyright © ITmedia, Inc. All Rights Reserved.