目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Linux Enterprise Serverマニュアル / ストレージ管理ガイド / ネットワークストレージ / NFS共有ファイルシステム
適用項目 SUSE Linux Enterprise Server 15 SP4

19 NFS共有ファイルシステム

ネットワークファイルシステム(NFS)は、ローカルファイルへのアクセスと非常によく似た方法で、サーバ上のファイルにアクセスできるプロトコルです。

SUSE Linux Enterprise Server は、NFS v4.2をインストールし、これにより、スパースファイル、ファイルの事前割り当て、サーバ側のクローンとコピー、アプリケーションデータブロック(ADB)、および必須アクセス制御(MAC)用のラベル付きNFS (クライアントとサーバの両方でMACが必要)のサポートが導入されます。

19.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よりもファイアウォール環境に適しています。

プロトコルはhttps://datatracker.ietf.org/doc/html/rfc3530で指定されています。

pNFS

パラレル NFS。NFSv4のプロトコル拡張。任意のpNFSクライアントは、NFSサーバ上のデータに直接アクセスできます。

重要
重要: DNSの必要性

原則として、すべてのエクスポートはIPアドレスのみを使用して実行できます。タイムアウトを回避するには、機能するDNSシステムが必要です。mountdデーモンは逆引きを行うので、少なくともログ目的でDNSは必要です。

19.2 NFSサーバのインストール

NFSサーバは、デフォルトインストールには含まれません。YaSTを使用してNFSサーバをインストールするには、ソフトウェア › ソフトウェア管理の順に選択し、パターンを選択して、Server Fuctions (サーバ機能)セクションでファイルサーバオプションを有効にします。了解をクリックして、必要なパッケージをインストールします。

NIS同様、NFSはクライアント/サーバシステムです。ただし、ファイルシステムをネットワーク経由で提供し(エクスポート)、同時に他のホストからファイルシステムをマウントすることができます(インポート)。

注記
注記: NFSボリュームをエクスポート元サーバにローカルでマウントする

NFSボリュームのエクスポート元サーバへのローカルでのマウントは、SUSE Linux Enterprise Serverではサポートされていません。

19.3 NFSサーバの設定

NFSサーバの設定は、YaSTを使用するか、または手動で完了できます。認証のため、NFSをKerberosと組み合わせることもできます。

19.3.1 YaSTによるファイルシステムのエクスポート

YaSTを使用して、ネットワーク上のホストをNFSサーバにすることができます。NFSサーバとは、アクセスを許可されたすべてのホスト、またはグループのすべてのメンバーに、ディレクトリやファイルをエクスポートするサーバのことです。これにより、サーバは、ホストごとにアプリケーションをローカルインストールせずにアプリケーションを提供することもできます。

そのようなサーバをセットアップするには、次の手順に従います。

