GNU/Linux >> Linux の 問題 >  >> Linux

Linux Network File System (NFS) インタビューの質問

NFS とは?

ネットワーク ファイル システム (NFS) は、現在存在する最も古いコンピュータ ファイル共有製品の 1 つです。 UNIX と Linux システム間でファイルのディレクトリを共有する場合は、依然として最も一般的です。 NFS では、サーバーが特定のディレクトリを指定して、指定されたホストが利用できるようにし、クライアント システムがそれらのディレクトリをローカルにマウントして接続できるようにします。

NFS は、ファイアウォール (iptables) ルール、TCP ラッパー (ホスト アクセスを許可および拒否するため)、および SELinux (ファイル共有プロトコルが NFS リソースを共有する方法を制限するため) を使用して保護できます。 NFS は、作成された時点では本質的に安全ではありませんでしたが (データは暗号化されずに共有され、ユーザー アクセスはかなりオープンです)、NFS バージョン 4 の機能により、NFS の全体的なセキュリティが向上しました。

NFS サーバーと RPC プロセスとは

nfs-server サービスを開始すると、NFS サーバーと、共有 NFS ファイル システムの要求を処理するために必要なその他の RPC プロセスが開始されます。短い名前「nfs」を使用できます 「nfs-server」ではなく「」 」サービスを開始するとき。例:

# systemctl start nfs

これは、NFS サービスのユーザー レベル部分を実装する NFS サーバー プロセスです。主な機能は、nfsd カーネル モジュールによって処理されます。ユーザー空間プログラムは、カーネル サーバーがリッスンするソケットの種類、サポートする NFS バージョン、および使用する nfsd カーネル スレッドの数を指定するだけです。 ps –e コマンドを使用して、実行中のスレッドの数を表示します。

# ps -ef | grep nfs
root      9093     2  0 11:21 ?        00:00:00 [nfsd4_callbacks]
root      9099     2  0 11:21 ?        00:00:00 [nfsd]
root      9100     2  0 11:21 ?        00:00:00 [nfsd]
root      9101     2  0 11:21 ?        00:00:00 [nfsd]
root      9102     2  0 11:21 ?        00:00:00 [nfsd]
root      9103     2  0 11:21 ?        00:00:00 [nfsd]
root      9104     2  0 11:21 ?        00:00:00 [nfsd]
root      9105     2  0 11:21 ?        00:00:00 [nfsd]
root      9106     2  0 11:21 ?        00:00:00 [nfsd]

実行する nfsd スレッドの数は、/proc/fs/nfsd/threads で定義されています ファイル。この例では、8 つの nfsd スレッドが指定されています:

# cat /proc/fs/nfsd/threads
8

nfs-server サービスを開始すると、RPC プロセスも開始されます。 ps –e コマンドを使用して、RPC プロセスの名前を表示できます。

# ps -e | grep -i rpc
  177 ?        00:00:00 rpciod
 9080 ?        00:00:00 rpc.statd
 9081 ?        00:00:00 rpc.idmapd
 9082 ?        00:00:00 rpcbind
 9083 ?        00:00:00 rpc.mountd
 9084 ?        00:00:00 rpc.rquotad

rpc.statd

このプロセスは、Network Status Monitor (NSM) RPC プロトコルを実装します。これは、NFS サーバーが正常に停止せずに再起動されたときに NFS クライアントに通知します。これは NFSv4 では使用されません。

rpc.mountd

これは、NFSv3 クライアントからのマウント要求のサーバー側を実装する NFS マウント デーモンです。要求された NFS 共有が NFS サーバーによって現在エクスポートされていること、およびクライアントがアクセスを許可されていることを確認します。 NFSv4 の場合、rpc.mountd デーモンは、エクスポートをセットアップするために NFS サーバーでのみ必要です。

rpc.idmapd

これにより、ネットワーク上の NFSv4 名 (user@domain の形式の文字列) とローカルの UID および GID の間でマッピングされる NFSv4 クライアントとサーバーの upcall が提供されます。 idmapd が NFSv4 で機能するには、/etc/idmapd.conf を構成する必要があります。すべてのホストが同じ DNS ドメイン名を共有している場合ではありませんが、このサービスは NFSv4 で使用するために必要です。

