序章

NFS(Network File System)は、サーバーにリモートディレクトリをマウントできる分散ファイルシステムプロトコルです。 これにより、別の場所にあるストレージスペースを活用し、複数のサーバーから同じスペースに簡単に書き込むことができます。 NFSは、定期的にアクセスする必要のあるディレクトリに適しています。

このガイドでは、Ubuntu14.04サーバーでNFSマウントを構成する方法について説明します。

前提条件

このガイドでは、2台のUbuntu14.04サーバー間のディレクトリ共有を構成します。 これらは任意のサイズにすることができます。 これらのサーバーごとに、sudo権限でアカウントを設定する必要があります。 このようなアカウントを構成する方法については、Ubuntu 14.04サーバーの初期セットアップガイドの手順1〜4を参照してください。

このガイドでは、ディレクトリを共有するサーバーを host と呼び、これらのディレクトリをマウントするサーバーをclientと呼びます。

ガイド全体でこれらをまっすぐに保つために、ホストとサーバーの値の代用として次のIPアドレスを使用します。

  • ホスト:1.2.3.4
  • クライアント:111.111.111.111

上記の値を独自のホストおよびクライアントの値に置き換える必要があります。

コンポーネントをダウンロードしてインストールする

始める前に、ホストサーバーとクライアントサーバーの両方に必要なコンポーネントをインストールする必要があります。

ホストサーバーにnfs-kernel-serverパッケージをインストールする必要があります。これにより、ディレクトリを共有できるようになります。 これは、このセッションでaptを使用して実行する最初の操作であるため、インストール前にローカルパッケージインデックスを更新します。

sudo apt-get update
sudo apt-get install nfs-kernel-server

これらのパッケージをインストールしたら、クライアントコンピューターに切り替えることができます。

クライアントコンピューターに、nfs-commonというパッケージをインストールする必要があります。これは、サーバーコンポーネントを含めることなくNFS機能を提供します。 繰り返しになりますが、インストール前にローカルパッケージインデックスを更新して、最新の情報を確実に入手できるようにします。

sudo apt-get update
sudo apt-get install nfs-common

ホストサーバーに共有ディレクトリを作成する

このガイドでは、2つの別々のディレクトリを共有して実験します。 共有する最初のディレクトリは、ユーザーデータを含む/homeディレクトリです。

2つ目は、適切な手順と設定を示すことができるように、NFS専用に作成する汎用ディレクトリです。 これは/var/nfsにあります。

/homeディレクトリはすでに存在するため、先に進んで/var/nfsディレクトリを作成することから始めます。

sudo mkdir /var/nfs

これで、リモートホストと共有するために特別に指定された新しいディレクトリができました。 ただし、ディレクトリの所有権は理想的ではありません。 nobodyという名前のシステム上のユーザーにユーザー所有権を与える必要があります。 nogroupという名前のシステム上のグループにもグループの所有権を与える必要があります。

これを行うには、次のコマンドを入力します。

sudo chown nobody:nogroup /var/nfs

共有のために特別に使用されるディレクトリの所有権を変更するだけで済みます。 たとえば、/homeディレクトリの所有権を変更したくないのは、ホストサーバー上のすべてのユーザーに多くの問題が発生するためです。

ホストサーバーでNFSエクスポートを構成する

ディレクトリを作成して割り当てたので、NFS構成ファイルに飛び込んで、これらのリソースの共有を設定できます。

root権限でテキストエディタで/etc/exportsファイルを開きます。

sudo nano /etc/exports

表示されるファイルには、各構成行の一般的な構造を示すコメントがいくつかあります。 基本的に、構文は次のようになります。

directory_to_shareクライアントshare_option1share_optionN

したがって、共有するディレクトリごとに1行を作成します。 この例またはクライアントのIPは111.111.111.111であるため、行は次のようになります。

/ home 111.111.111.111 (rw、sync、no_root_squash、no_subtree_check)/ var / nfs 111.111.111.111 (rw、sync、no_subtree_check)

ここではすべてを説明しましたが、有効にした特定のオプションを除きます。 今それらを調べてみましょう。

  • rw :このオプションは、クライアントコンピューターにボリュームへの読み取りアクセスと書き込みアクセスの両方を提供します。
  • sync :このオプションは、応答する前にNFSに変更をディスクに書き込むように強制します。 これにより、応答がリモートボリュームの実際の状態を反映するため、より安定した一貫性のある環境が実現します。
  • no_subtree_check :このオプションは、サブツリーチェックを防ぎます。サブツリーチェックは、リクエストごとに、エクスポートされたツリーでファイルが実際にまだ利用可能かどうかをホストがチェックする必要があるプロセスです。 これにより、クライアントがファイルを開いているときにファイルの名前が変更されると、多くの問題が発生する可能性があります。 ほとんどの場合、サブツリーチェックを無効にすることをお勧めします。
  • no_root_squash :デフォルトでは、NFSはrootユーザーからの要求をサーバー上の非特権ユーザーにリモートで変換します。 これは、クライアントのrootアカウントがホストのファイルシステムをrootとして使用することを許可しないことによるセキュリティ機能であると考えられていました。 このディレクティブは、特定の共有に対してこれを無効にします。

変更が完了したら、ファイルを保存して閉じます。

次に、次のように入力して、共有のエクスポートを保持するNFSテーブルを作成する必要があります。

sudo exportfs -a

ただし、NFSサービスは実際にはまだ実行されていません。 次のように入力して開始できます。

sudo service nfs-kernel-server start

これにより、構成したクライアントが共有を利用できるようになります。

クライアントサーバーにマウントポイントを作成し、リモート共有をマウントする