手順 19.1: NFSサーバをセットアップする
  1. YaSTを起動し、ネットワークサービス › NFSサーバの順に選択します(図19.1「NFSサーバ設定ツール」を参照してください)。追加のソフトウェアをインストールするよう求められることがあります。

    NFSサーバ設定ツール
    図 19.1: NFSサーバ設定ツール
  2. 開始ラジオボタンをクリックします。

  3. firewalldがシステムでアクティブな場合は、NFS用に個別に設定します(Section 23.4, “firewalldを参照)。YaSTはまだ、firewalldを完全にはサポートしていないため、「ファイアウォールを設定できません」というメッセージを無視して続行します。

  4. NFSv4を有効にするを選択するかどうかを決定します。NFSv4を無効にした場合、YaSTでサポートされるのはNFSv3のみになります。NFSv2の有効化の詳細については、注記: NFSv2を参照してください。

    1. NFSv4を選択した場合は、追加で適切なNFSv4ドメイン名を入力します。このパラメータは、Kerberosの設定に必要なidmapdデーモンによって使用されるか、クライアントが数字のユーザ名を処理できない場合に使用されます。idmapdを実行しない場合、または特に必要のない場合は、そのままlocaldomain(デフォルト)を使用してください。idmapdデーモンの詳細については、/etc/idmapd.confを参照してください。

  5. サーバに安全にアクセスするには、GSSセキュリティを有効にするをクリックします。この手順の前提条件として、ドメインにKerberosをインストールし、サーバとクライアントの両方でKerberosを有効にしておく必要があります。 [次へ]をクリックして、次の設定ダイアログに進みます。

  6. ディレクトリをエクスポートするには、ダイアログの上半分にあるディレクトリの追加をクリックします。

  7. 許可されるホストをまだ設定していない場合は、自動的に別のダイアログが表示されるので、クライアント情報およびオプションを入力します。ホストを示すワイルドカードを入力します(通常はデフォルト設定のまま使用できます)。

    4種類の方法でホストを指定することができます。1台のホスト(名前またはIPアドレス)(single host)、ネットグループ( netgroups)、ワイルドカード(すべてのコンピュータがサーバにアクセスできることを示す*など)( wild cards)、およびIPネットワーク(IP networks)です。

    これらのオプションの詳細については、exportsのマニュアルページを参照してください。

  8. 完了をクリックして設定を完了します。

19.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

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)を使用できます。

すべてのオプションとそれらの意味の詳細については、/etc/exportsmanページを参照してください: (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でのエクスポート用にディレクトリを設定できるようになりました。

注記
注記: NFSv2

NFSクライアントがまだNFSv2に依存している場合は、サーバの/etc/sysconfig/nfsに次のように設定してNFSv2を有効にします。

NFSD_OPTIONS="-V2"
MOUNTD_OPTIONS="-V2"

サービスを再起動した後で、次のコマンドを実行して、バージョン2が使用可能かどうかを確認します。

> cat /proc/fs/nfsd/versions
+2 +3 +4 +4.1 +4.2
/etc/idmapd.conf

idmapdデーモンは、Kerberos認証を使用する場合、またはクライアントが数字のユーザ名を処理できない場合にのみ必要です。Linuxクライアントは、Linuxカーネル2.6.39から数字のユーザ名を処理できるようになりました。idmapdデーモンは、NFSv4からサーバへの要求に対して名前とIDのマッピングを行い、クライアントに応答します。

必要に応じて、idmapdをNFSv4サーバ上で実行する必要があります。クライアントの名前とIDのマッピングは、パッケージnfs-clientによって提供されるnfsidmapによって行われます。

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)。

19.3.3 NFSでのKerberosの使用

NFSでKerberos認証を使用するには、Generic Security Services (GSS)を有効にする必要があります。最初のYaST NFSサーバのダイアログで、GSSセキュリティを有効にするを選択します。ただし、この機能を使用するには、機能するKerberosサーバが必要です。YaSTはKerberosサーバの設定は行いません。その提供機能を使用するだけです。YaST環境設定に加えて、Kerberos認証も使用するには、NFS設定を実行する前に、少なくとも次の手順を完了してください。

  1. サーバとクライアントの両方が、同じKerberosドメインにあることを確認します。つまり、クライアントとサーバが同じKDC(Key Distribution Center)サーバにアクセスし、krb5.keytabファイル(the default location on any machine is /etc/krb5.keytab)を共有していなければなりません。Kerberosの詳細については、Chapter 6, Network authentication with Kerberosを参照してください。

  2. クライアントでsystemctl start rpc-gssd.serviceコマンドを実行して、gssdサービスを起動します。

  3. サーバでsystemctl start rpc-svcgssd.serviceコマンドを実行して、svcgssdサービスを起動します。

Kerberos認証でも、サーバでidmapdデーモンが実行されている必要があります。詳細については、/etc/idmapd.confを参照してください。

Kerberos化されたNFSの設定の詳細については、19.6項 「詳細情報」のリンクを参照してください。

19.4 クライアントの設定