rpc.rquotad

このプロセスは、リモート ユーザーのユーザー クォータ情報を提供します。 nfs サービスによって自動的に開始され、ユーザー構成は必要ありません。この結果は、リモート ファイル システムのユーザー クォータを表示するために quota コマンドによって使用され、リモート ファイル システムにクォータを設定するために edquota コマンドによって使用されます。

ロック

これは、クライアントとサーバーの両方で実行されるカーネル スレッドです。 NFSv3 クライアントがサーバー上のファイルをロックできるようにする Network Lock Manager (NLM) プロトコルを実装します。 NFS サーバーが実行されるたびに、また NFS ファイル システムがマウントされるたびに、自動的に開始されます。

nfslock

このサービスを開始すると、NFS クライアントがサーバー上のファイルをロックできるようにする RPC プロセスが開始されます。

CentOS/RHEL で NFS サーバーと NFS クライアントを構成する方法

NFS サーバーとクライアント マシンを構成するには、以下の投稿をお読みください。

CentOS / RHEL での NFS の初心者向けガイド
CentOS / RHEL 7 :NFS サーバーと NFS クライアントの構成

NFS サーバーの構成ファイルとは?

NFS サーバーの主な構成は、/etc/exports ファイルです。これは、NFS クライアントと共有するディレクトリを指定するために使用するファイルです。このファイルの構文は次のとおりです:

Directory      hostname(options)

Directory の値は、共有するディレクトリの名前に置き換える必要があります (たとえば、/usr/share/doc)。値 hostname は、IP アドレスに解決できるクライアント ホスト名である必要があります。 options 値は、リソースの共有方法を指定するために使用されます。

たとえば、/etc/exports ファイル内の次のエントリは、/usr/share/doc ディレクトリを NFS クライアント client01 (読み取り/書き込みオプション付き) および NFS クライアント client02 (読み取り専用オプション付き) と共有します。 ):

# vi /etc/exports
/usr/share/doc      client01(rw) client02(ro)

client01 と client02 の名前/オプションの間にはスペースがありますが、ホスト名とそれに対応するオプションの間にはスペースがないことに注意してください。

/etc/exports ファイルについて

/etc/exports で最も一般的に使用される NFS 共有オプションは何ですか

以下を含む、さまざまな NFS 共有オプションがあります。

  • :読み取り/書き込みとして共有します。通常の Linux 権限は引き続き適用されることに注意してください。 (これはデフォルトのオプションであることに注意してください。)
  • :読み取り専用で共有
  • 同期 :ファイル データの変更はすぐにディスクに反映されます。これはパフォーマンスに影響しますが、データが失われる可能性は低くなります。一部のディストリビューションでは、これがデフォルトです。
  • 非同期 :同期の反対。ファイル データの変更は、最初にメモリに対して行われます。これによりパフォーマンスが向上しますが、データが失われる可能性が高くなります。一部のディストリビューションでは、これがデフォルトです。
  • root_squash :root ユーザーおよびグループ アカウントを NFS クライアントから匿名アカウント (通常は nobody アカウントまたは nfsnobody アカウント) にマップします。詳細については、次のセクション「ユーザー ID マッピング」を参照してください。 (これはデフォルトのオプションであることに注意してください。)
  • no_root_squash :ルート ユーザーおよびグループ アカウントを NFS クライアントからローカル ルートおよびグループ アカウントにマッピングします。
Linux の一般的な NFS マウント オプション

NFS 共有のパフォーマンスに関する情報を取得する方法

nfsiostat コマンドは、NFS マウント ポイントのみを除いて、iostat コマンドと同じように機能します。 nfsiostat は /proc/self/mountstats から入力を取得し、システムにマウントされた NFS 共有の入出力パフォーマンスに関する情報を提供します。 nfsiostat コマンドは、nfs-utils によって提供されます。 パッケージ。

以下は、nfsiostat コマンドからの出力例です。

以下の表は、about 出力の各列の簡単な説明を示しています。