ホストサーバーが構成され、そのディレクトリ共有が利用可能になったら、クライアントを準備する必要があります。

リモート共有をマウントする必要があるので、いくつかのマウントポイントを作成しましょう。 従来の/mntを開始点として使用し、その下にnfsというディレクトリを作成して、共有を統合します。

実際のディレクトリは、ホストサーバー上の場所に対応します。 次のように入力することで、各ディレクトリと必要な親ディレクトリを作成できます。

sudo mkdir -p /mnt/nfs/home
sudo mkdir -p /mnt/nfs/var/nfs

リモート共有を配置する場所ができたので、次のように、このガイドでは1.2.3.4であるホストサーバーをアドレス指定することでリモート共有をマウントできます。

sudoマウント1.2.3.4:/ home / mnt / nfs / home sudoマウント1.2.3.4:/ var / nfs / mnt / nfs / var / nfs

これらは、ホストコンピューターからクライアントマシンに共有をマウントする必要があります。 クライアントサーバーで使用可能なディスク容量を確認することで、これを再確認できます。

 df -h
 使用されるファイルシステムのサイズ使用率使用率/dev/ vda 59G 1.3G 55G 3%/なし4.0K 0 4.0K 0%/ sys / fs / cgroup udev 2.0G 12K 2.0G 1%/ dev tmpfs 396M 324K 396M 1%/ run none 5.0M 0 5.0M 0%/ run / lock none 2.0G 0 2.0G 0%/ run / shm none 100M 0 100M 0%/ run / user 1.2.3.4:/ home 59G 1.3G 55G 3%/ mnt / nfs / home

一番下にあるように、私たちの株の1つだけが表示されています。 これは、エクスポートした両方の共有がリモートサーバー上の同じファイルシステム上にあるためです。つまり、同じストレージプールを共有しています。 Avail列とUse%列の精度を維持するために、計算に追加できるシェアは1つだけです。

マウントしたすべてのNFS共有を表示する場合は、次のように入力できます。

 mount -t nfs 
 1.2.3.4:/ home on / mnt / nfs / home type nfs(rw、vers = 4、addr = 12.3.4、clientaddr = 111.111.111.111)1.2.3.4 :/ var / nfs on / mnt / nfs / var / nfs type nfs(rw、vers = 4、addr = 12.3.4、clientaddr = 111.111.111.111)

これにより、クライアントマシンで現在アクセス可能なすべてのNFSマウントが表示されます。

NFSアクセスのテスト

共有に何かを書き込むことで、共有へのアクセスをテストできます。 次のように、共有の1つにテストファイルを書き込むことができます。

sudo touch /mnt/nfs/home/test_home

重要な違いを示すために、他の共有にもテストファイルを書き込んでみましょう。

sudo touch /mnt/nfs/var/nfs/test_var_nfs

マウントされたホームディレクトリにあるファイルの所有権を確認します。

ls -l /mnt/nfs/home/test_home

-rw-r--r-- 1 root   root      0 Apr 30 14:43 test_home

ご覧のとおり、ファイルはrootが所有しています。 これは、このマウントでroot_squashオプションを無効にしたため、匿名の非rootユーザーとしてファイルが書き込まれるためです。

を有効にしてマウントされた他のテストファイルでは、root_squashが有効になっていることがわかります。

ls -l /mnt/nfs/var/nfs/test_var_nfs

-rw-r--r-- 1 nobody nogroup 0 Apr 30 14:44 test_var_nfs

ご覧のとおり、このファイルは「nobody」ユーザーと「nogroup」グループに割り当てられています。 これは、構成に従います。

リモートNFSディレクトリのマウントを自動化する

クライアントのfstabファイルに追加することで、リモートNFS共有のマウントを自動化できます。

テキストエディタでroot権限でこのファイルを開きます。

sudo nano /etc/fstab

ファイルの最後に、各共有の行を追加します。 それらは次のようになります。

1.2.3.4:/ home / mnt / nfs / home nfs auto、noatime、nolock、bg、nfsvers = 4、intr、tcp、actimeo = 1800 0 0 1.2.3.4:/ var / nfs / mnt / nfs / var / nfs nfs auto、noatime、nolock、bg、nfsvers = 4、sec = krb5p、intr、tcp、actimeo = 1800 0 0

ここで指定するオプションは、fstabファイルのNFSマウントについて説明しているマニュアルページにあります。

man nfs

これにより、起動時にリモートパーティションが自動的にマウントされます(接続が確立されて共有が利用可能になるまでに少し時間がかかる場合があります)。

NFSリモート共有をアンマウントします

リモートディレクトリをシステムにマウントする必要がなくなった場合は、次のように、共有のディレクトリ構造から移動してアンマウントすることで、リモートディレクトリを簡単にアンマウントできます。

cd ~
sudo umount /mnt/nfs/home
sudo umount /mnt/nfs/var/nfs

これにより、リモート共有が削除され、ローカルストレージのみがアクセス可能になります。

df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         59G  1.3G   55G   3% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            2.0G   12K  2.0G   1% /dev
tmpfs           396M  320K  396M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm
none            100M     0  100M   0% /run/user

ご覧のとおり、NFS共有はストレージスペースとして使用できなくなりました。

結論

NFSは、ネットワークを介してリモートシステムにアクセスするための迅速かつ簡単な方法を提供します。 ただし、プロトコル自体は暗号化されていません。 これを実稼働環境で使用している場合は、NFSをSSHまたはVPN接続経由でルーティングして、より安全なエクスペリエンスを作成することを検討してください。

ジャスティン・エリングウッド