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をルーティングすることを検討してください。