ホストをNFSクライアントとして設定する場合、他のソフトウェアをインストールする必要はありません。必要なすべてのパッケージは、デフォルトでインストールされます。

19.4.1 YaSTによるファイルシステムのインポート

認証されたユーザは、YaST NFSクライアントモジュールを使用して、NFSディレクトリをNFSサーバからローカルファイルツリーにマウントできます。以下に手順を示します。

手順 19.2: NFSディレクトリのインポート
  1. YaST NFSクライアントモジュールを起動します。

  2. NFS共有タブで追加をクリックします。NFSサーバのホスト名、インポートするディレクトリ、およびこのディレクトリをローカルでマウントするマウントポイントを入力します。

  3. NFSv4を使用する場合は、NFS設定タブでNFSv4を有効にするを選択します。また、NFSv4ドメイン名に、NFSv4サーバが使用する値と同じ値が入力されている必要があります。デフォルトドメインは、localdomainです。

  4. NFSでKerberos認証を使用するには、GSSセキュリティを有効にする必要があります。GSSセキュリティを有効にするを選択します。

  5. ファイアウォールを使用しており、リモートコンピュータのサービスにアクセスを許可する場合は、NFS設定タブでファイアウォールでポートを開くをオンにします。チェックボックスの下には、ファイアウォールのステータスが表示されます。

  6. OKをクリックして変更内容を保存します。

設定は/etc/fstabに書かれ、指定されたファイルシステムがマウントされます。後でYaST設定クライアントを起動した時に、このファイルから既存の設定が取得されます。

ヒント
ヒント: ルートファイルシステムとしてのNFS

ルートパーティションがネットワーク経由でNFS共有としてマウントされている(ディスクレス)システムでは、NFS共有にアクセス可能なネットワークデバイスの設定を慎重に行う必要があります。

システムの停止、システムの再起動時のデフォルトの処理順序は、ネットワーク接続を切断してから、ルートパーティションをアンマウントするという順序になります。NFSルートの場合、この順序では問題が発生します。NFS共有とのネットワーク接続が先に無効にされているため、ルートパーティションを正常にアンマウントできないためです。システムが該当するネットワークデバイスを無効にしないようにするには、[network device configuration(ネットワークデバイスの設定)]タブ(23.4.1.2.5項 「ネットワークデバイスの有効化」を参照)を開いて、デバイスの起動ペインのNFSrootオンを選択します。

19.4.2 ファイルシステムの手動インポート

NFSサーバからファイルシステムを手動でインポートするには、RPCポートマッパーが実行していることが前提条件です。RPCポートマッパーを適切に起動するのはnfsサービスです。そのため、rootユーザとして「systemctl start nfs」を入力し、RPCポートマッパーを起動します。次に、mountを使用して、ローカルパーティションと同様に、リモートファイルシステムをファイルシステムにマウントできます。

> sudo mount HOST:REMOTE-PATHLOCAL-PATH

たとえば、nfs.example.comマシンからユーザディレクトリをインポートするには、次の構文を使用します。

> sudo mount nfs.example.com:/home /home

クライアントがNFSサーバに対して行うTCP接続の数を定義するには、mountコマンドのnconnectオプションを使用できます。1~16の間の任意の数を指定できます。ここで、1はマウントオプションが指定されていない場合のデフォルト値です。

nconnect設定は、特定のNFSサーバへの最初のマウントプロセス中にのみ適用されます。同じクライアントが同じNFSサーバにmountコマンドを実行する場合、すべてのすでに確立されている接続が共有されます。新しい接続は確立されません。nconnect設定を変更するには、特定のNFSサーバへの「すべての」クライアント接続をアンマウントする必要があります。次にnconnectオプションの新しい値を定義できます。

現在有効なnconnectの値は、mountの出力または/proc/mountsファイルで確認できます。マウントオプションに値がない場合は、マウント中にそのオプションは使用されず、デフォルト値の「1」が使用されます。