フィールド 説明
オペレーション これは 1 秒あたりの操作数です。
rpc bklog バックログ キューの長さです。
kB/秒 これは、1 秒あたりの書き込み/読み取りの KB 数です。
kB/op これは、各操作ごとの書き込み/読み取りの KB 数です。
再送 再送回数です。
平均 RTT (ミリ秒) これは、クライアントのカーネルが RPC リクエストを送信してから応答を受信するまでの時間です。
平均実行時間 (ミリ秒) これは、NFS クライアントがカーネルに対して RPC 要求を行ってから RPC 要求が完了するまでの時間です。これには上記の RTT 時間が含まれます。

以下は、nfsiostat コマンドを使用するための構文です。

# nfsiostat --help
Usage: nfsiostat [interval] [count] [options] [mount point]

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit

  Statistics Options:
    File I/O is displayed unless one of the following is specified:

    -a, --attr          displays statistics related to the attribute cache
    -d, --dir           displays statistics related to directory operations
    -p, --page          displays statistics related to the page cache

  Display Options:
    Options affecting display format:

    -s, --sort          Sort NFS mount points by ops/second
    -l LIST, --list=LIST
                        only print stats for first LIST mount points

ここで、
間隔 – 各レポート間の時間 (秒)。
count – [interval] 秒間隔で生成されるレポートの数。ここでカウントを指定しない場合、レポートは指定された間隔で連続的に生成されます。
オプション – 以下の例では、さまざまなオプションについて説明しています。
mount_point – 統計情報を表示する特定の NFS マウント ポイントを指定できます。この場合、指定されたマウント ポイントについてのみレポートが生成されます。

現在共有されている NFS 共有を表示する方法

exportfs コマンドを NFS サーバーで使用して、現在共有されているものを表示できます:

# exportfs
/share          [world]

コマンド ラインを使用して NFS リソースを共有する方法

NFS サービスがすでに開始されている場合、exportfs コマンドを使用してリソースを一時的に共有することもできます。

# exportfs -o ro 192.168.1.100:/usr/share/doc
# exportfs
/usr/share/doc  192.168.1.100
/share          [world]

-o オプションは、共有オプションを指定するために使用されます。引数には、共有するシステムの名前と共有するディレクトリがコロン (:) 文字で区切られて含まれます。

/etc/exports ファイルを変更すると、新しく追加された共有は再起動後に有効になります。これらの変更をすぐに有効にしたい場合は、次のコマンドを実行してください:

# exportfs –a

クライアント システムに NFS 共有をマウントする方法

NFS 共有が NFS サーバーからエクスポートされると、以下のコマンド構文を使用して、適格なクライアントにマウントできます:

# mount [NFS server IP or hostname]:/share/path /client/path

たとえば、/exports/downloads が NFS サーバー 10.10.10.100 から共有されている場合、次のコマンドを使用してクライアント サーバーにディレクトリ /mnt/downloads としてマウントします:

# mount 10.10.10.100:/exports/downloads /mnt/downloads

NFS ファイルシステムをマウント解除する方法

NFS ファイルシステムがマウントされた後、アンマウントするのは簡単です。ローカル マウント ポイントまたはリモート ファイルシステム名を指定して umount コマンドを使用します。例:

# umount /mnt/nfs_mnt

または:

# umount 10.10.10.100:/nfs_share

NFS サーバーに接続されているクライアントのリストを取得する方法

NFS サーバーに接続されているクライアントのリストを取得するには、端末プロンプトから showmount コマンドを使用します。クライアントが接続されているディレクトリも表示するには、次を使用します:

# showmount -a

NFS サーバーが使用するデフォルトのポートは?

デフォルトでは、NFS サーバーはポート 2049 を使用します。

NFS が機能するには、ファイアウォールでどのポートを開く必要がありますか?

NFS サーバーが適切に動作するには、TCP および UDP ポート 2049 (nfs) および 111 (rpcbind) が開いている必要があります。また、サーバーは、showmount コマンドがサーバー上の rpc.mountd から利用可能な NFS 共有ディレクトリを照会できるように、TCP および UDP ポート 20048 を開く必要があります。

クライアント システムから NFS 共有を表示する方法

クライアント Linux システムから、showmount コマンドを使用して、選択したコンピューターから利用できる共有ディレクトリを確認できます。たとえば、次の例のようになります:

$ showmount -e server.example.com
/export/myshare client.example.com
/mnt/public *

