Ubuntu14.04でNFSマウントを設定する方法
序章
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_option1 、 … 、 share_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接続経由でルーティングして、より安全なエクスペリエンスを作成することを検討してください。