注記
注記: nconnectによって定義されているものとは異なる接続数

最初のマウント後に接続を閉じたり開いたりすることができるため、実際の接続数は必ずしもnconnectの値と同じである必要はありません。

19.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で自動マウント機能を再起動する必要があります。

19.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コマンドを短くできます。

> sudo mount /local/path
注記
注記: 起動時にマウント

ただし、noautoオプションを入力しないと、起動時に、システムのinitスクリプトによって、それらのファイルシステムがマウントされます。

19.4.3 パラレルNFS(pNFS)

NFSは、1980年代に開発された、もっとも古いプロトコルの1つです。そのため、小さなファイルを共有したい場合は、通常、NFSで十分です。しかし、大きなファイルを送信したい場合や多数のクライアントがデータにアクセスしたい場合は、NFSサーバがボトルネックとなり、システムのパフォーマンスに重大な影響を及ぼします。これはファイルのサイズが急速に大きくなっているのに対し、Ethernetの相対速度が追い付いていないためです。

通常のNFSサーバにファイルを要求すると、サーバはファイルのメタデータを検索し、すべてのデータを収集して、ネットワークを介してクライアントに送信します。しかし、ファイルが小さくても大きくてもパフォーマンスのボトルネックが問題になります。

  • 小さいファイルでは、メタデータの収集に時間がかかる。

  • 大きいファイルでは、サーバからクライアントへのデータ送信に時間がかかる。

pNFS(パラレルNFS)は、ファイルシステムメタデータをデータの場所から分離することによって、この制限を克服します。このため、pNFSには2種類のサーバが必要です。

  • データ以外のすべてのトラフィックを扱う「メタデータ」または「制御サーバ」

  • データを保持する1つ以上の「ストレージサーバ」

メタデータサーバとストレージサーバによって、単一の論理NFSサーバが構成されます。クライアントが読み込みまたは書き出しを行う場合、メタデータサーバがNFSv4クライアントに対して、ファイルのチャンクにアクセスするにはどのストレージサーバを使用すればよいかを指示します。クライアントはサーバのデータに直接アクセスできます。

SUSE Linux Enterprise Serverはクライアント側でのみpNFSをサポートします。

19.4.3.1 YaSTを使用したpNFSクライアントの設定

手順19.2「NFSディレクトリのインポート」に従って進めます。ただし、pNFS (v4.2)チェックボックスをクリックし、オプションでNFSv4共有をクリックします。YaSTが必要な手順をすべて実行し、必要なすべてのオプションを/etc/exportsファイルに書き込みます。

19.4.3.2 pNFSクライアントの手動設定

19.4.2項 「ファイルシステムの手動インポート」を参照して開始します。ほとんどの設定はNFSv4サーバによって行われます。pNFSを使用する場合に異なるのは、minorversionオプションおよびメタデータサーバMDS_SERVERmountコマンドに追加することだけです。

> sudo mount -t nfs4 -o minorversion=1 MDS_SERVER MOUNTPOINT

デバッグを支援するために、/procファイルシステムの値を変更します。

> sudo echo 32767 > /proc/sys/sunrpc/nfsd_debug
> sudo echo 32767 > /proc/sys/sunrpc/nfs_debug

19.5 NFSv4上でのアクセス制御リストの管理

Linuxには、ユーザ、グループ、およびその他(ugo)に対する簡単な読み込み、書き込み、および実行(rwx)の各フラグ以上の、ACL (アクセス制御リスト)の単一標準はありません。よりきめ細かな制御のオプションの1つにDraft POSIX ACLがあります。ただし、これらのACLは、POSIXによって正式に標準化されたことはありません。もう1つは、NFSv4ネットワークファイルシステムの一部として設計されたNFSv4 ACLです。NFSv4 ACLは、Linux上のPOSIXシステムとMicrosoft Windows上のWIN32システム間に適切な互換性を提供することを目的としています。