showmount の出力は、/export/myshare という名前の共有ディレクトリがホスト client.example.com でのみ使用可能であることを示しています。ただし、/mnt/public 共有ディレクトリは誰でも利用できます。

NFS クライアントでマウントされた NFS マウント ポイントを表示する方法

次のコマンドを使用して、NFS クライアント サーバーにマウントされた NFS マウント ポイントを表示します:

# mount -t nfs4

出力例:

# mount -t nfs4
10.10.10.100:/mnt on /mnt/fed type nfs4 (rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.10.20.200,local_lock=none,addr=10.10.20.200)

mount -t nfs4 コマンドの出力には、NFS ファイル サーバーからマウントされたファイル システムのみが表示されます。

起動時に NFS ファイルシステムをマウントする方法

Linux システムを起動するたびに指定したマウント ポイントに自動的にマウントされるように NFS ファイル システムをセットアップするには、その NFS ファイル システムのエントリを /etc/fstab ファイルに追加する必要があります。

NFS ファイルシステムをローカル システムに追加するための形式は次のとおりです。

host:directory    mountpoint   nfs   options   0   0

最初の項目 (host:directory) は、NFS サーバー コンピュータと共有ディレクトリを識別します。 mountpoint は、NFS ディレクトリがマウントされるローカル マウント ポイントです。その後にファイルシステムの種類 (nfs) が続きます。マウントに関連するオプションは、カンマ区切りのリストの次に表示されます。 (最後の 2 つのゼロは、ファイルシステムの内容をダンプせず、ファイルシステムで fsck を実行しないようにシステムを構成します。)

以下は、/etc/fstab 内の NFS エントリの例です:

# vi /etc/fstab
nfs_server01:/data    /mnt/data      nfs    bg,rsize=8192,wsize=8192  0  0

autofs を使用してオンデマンドで NFS ファイルシステムをマウントする方法

autofs 機能は、誰かがファイルシステムを使用しようとすると、必要に応じてネットワーク ファイルシステムをマウントします。 autofs 機能を構成して有効にすると、利用可能な NFS 共有ディレクトリをオンデマンドでマウントできます。 autofs 機能を使用するには、autofs パッケージをインストールする必要があります。

autofs を有効にして、ホスト名とディレクトリが別のホスト コンピュータによって共有されていることがわかっている場合は、単に autofs マウント ディレクトリ (デフォルトでは /net または /var/autofs) に変更 (cd) します。これにより、共有リソースが自動的にマウントされ、アクセスできるようになります。次の手順では、Fedora または RHEL で autofs 機能を有効にする方法について説明します:

1. root ユーザーとして /etc/auto.master を開きます ファイルを開き、次の行を探します:

# vi /etc/auto.master
/net -hosts

これにより、/net ディレクトリが、ネットワーク上でアクセスする NFS 共有ディレクトリのマウント ポイントとして機能します。

2. CentOS/RHEL 7 以降のシステムで autofs サービスを開始するには、root ユーザーとして次のように入力します。

# systemctl start autofs.service

3. CentOS/RHEL 7 以降のシステムでは、システムを起動するたびに autofs サービスを再起動するように設定します。

# systemctl enable autofs

NFS サーバーで firewalld を構成する方法

NFS サーバーを機能させるには、firewall-config アプリケーションの関連ゾーンで、または firewall-cmd を使用して、nfs、mountd、および rpc-bind サービスを有効にします。

# firewall-cmd --add-service=nfs --zone=internal --permanent
# firewall-cmd --add-service=mountd --zone=internal --permanent
# firewall-cmd --add-service=rpc-bind --zone=internal --permanent


Linux
  1. noatimeでLinuxシステムのパフォーマンスを向上させる

  2. Redhat7LinuxシステムでのクイックNFSサーバー構成

  3. 新入生のための40のLinuxインタビューの質問パート2

  1. Linuxインタビューの質問と回答のトップ25

  2. Linux インタビューの質問 :オープン ファイル / オープン ファイル記述子

  3. Ubuntu Linux - 共有 VHDX

  1. Linuxインタビューの質問トップ25

  2. Linux での一般的な NFS の問題のトラブルシューティング

  3. Linux インタビューの質問 – 基本的なファイルとディレクトリのアクセス許可