28 NFS共有ファイルシステム #
「ネットワークファイルシステム」(「NFS」)は、ローカルファイルへのアクセスと非常によく似たサーバ上のファイルにアクセスできるプロトコルです。
28.1 概要 #
ネットワークファイルシステム(NFS)は、標準化された、実証済みで幅広くサポートされているネットワークプロトコルであり、ファイルを別々のホスト間で共有することができます。
ネットワーク情報サービス(NIS)は、ネットワーク内で一元的なユーザ管理を行うために使用できます。NFSとNISを組み合わせることで、ネットワーク内のアクセス制御にファイルとディレクトリのパーミッションを使用できます。NFSをNISと連携して使用すると、ネットワークをユーザに対して透過的にすることができます。
デフォルト設定では、NFSはネットワークを完全に信頼しているので、信頼されたネットワークに接続されているマシンもすべて信頼します。NFSサーバが信頼するネットワークに物理的にアクセスできるコンピュータ上で管理者特権を持つユーザは、そのサーバが提供するファイルにアクセスできます。
多くの場合、このレベルのセキュリティは完全に満足のいくものであり(信頼されているネットワークが本当にプライベートである場合など)、しばしば単一のキャビネットや機械室に合わせてローカライズされており、不正なアクセスは不可能です。他のケースでは、1つのサブネット全体を1つの単位として信頼する必要性が制約となっており、よりきめの細かい信頼が求められます。これらのケースにおける必要性を満たすために、NFSはKerberosインフラストラクチャを使用して、さまざまなセキュリティレベルをサポートしています。Kerberosには、デフォルトで使用されるNFSv4が必要です。詳細については、Chapter 6, Network Authentication with Kerberosを参照してください。
以下の用語は、YaSTモジュールで使用されています。
- エクスポート
NFSサーバによってエクスポートされ、クライアントがシステムに統合できるディレクトリ。
- NFSクライアント
NFSクライアントは、ネットワークファイルシステムプロトコルを介してNFSサーバからのNFSサービスを使用するシステムです。TCP/IPプロトコルはLinuxカーネルにすでに統合されており、追加ソフトウェアをインストールする必要はありません。
- NFSサーバ
NFSサーバは、NFSサービスをクライアントに提供します。実行中のサーバは、次のデーモンに依存します。
nfsd
(ワーカ)、idmapd
(NFSv4でのIDと名前のマッピング、特定のシナリオでのみ必要)、statd
(ファイルのロック)、およびmountd
(マウント要求)。- NFSv3
NFSv3はバージョン3の実装で、クライアント認証をサポートする「古い」ステートレスなNFSです。
- NFSv4
NFSv4は、Kerberosによるセキュアなユーザ認証をサポートする新しいバージョン4の実装です。NFSv4で必要なポートは1つのみであるため、NFSv3よりもファイアウォール環境に適しています。
プロトコルはtools.ietf.orgで指定されています。
- pNFS
パラレル NFS。NFSv4のプロトコル拡張。 任意のpNFSクライアントは、NFSサーバ上のデータに直接アクセスできます。
原則として、すべてのエクスポートはIPアドレスのみを使用して実行できます。タイムアウトを回避するには、機能するDNSシステムが必要です。mountdデーモンは逆引きを行うので、少なくともログ目的でDNSは必要です。
28.2 NFSサーバのインストール #
NFSサーバは、デフォルトインストールには含まれません。YaSTを使用してNFSサーバをインストールするには、
› の順に選択し、 を選択して、 セクションで オプションを有効にします。 をクリックして、必要なパッケージをインストールします。NIS同様、NFSはクライアント/サーバシステムです。ただし、ファイルシステムをネットワーク経由で提供し(エクスポート)、同時に他のホストからファイルシステムをマウントすることができます(インポート)。
NFSボリュームのエクスポート元サーバへのローカルでのマウントは、SUSE Linux Enterprise Serverではサポートされていません。
28.3 NFSサーバの設定 #
NFSサーバの設定は、YaSTを使用するか、または手動で完了できます。認証のため、NFSをKerberosと組み合わせることもできます。
28.3.1 YaSTによるファイルシステムのエクスポート #
YaSTを使用して、ネットワーク上のホストをNFSサーバにすることができます。NFSサーバとは、アクセスを許可されたすべてのホスト、またはグループのすべてのメンバーに、ディレクトリやファイルをエクスポートするサーバのことです。これにより、サーバは、ホストごとにアプリケーションをローカルインストールせずにアプリケーションを提供することもできます。
そのようなサーバをセットアップするには、次の手順に従います。
YaSTを起動し、図28.1「NFSサーバ設定ツール」を参照してください)。追加のソフトウェアをインストールするよう求められることがあります。
› の順に選択します(図 28.1: NFSサーバ設定ツール #システム(SuSEfirewall2)でファイアウォールが有効になっている場合は、
をオンにします。YaSTは、nfs
サービスを有効にすることによってNFSサーバの設定を適用します。注記: NFSv2を参照してください。
を選択するかどうかを決定します。NFSv4を無効にした場合、YaSTでサポートされるのはNFSv3のみになります。NFSv2の有効化の詳細については、NFSv4を選択した場合は、追加で適切なNFSv4ドメイン名を入力します。このパラメータは、Kerberosの設定に必要な
idmapd
デーモンによって使用されるか、クライアントが数字のユーザ名を処理できない場合に使用されます。idmapd
を実行しない場合、または特に必要のない場合は、そのままlocaldomain
(デフォルト)を使用してください。idmapd
デーモンの詳細については、/etc/idmapd.conf
を参照してください。
サーバに安全にアクセスするには、
をクリックします。この手順の前提条件として、ドメインにKerberosをインストールし、サーバとクライアントの両方でKerberosを有効にしておく必要があります。 をクリックして、次の設定ダイアログに進みます。ディレクトリをエクスポートするには、ダイアログの上半分にある
をクリックします。許可されるホストをまだ設定していない場合は、自動的に別のダイアログが表示されるので、クライアント情報およびオプションを入力します。ホストを示すワイルドカードを入力します(通常はデフォルト設定のまま使用できます)。
4種類の方法でホストを指定することができます。1台のホスト(名前またはIPアドレス)(single host)、ネットグループ( netgroups)、ワイルドカード(すべてのコンピュータがサーバにアクセスできることを示す
*
など)( wild cards)、およびIPネットワーク(IP networks)です。これらのオプションの詳細については、
exports
のマニュアルページを参照してください。
28.3.2 ファイルシステムの手動エクスポート #
NFSエクスポートサービスの環境設定ファイルは、/etc/exports
と/etc/sysconfig/nfs
です。Kerberized NFSを使用したNFSv4サーバ設定に必要な場合、またはクライアントが数字のユーザ名を処理できない場合は、これらのファイル以外に/etc/idmapd.conf
も必要です。
サービスを起動または再起動するには、systemctl restart nfsserver
コマンドを実行します。これにより、NFSサーバで必要なRPCポートマッパも再起動されます。
NFSサーバがブート時に常に起動するようにするには、sudo systemctl enable nfsserver
を実行します。
NFSv4は、SUSE Linux Enterprise Serverで利用できる最新版のNFSプロトコルです。NFSv3と同じ方法で、NFSv4でのエクスポート用にディレクトリを設定できるようになりました。
SUSE Linux Enterprise Server 11では、/etc/exports
のバインドマウントが必須でした。これは引き続きサポートされていますが、非推奨になりました。
/etc/exports
/etc/exports
ファイルには、エントリのリストが含まれています。各エントリはそれぞれ共有するディレクトリと共有方法を示します。/etc/exports
中の一般的なエントリは、次の項目から成り立っています。/SHARED/DIRECTORY HOST(OPTION_LIST)
たとえば、次のような指定内容です。
/export/data 192.168.1.2(rw,sync)
ここでは、許可されたクライアントを識別するためにIPアドレス
192.168.1.2
が使われています。ホスト名、ホストを表すワイルドカード、または(*.abc.com
や*
など)ネットグループ(@my-hosts
)を使用できます。すべてのオプションとそれらの意味の詳細については、
exports
のマニュアルページを参照してください(man exports
)。NFSサーバの実行中に
/etc/exports
を変更した場合、変更を有効にするには、sudo systemctl restart nfsserver
を実行してサーバを再起動する必要があります。/etc/sysconfig/nfs
/etc/sysconfig/nfs
ファイルには、NFSv4サーバデーモンの動作を決定する小数のパラメータが含まれています。NFS4_SUPPORT
パラメータをyes
に設定することが重要です(デフォルトの設定)。NFS4_SUPPORT
は、NFSサーバがNFSv4エクスポートとクライアントをサポートするかどうかを決定します。NFSサーバの実行中に
/etc/sysconfig/nfs
を変更した場合、変更を有効にするには、sudo systemctl restart nfsserver
を実行してサーバを再起動する必要があります。ヒント: マウントオプションSUSE Linux Enterprise Server 11では、
/etc/exports
の--bind
マウントが必須でした。これは引き続きサポートされていますが、非推奨になりました。NFSv3と同じ方法で、NFSv4でのエクスポート用にディレクトリを設定できるようになりました。注記: NFSv2NFSクライアントがまだNFSv2に依存している場合は、サーバの
/etc/sysconfig/nfs
に次のように設定してNFSv2を有効にします。NFSD_OPTIONS="-V2" MOUNTD_OPTIONS="-V2"
サービスを再起動した後で、次のコマンドを実行して、バージョン2が使用可能かどうかを確認します。
tux >
cat /proc/fs/nfsd/versions +2 +3 +4 +4.1 -4.2/etc/idmapd.conf
SLE 12 SP1以降では、
idmapd
デーモンは、Kerberos認証を使用する場合、またはクライアントが数字のユーザ名を処理できない場合にのみ必要です。Linuxクライアントは、Linuxカーネル2.6.39から数字のユーザ名を処理できるようになりました。idmapd
デーモンは、NFSv4からサーバへの要求に対して名前とIDのマッピングを行い、クライアントに応答します。必要に応じて、
idmapd
をNFSv4サーバ上で実行する必要があります。クライアントの名前とIDのマッピングは、nfsidmap
によって行われます。これはパッケージ nfs-clientで提供されます。NFSを使ってファイルシステムを共有するマシン間では、ユーザへのユーザ名とID (UID)の割り当てには同じ方法を使用してください。そのためには、NIS、LDAP、または他の同一ドメイン認証機構を利用することができます。
/etc/idmapd.conf
ファイルのDomain
パラメータは、クライアントとサーバの両方に対して同じ値に設定する必要があります。確信のない場合には、クライアントとサーバの両方のファイルで、localdomain
をそのまま使用してください。環境設定ファイルの例を次に示します。[General] Verbosity = 0 Pipefs-Directory = /var/lib/nfs/rpc_pipefs Domain = localdomain [Mapping] Nobody-User = nobody Nobody-Group = nobody
idmapd
デーモンを起動するため、systemctl start nfs-idmapd
を実行します。デーモンの実行中に/etc/idmapd.conf
を変更した場合、変更を有効にするには、systemctl start nfs-idmapd
を実行してデーモンを再起動する必要があります。詳細については、
idmapd
およびidmapd.conf
のマニュアルページを参照してください(man idmapd
およびman idmapd.conf
)。
28.3.3 NFSでのKerberosの使用 #
NFSでKerberos認証を使用するには、Generic Security Services (GSS)を有効にする必要があります。最初のYaST NFSサーバのダイアログで、
を選択します。ただし、この機能を使用するには、機能するKerberosサーバが必要です。YaSTはKerberosサーバの設定は行いません。その提供機能を使用するだけです。YaST環境設定に加えて、Kerberos認証も使用する場合は、NFS設定を実行する前に、少なくとも次の手順を完了してください。サーバとクライアントの両方が、同じKerberosドメインにあることを確認します。つまり、クライアントとサーバが同じKDC(Key Distribution Center)サーバにアクセスし、
krb5.keytab
ファイル(the default location on any machine is/etc/krb5.keytab
)を共有していなければなりません。Kerberosの詳細については、Chapter 6, Network Authentication with Kerberosを参照してください。クライアントで
systemctl start rpc-gssd.service
コマンドを実行して、gssdサービスを起動します。サーバで
systemctl start rpc-svcgssd.service
コマンドを実行して、svcgssdサービスを起動します。
Kerberos認証でも、サーバでidmapd
デーモンが実行されている必要があります。詳細については、/etc/idmapd.conf
を参照してください。
Kerberos化されたNFSの設定の詳細については、28.5項 「詳細情報」のリンクを参照してください。
28.4 クライアントの設定 #
ホストをNFSクライアントとして設定する場合、他のソフトウェアをインストールする必要はありません。必要なすべてのパッケージは、デフォルトでインストールされます。
28.4.1 YaSTによるファイルシステムのインポート #
認証されたユーザは、YaST NFSクライアントモジュールを使用して、NFSディレクトリをNFSサーバからローカルファイルツリーにマウントできます。次の手順に従います。
YaST NFSクライアントモジュールを起動します。
NFSv4を使用する場合は、
タブで を選択します。また、 に、NFSv4サーバが使用する値と同じ値が入力されている必要があります。デフォルトドメインは、localdomain
です。NFSでKerberos認証を使用するには、GSSセキュリティを有効にする必要があります。
を選択します。ファイアウォールを使用しており、リモートコンピュータのサービスにアクセスを許可する場合は、
タブで をオンにします。チェックボックスの下には、ファイアウォールのステータスが表示されます。
設定は/etc/fstab
に書かれ、指定されたファイルシステムがマウントされます。後でYaST設定クライアントを起動した時に、このファイルから既存の設定が取得されます。
ルートパーティションがネットワーク経由でNFS共有としてマウントされている(ディスクレス)システムでは、NFS共有にアクセス可能なネットワークデバイスの設定を慎重に行う必要があります。
システムの停止、システムの再起動時のデフォルトの処理順序は、ネットワーク接続を切断してから、ルートパーティションをアンマウントするという順序になります。NFSルートの場合、この順序では問題が発生します。NFS共有とのネットワーク接続が先に無効にされているため、ルートパーティションを正常にアンマウントできないためです。システムが該当するネットワークデバイスを無効にしないようにするには、[network device configuration(ネットワークデバイスの設定)]タブ(16.4.1.2.5項 「ネットワークデバイスの有効化」を参照)を開いて、 ペインの を選択します。
28.4.2 ファイルシステムの手動インポート #
NFSサーバからファイルシステムを手動でインポートするには、RPCポートマッパーが実行していることが前提条件です。RPCポートマッパーを適切に起動するのはnfs
サービスです。そのため、root
ユーザとして「systemctl start nfs
」を入力し、RPCポートマッパーを起動します。次に、mount
を使用して、ローカルパーティションと同様に、リモートファイルシステムをファイルシステムにマウントできます。
tux >
sudo mount HOST:REMOTE-PATHLOCAL-PATH
たとえば、nfs.example.com
マシンからユーザディレクトリをインポートするには、次の構文を使用します。
tux >
sudo mount nfs.example.com:/home /home
28.4.2.1 自動マウントサービスの使用 #
autofsデーモンを使用して、リモートファイルシステムを自動的にマウントすることができます。/etc/auto.master
ファイルに次のエントリを追加します。
/nfsmounts /etc/auto.nfs
これで、/nfsmounts
ディレクトリがクライアント上のすべてのNFSマウントのルートディレクトリの役割を果たすようになります(auto.nfs
ファイルが正しく設定されている場合)。ここでは、auto.nfs
という名前を使用しましたが、任意の名前を選択することができます。auto.nfs
で、次のようにしてすべてのNFSマウントのエントリを追加します。
localdata -fstype=nfs server1:/data nfs4mount -fstype=nfs4 server2:/
root
ユーザとしてsystemctl start autofs
を実行して設定を有効にします。この例で、server1
の/data
ディレクトリの/nfsmounts/localdata
はNFSでマウントされ、server2
の/nfsmounts/nfs4mount
はNFSv4でマウントされます。
autofsサービスの実行中に/etc/auto.master
ファイルを編集した場合、変更を反映するには、systemctl restart autofs
で自動マウント機能を再起動する必要があります。
28.4.2.2 /etc/fstab
の手動編集 #
/etc/fstab
内の典型的なNFSv3マウントエントリは、次のようになります:
nfs.example.com:/data /local/path nfs rw,noauto 0 0
NFSv4マウントの場合は、3番目の列でnfs
の代わりにnfs4
を使用します。
nfs.example.com:/data /local/pathv4 nfs4 rw,noauto 0 0
noauto
オプションを使用すると、起動時にファイルシステムが自動マウントされません。対応するファイルシステムを手動でマウントする場合は、マウントポイントのみを指定してmountコマンドを短くできます。
tux >
sudo mount /local/path
ただし、noauto
オプションを入力しないと、起動時に、システムのinitスクリプトによって、それらのファイルシステムがマウントされます。
28.4.3 パラレルNFS(pNFS) #
NFSは、1980年代に開発された、もっとも古いプロトコルの1つです。そのため、小さなファイルを共有したい場合は、通常、NFSで十分です。しかし、大きなファイルを送信したい場合や多数のクライアントがデータにアクセスしたい場合は、NFSサーバがボトルネックとなり、システムのパフォーマンスに重大な影響を及ぼします。これは、ファイルのサイズが急速に大きくなっているのに対し、Ethernetの相対速度が追い付いていないためです。
通常のNFSサーバにファイルを要求すると、サーバはファイルのメタデータを検索し、すべてのデータを収集して、ネットワークを介してクライアントに送信します。しかし、ファイルが小さくても大きくてもパフォーマンスのボトルネックが問題になります。
小さいファイルでは、メタデータの収集に時間がかかる.
大きいファイルでは、サーバからクライアントへのデータ送信に時間がかかる。
pNFS(パラレルNFS)は、ファイルシステムメタデータをデータの場所から分離することによって、この制限を克服します。このため、pNFSには2種類のサーバが必要です。
データ以外のすべてのトラフィックを扱う「メタデータ」または「制御サーバ」
データを保持する1つ以上の「ストレージサーバ」
メタデータサーバとストレージサーバによって、単一の論理NFSサーバが構成されます。クライアントが読み込みまたは書き出しを行う場合、メタデータサーバがNFSv4クライアントに対して、ファイルのチャンクにアクセスするにはどのストレージサーバを使用すればよいかを指示します。クライアントはサーバのデータに直接アクセスできます。
SUSE Linux Enterprise Serverはクライアント側でのみpNFSをサポートします。
28.4.3.1 YaSTを使用したpNFSクライアントの設定 #
手順28.2「NFSディレクトリのインポート」に従って進めます。ただし、 チェックボックスをクリックし、オプションで をクリックします。YaSTが必要な手順をすべて実行し、必要なすべてのオプションを/etc/exports
ファイルに書き込みます。
28.4.3.2 pNFSクライアントの手動設定 #
28.4.2項 「ファイルシステムの手動インポート」を参照して開始します。ほとんどの設定はNFSv4サーバによって行われます。pNFSを使用する場合に異なるのは、minorversion
オプションおよびメタデータサーバMDS_SERVERをmount
コマンドに追加することだけです。
tux >
sudo mount -t nfs4 -o minorversion=1 MDS_SERVER MOUNTPOINT
デバッグを支援するために、/proc
ファイルシステムの値を変更します。
tux >
sudo echo 32767 > /proc/sys/sunrpc/nfsd_debugtux >
sudo echo 32767 > /proc/sys/sunrpc/nfs_debug
28.5 詳細情報 #
NFSサーバとクライアントの設定情報は、exports
、nfs
、およびmount
のマニュアルページのほか、/usr/share/doc/packages/nfsidmap/README
からも入手できます。オンラインドキュメンテーションについては、次のWebサイトを参照してください。
詳細な技術ヘルプについては、SourceForgeを参照してください。
NFSでのKerberosの設定方法は、NFS Version 4 Open Source Reference Implementationを参照してください。
Linux NFSv4には、NFSv4に関するFAQが用意されています。