NFSv4 ACLは、Draft POSIX ACLを正しく実装できるほど十分ではないので、NFSv4クライアントへのACLアクセスのマッピングは試みられていません(setfaclの使用など)。

NFSv4の使用時は、Draft POSIX ACLはエミュレーションでさえ使用できず、NFSv4 ACLを直接使用する必要があります。つまり、setfaclをNFSv3で動作させながら、NFSv4で動作させることはできません。NFSv4 ACLをNFSv4ファイルシステムで使用できるようにするため、SUSE Linux Enterprise Serverでは、次のファイルを含むnfs4-acl-toolsパッケージを提供しています。

  • nfs4-getfacl

  • nfs4-setfacl

  • nfs4-editacl

これらの動作は、NFSv4 ACLを検証および変更するgetfaclおよびsetfaclとほぼ同様です。これらのコマンドは、NFSサーバ上のファイルシステムがNFSv4 ACLを完全にサポートしている場合にのみ有効です。サーバによって課される制限は、クライアントで実行されているこれらのプログラムに影響を与え、ACE (Access Control Entries)の一部の特定の組み合わせが不可能なことがあります。

エクスポート元のNFSサーバにNFSボリュームをローカルにマウントすることはサポートされていません。

その他の情報

詳細については、Introduction to NFSv4 ACLs (http://wiki.linux-nfs.org/wiki/index.php/ACLs#Introduction_to_NFSv4_ACLs)を参照してください。

19.6 詳細情報

NFSサーバとクライアントの設定情報は、exportsnfs、およびmountのマニュアルページのほか、/usr/share/doc/packages/nfsidmap/READMEからも入手できます。オンラインドキュメンテーションについては、次のWebサイトを参照してください。

19.7 NFSトラブルシューティングのための情報の収集

19.7.1 一般的なトラブルシューティング

場合によっては、生成されたエラーメッセージを読み、/var/log/messagesファイルを調べることでNFSの問題を理解することができます。ただし、多くの場合、エラーメッセージや/var/log/messagesで提供される情報は十分に詳しいものではありません。このような場合、NFSのほとんどの問題は、問題の再現中にネットワークパケットをキャプチャすることでよく理解することができます。

問題を明確に定義します。さまざまな方法でシステムをテストし、問題の発生時期を特定して問題を調べます。問題につながる最も簡単なステップを特定します。その後、次の手順で示すように、問題を再現してみます。

手順 19.3: 問題の再現
  1. ネットワークパケットをキャプチャします。Linuxでは、tcpdumpパッケージで提供される、tcpdumpコマンドを使用できます。

    tcpdumpの構文の例は次のとおりです。

    tcpdump -s0 -i eth0 -w /tmp/nfs-demo.cap host x.x.x.x

    ここで、

    s0

    パケットの切り捨てを防止します

    eth0

    パケットが通過するローカルインタフェースの名前に置き換える必要があります。任意の値を使用して、同時にすべてのインタフェースをキャプチャできますが、この属性の使用により、データが劣化したり、分析で混乱が生じる場合がよくあります。

    w

    書き込むキャプチャファイルの名前を指定します。

    x.x.x.x

    NFS接続のもう一方の端のIPアドレスに置き換える必要があります。たとえば、NFSクライアント側でtcpdumpを取得する場合は、NFSサーバのIPアドレスを指定します(その逆でも構いません)。

    注記
    注記

    場合によっては、NFSクライアントまたはNFSサーバのいずれかのデータをキャプチャするだけで十分です。ただし、エンドツウエンドのネットワーク整合性が疑わしい場合は、両方の端でデータをキャプチャする必要がよくあります。

    tcpdumpプロセスをシャットダウンせずに、次のステップに進みます。

  2. (オプション) nfs mountコマンド自体の実行中に問題が発生する場合は、nfs mountコマンドの高詳細度オプション(-vvv)の使用して、より詳細な出力を得ることができます。

  3. (オプション)再現方法のstraceを取得します。straceの再現ステップでは、どのシステムコールがどの時点で行われたかを正確に記録します。この情報を使用して、tcpdump内のどのイベントに焦点を合わせるべきかを詳細に判断することができます。

    たとえば、NFSマウントでコマンドmycommand --paramの実行が失敗したことが分かった場合は、次のコマンドを使用してコマンドをstraceすることができます。

    strace -ttf -s128 -o/tmp/nfs-strace.out mycommand --param

    再現ステップでstraceを取得できない場合は、問題が再現された時刻を記録します。/var/log/messagesログファイルを確認して、問題を特定します。

  4. 問題が再現されたら、CTRLcを押して、端末で実行しているtcpdumpを停止します。straceコマンドによりハングした場合は、straceコマンドも終了します。

  5. パケットトレースとstraceデータの分析経験のある管理者は、/tmp/nfs-demo.cap/tmp/nfs-strace.outでデータを検査できるようになりました。

19.7.2 高度なNFSデバッグ

重要
重要: 高度なデバッグは専門家向けです

次のセクションは、NFSコードを理解している熟練したNFS管理者のみを対象としていることを念頭に置いてください。したがって、19.7.1項 「一般的なトラブルシューティング」に記載されている最初のステップを実行して問題絞り込み、詳細を理解するために必要なデバッグコード(ある場合)の領域を専門家に知らせます。

追加のNFS関連の情報を収集するために有効にすることが可能なデバッグコードのさまざまな領域があります。ただし、デバッグメッセージは非常にわかりにくく、これらのボリュームは非常に大きいため、デバッグコードを使用するとシステムパフォーマンスに影響を及ぼす可能性があります。問題が発生しないようにするためにシステムに大きな影響を及ぼす場合もあります。ほとんどの場合、デバッグコードの出力は必要ありません。また、NFSコードに精通していないユーザにとっては通常は役に立ちません。

19.7.2.1 rpcdebugを使用したデバッグの有効化

rpcdebugツールを使用すると、NFSクライアントとサーバデバッグフラグを設定およびクリアすることができます。rpcdebugツールにSLEでアクセスできない場合は、NFSサーバのnfs-clientあるいはnfs-kernel-serverパッケージからインストールできます。

デバッグフラグを設定するには、次のコマンドを実行します。

rpcdebug -m module -s flags

デバッグフラグをクリアするには、次のコマンドを実行します。

rpcdebug -m module -c flags

ここで、moduleは次のとおりです。

nfsd

NFSサーバコードのデバッグ

nfs

NFSクライアントコードのデバッグ

nlm

NFSクライアントまたはNFSサーバのいずれかでNFS Lock Managerのデバッグを行います。これはNFS v2/v3に該当します。

rpc

NFSクライアントまたはNFSサーバのいずれかでリモートプロシージャコールモジュールのデバッグを行います。

rpcdebugコマンドの詳細な使用法については、マニュアルページを参照してください。

man 8 rpcdebug

19.7.2.2 NFSが依存する他のコードのデバッグを有効化する

NFSアクティビティは、NFSマウントデーモン(pc.mountd)などの他の関連サービスに依存する場合があります。/etc/sysconfig/nfs内で関連サービスのオプションを設定できます。

たとえば、/etc/sysconfig/nfsには次のパラメータが含まれています。

MOUNTD_OPTIONS=""

デバッグモードを有効にするには、-dオプションに続いて、次の任意の値を使用する必要があります: 。allauthcallgeneral、またはparse

たとえば、次のコードはすべての形式のrpc.mountdロギングを有効にします。

MOUNTD_OPTIONS="-d all"

すべての使用可能なオプションについては、マニュアルページを参照してください。

man 8 rpc.mountd

/etc/sysconfig/nfsを変更した後で、サービスを再起動する必要があります。

systemctl restart nfsserver  # for nfs server related changes
systemctl restart nfs  # for nfs client related changes