事例を通してLinux NFSの仕組みを詳細に分析

事例を通してLinux NFSの仕組みを詳細に分析

前回の記事に引き続き、web02 サーバーを作成し、web01 サーバーと web02 サーバーの /data ディレクトリを nfs01 サーバーの共有ディレクトリ /data にマウントし、さまざまな方法で自動起動を有効にします。

ウェブ01:

/etc/rc.local に次の行を追加します。

再起動して確認します:

ウェブ02:

テンプレートマシンをクローンし、web02仮想マシンを作成し、ホスト名とIPアドレスを変更します

rpcサービスをインストールします: yum install rpcbind 有効にして、起動時に開始するように設定します

最後に次の行を追加します。

ディスクのマウントはシステム起動シーケンスでのネットワーク カードの読み込みよりも高速であり、RPC にはネットワークが必要であるため、遅延マウントを有効にする必要があります。

再起動して確認します:

注意: 起動時にマウントする場合は、nfs01 サーバーとその nfs サービスの両方が有効になっていることを確認してください。

nfs01 サーバーの共有ディレクトリ情報を表示する

uid と gid を設定することでユーザー アクセスを指定できます (サーバーとクライアントに同じユーザーを追加します --- uid と gid は同じです)。

useradd -u 1111 テスト

web01 サーバーでテスト:

要約:

①NFSサーバのNFS設定ファイル内の共有ディレクトリに書き込み権限が必要です

②NFSサーバ共有ディレクトリのローカル権限をw権限に設定する必要があります

③ユーザーを指定する際は、サーバーとクライアントのユーザーのuidとgidが同じであることを確認してください(ユーザー名は異なっていても構いません)

クライアントマウントの詳細

クライアントのマウント情報を表示します。

2つの取り付けモード:ハードとソフト

マウントがソフト モードの場合、ネットワークまたはサービスの問題が発生すると、クライアントはタイムアウト (timeo) が停止するまで継続的にマウントを試行します。

ハード マウントを使用すると、システムはマウントが成功するまで試行を続けます。この時点ではマウントを解除したり、マウントを強制終了したりすることはできません。これは intr とともに使用されることが多いです。

注意: ソフトはタイムアウト後にデータが失われる可能性があるため、推奨されません。

rsize/wsize は書き込み/読み取りのブロック サイズであり、クライアントとサーバー間のデータ転送用のバッファー ストレージ容量に影響します。ローカル エリア ネットワーク内で、両側のメモリが比較的大きい場合は、この値を大きく設定して転送速度を上げることができます。

マウントコマンドの詳細な説明: https://www.runoob.com/linux/linux-comm-mount.html

CentOS7.6 の最適化では、次のマウント コマンドの使用が推奨されます。

マウント -t nfs -o noatime、nodiratime、nosuid、noexec、nodev、rsize=131072、wsize=131072 172.16.1.31:/data /mnt

NFS カーネル最適化の提案

  • /proc/sys/net/core/rmem_default: このファイルは受信ソケットバッファサイズのデフォルト値を指定します。デフォルトは124928 (バイト)です。
  • /proc/sys/net/core/rmem_max: このファイルは受信ソケットバッファの最大サイズを指定します。デフォルトは 124928 (バイト) です。
  • /proc/sys/net/core/wmem_default: このファイルは送信ソケットバッファサイズのデフォルト値を指定します。デフォルトは 124928 (バイト) です。
  • /proc/sys/net/core/wmem_max: このファイルは送信ソケットバッファの最大サイズを指定します。デフォルトは 124928 (バイト) です。

上記のファイルに対応する具体的なコマンドは次のとおりです。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Linux で USB デバイスの信号を監視するための Python の実装
  • Linux USBホストドライバの書き方の詳細説明
  • ARM LinuxはALSAドライバを使用し、USBオーディオデバイスを使用します
  • LinuxでUSBモバイルストレージを使用する方法
  • Linux環境でUSBストレージを使用する
  • Linux NFSメカニズムの動作原理と例の分析
  • IntelliJ IDEA リモート デバッグ Linux Java プログラム、ログを見るだけでなく問題を見つけます (推奨)
  • Linux bzip2 コマンドの使用
  • Linux で libudev を使用して USB デバイスの VID と PID を取得する方法

<<:  JPQLに基づく純粋なSQL文方式の詳細な説明

>>:  ソースコードから、Vue2がデータとメソッドを直接取得できる理由がわかる

推薦する

vscodeでnpmを使用してbabelをインストールする方法

序文前回の記事ではNode.jsのインストールと設定を紹介しました。今回はVScodeでbableを...

VMware仮想マシンにdeepin20をインストールする最も完全で詳細なプロセス

仮想マシンソフトウェア: VMware Workstationイメージ: deepin-deskto...

シンプルなビデオ連射機能を実装する JavaScript CSS3

この記事では、最も単純なビデオ連射機能をシミュレートするデモを作成します。アイデア:再生する動画と同...

PHPのmail()関数を使用してメールを送信する

PHPのメール関数を使用してメールを送信するmail()関数はメールサーバーに接続し、サーバーと対話...

MySQL で不明なフィールド名を回避する方法

序文この記事では、DDCTF の 5 番目の質問、つまり不明なフィールド名をバイパスする手法を紹介し...

CSS クラスと ID の一般的な命名規則

ページの公開名: #wrapper - ページの外側の端が全体のレイアウト幅を制御します#conta...

必見の JavaScript 面接質問 10 選のまとめ (おすすめ)

1.これは1. 誰が誰に電話をかけますか?例: 関数foo(){ console.log(&quo...

MySQL を使用して Excel でデータ生成を完了する方法

Excel は、データ分析に最もよく使用されるツールです。この記事では、MySQL と Excel ...

Dockerイメージのサイズを縮小する6つの方法

2017 年に Vulhub に取り組み始めてから、私は厄介な問題に悩まされてきました。Docker...

MySQL で自動インクリメントシーケンスを実装するためのサンプルコード

1. シーケンステーブルを作成する テーブル `sequence` を作成します ( `name` ...

mysql 8.0.15 winx64 解凍バージョン グラフィック インストール チュートリアル

システムをインストールした後、毎回いくつかのソフトウェアを再インストールする必要があります。ソフトウ...

Vueはスクロールバースタイルを実装します

最初はブラウザのスクロールバーのスタイルを変更して効果を実現したいと思っていましたが、情報を調べてみ...

MYSQLクエリデータの結果に自動的に番号を付ける方法

序文実際、クエリ中に結果に番号が付けられるこのような状況に遭遇したことは一度もありません。同僚が転職...

Vue プロジェクトで axios リクエストを使用する方法

目次1. インストール2. カプセル化に問題はない3. ファイルを作成する4. アドレス設定をリクエ...

TypeScript のマップされた型とより優れたリテラル型推論について説明します。

目次概要マップされた型を使用して Object.freeze() を構築するマッピングタイプの構文は...