ウェブサイト検索

Ubuntu 14.04でNFSマウントを設定する方法


Ubuntu 14.04を使用していませんか?別のバージョンまたはディストリビューションを選択してください。

紹介

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

このガイドでは、Ubuntu 14.04 サーバーに NFS マウントを設定する方法について説明します。

前提条件

このガイドでは、2台のUbuntu 14.04サーバー間でのディレクトリ共有の設定を行います。これらのサーバーは任意のサイズで構いません。各サーバーにはsudo権限のあるアカウントを設定しておく必要があります。このようなアカウントの設定方法については、Ubuntu 14.04サーバーの初期設定ガイドのステップ1-4に従って学ぶことができます。

このガイドの目的のために、ディレクトリを共有するサーバーをホストと呼び、これらのディレクトリをマウントするサーバーをクライアントと呼ぶことにします。

このガイド全体でこれを明確に保つために、ホストとサーバーの値のスタンドインとして以下の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機能を提供するnfs-commonというパッケージをインストールする必要があります。再度、インストール前にローカルパッケージインデックスを更新して、最新の情報を取得します:

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

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

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

2つ目は、NFS専用に作成する一般的なディレクトリで、適切な手順と設定を示すためのものです。このディレクトリは/var/nfsに配置されます。

/homeディレクトリは既に存在するので、/var/nfsディレクトリを作成するところから始めましょう:

sudo mkdir /var/nfs

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

このコマンドを入力することで、それができます:

sudo chown nobody:nogroup /var/nfs

私たちは、共有専用で使用されるディレクトリの所有権を変更するだけで済みます。たとえば、私たちの/homeディレクトリの所有権を変更したくはありません。なぜなら、それはホストサーバー上のユーザーに多くの問題を引き起こすからです。

ホストサーバーでNFSエクスポートを設定する

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

テキストエディタでルート権限を使用して /etc/exports ファイルを開いてください:

sudo nano /etc/exports

見ることができるファイルには、各設定行の一般的な構造を示すいくつかのコメントがあります。基本的に、構文は次のようなものです:

 共有するディレクトリ クライアント(共有オプション1,…,共有オプションN) 

ですので、共有したい各ディレクトリのために行を作成したいと思います。この例では、クライアントの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: このオプションは、クライアントコンピュータにボリュームへの読み取りおよび書き込みアクセスを提供します。
  • 同期: このオプションは、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 mount 1.2.3.4:/home /mnt/nfs/home sudo mount 1.2.3.4:/var/nfs /mnt/nfs/var/nfs 

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

 df -h 
 ファイルシステム            サイズ  使用済み 空き 使用% マウントポイント /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  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 

下部をご覧いただければわかるように、我々の共有のうちの一つしか表示されていません。これは、エクスポートした共有の両方がリモートサーバーの同じファイルシステム上にあるためであり、つまり、同じストレージプールを共有していることを意味します。AvailおよびUse%の列が正確であるためには、計算に追加できる共有は一つだけである必要があります。

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

 mount -t nfs 
 1.2.3.4:/home を /mnt/nfs/home にマウント タイプ nfs (rw,vers=4,addr=1.2.3.4,clientaddr=111.111.111.111) 1.2.3.4:/var/nfs を /mnt/nfs/var/nfs にマウント タイプ nfs (rw,vers=4,addr=1.2.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ユーザーとして書き込むことになるroot_squashオプションを無効にしたためです。

別のテストファイルでは、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共有のマウントを追加することで、自動的にマウントすることができます。

このファイルをルート権限でテキストエディタで開いてください:

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

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

関連記事: