ブロックストレージを使用してNFSサーバーを設定する方法

以下は日本語でのパラフレーズです(一つのオプション):
イントロダクション

NFS(ネットワークファイルシステム)は、リモートディレクトリをサーバーにマウントすることができる分散ファイルシステムのプロトコルです。これにより、別の場所にあるストレージスペースを管理し、複数のクライアントからそのスペースに書き込むことができます。NFSは、ネットワークを介してリモートシステムにアクセスするための比較的標準的で高性能な方法を提供し、共有リソースが定期的にアクセスされる必要がある場合にうまく機能します。

ブロックストレージは、通常ホスティングプロバイダーによって提供されるネットワークベースのストレージボリュームを表す一般的な用語です。オブジェクトストレージとは異なり、ブロックストレージには通常独自のAPIが提供されず、既存のサーバーにマウントして共有する必要があります。Silicon Cloudのブロックストレージを使用している場合、アタッチされたドロップレット上でNFSサーバーを実行することは、ブロックストレージボリュームを公開するための良い解決策です。

このガイドでは、NFSサーバーをホストするために必要なソフトウェアのインストール方法、サーバーとクライアントの2つのNFSマウントの設定方法、そしてリモート共有をマウントおよびアンマウントする方法について説明します。

前提条件

このチュートリアルでは、2つのサーバーを使用し、1つのサーバーがもう1つと一部のファイルシステムを共有することになります。一緒に進めるためには、次のものが必要です。

  • Two Ubuntu servers. This tutorial will follow our best practices for Ubuntu 22.04, but most recent Ubuntu or Debian releases should also work. Each of these should have a non-root user with sudo privileges, a firewall set up with UFW, and private networking, if it’s available to you.For assistance setting up a non-root user with sudo privileges and a firewall, follow our Initial Server Setup with Ubuntu 22.04 guide.

    If you’re using Silicon Cloud vServers for your server and client, you can read more about setting up a private network in our documentation on How to Create a VPC. Silicon Cloud droplets created since 2019 will automatically have a private network interface enabled.

このチュートリアルでは、ディレクトリを共有するサーバーをホスト、それらのディレクトリをマウントするサーバーをクライアントと呼びます。ホストサーバーにはブロックストレージボリュームがアタッチされている必要があります。Silicon Cloudのブロックストレージを使用している場合は、ボリュームの作成とマウントに関するドキュメントに従ってください。両方のサーバーのIPアドレスも知る必要があります。SSHを初めて接続する際以外は、可能であればプライベートネットワークアドレスを使用してください。

このチュートリアルでは、ホストのIPアドレスとクライアントのIPアドレスは、host_ipとclient_ipというプレースホルダーによって参照されますので、必要に応じて置換してください。

ステップ1 – コンポーネントのダウンロードとインストール

各サーバーに必要なコンポーネントをインストールして始めます。

ホストに関して

ホストサーバーには、ディレクトリを共有するためにnfs-kernel-serverパッケージをインストールしてください。これがaptでの最初の操作であるため、インストールの前にローカルのパッケージインデックスを更新してください。

  1. sudo apt update
  2. sudo apt install nfs-kernel-server

 

これらのパッケージがインストールされたら、クライアントサーバーに切り替えてください。

クライアントの方に

クライアントサーバー上で、サーバーコンポーネントは含まずにNFS機能を提供するパッケージであるnfs-commonをインストールする必要があります。インストール前に、ローカルのパッケージインデックスを最新の情報に更新するために、再度リフレッシュしてください。

  1. sudo apt update
  2. sudo apt install nfs-common

 

Note

注意:WindowsやmacOSなど他のプラットフォームのNFS共有にも、組み込まれたOSの機能を使用して接続することもできます。nfs-commonの例はUbuntuサーバー向けです。

両方のサーバーに必要なパッケージが揃ったので、設定を開始できます。

ステップ2 – ホスト上で共有ディレクトリを作成する

このチュートリアルでは、デフォルトのNFSの動作を使用して一般的な目的のNFSマウントを作成し、クライアントマシンのroot権限を持つユーザーがそのクライアントスーパーユーザー権限を使ってホストとのやり取りを難しくする方法を紹介します。コンテンツ管理システムを使用してアップロードされたファイルを保存したり、ユーザーがプロジェクトファイルを簡単に共有するためにスペースを作成するために、このようなものを使用することができます。

もしもブロックストレージがホスト上の/mnt/volume-nyc3-01のパスにマウントされている場合、そのボリューム内にnfsというディレクトリを作成することができます。

最初に、共有ディレクトリを作成してください。

  1. sudo mkdir -p /mnt/volume-nyc3-01/nfs

 

sudoで作成するため、ディレクトリはホストのルートユーザーの所有となります。 (Sudo de sakusei suru tame, direkutori wa hosuto no rūto yūzā no shoyū to narimasu.)

  1. ls -dl /mnt/volume-nyc3-01/nfs/

 

Output

drwxr-xr-x 2 root root 4096 Sep 27 16:19 /mnt/volume-nyc3-01/nfs/

NFSはセキュリティ対策として、クライアントでのすべてのルート操作をnobody:nogroupの認証情報に変換します。したがって、ディレクトリの所有権をこれらの認証情報と一致させる必要があります。

  1. sudo chown nobody:nogroup /mnt/volume-nyc3-01/nfs/

 

このディレクトリをエクスポートする準備ができました。

ステップ3:ホストサーバー上でNFSエクスポートを設定します。

次に、これらのリソースの共有の設定をするためにNFSの設定ファイルに入ります。

ホストマシン上で、nanoまたはお好みのテキストエディタでルート権限を持つ状態で「/etc/exports」ファイルを開いてください。

  1. sudo nano /etc/exports

 

ファイルには、各設定行の一般的な構造を示すコメントがあります。文法は次のようになります:

「/etc/exports」とは、日本では「/etc/exports」と呼ばれるディレクトリのことです。
directory_to_share    client(share_option1,...,share_optionN)

各ディレクトリごとに共有するための行を作成する必要があります。ここで示されているclient_ipのプレースホルダを実際のIPアドレスに変更してください。

/etc/exportsの内容
/mnt/volume-nyc3-01/nfs/    client_ip(rw,sync,no_subtree_check)

ここでは、no_root_squash以外の設定オプションを両ディレクトリに対して同じように使用しています。それぞれのオプションがどのような意味を持つのかを確認してください。

  • rw: This option gives the client computer both read and write access to the volume.
  • sync: This option forces NFS to write changes to disk before replying. This results in a more stable and consistent environment since the reply reflects the actual state of the remote volume. However, it also reduces the speed of file operations.
  • no_subtree_check: This option prevents subtree checking, which is a process where the host must check whether the file is actually still available in the exported tree for every request. This can cause many problems when a file is renamed while the client has it opened. In almost all cases, it is better to disable subtree checking.
  • no_root_squash: By default, NFS translates requests from a root user remotely into a non-privileged user on the server. This was intended as security feature to prevent a root account on the client from using the file system of the host as root. no_root_squash disables this behavior for certain shares.

変更作業が完了したら、ファイルを保存して閉じてください。もしもナノを使用している場合は、Ctrl+Xを押し、次にプロンプトが表示されたらYを入力し、Enterを押します。その後、設定したクライアントで共有を利用できるようにするため、次のコマンドでNFSサーバーを再起動してください。

  1. sudo systemctl restart nfs-kernel-server

 

新しい共有を実際に利用する前に、ファイアウォールのルールで共有へのトラフィックが許可されていることを確認する必要があります。

ステップ4 – ホスト上のファイアウォールの調整

最初に、ファイアウォールの状態を確認し、有効になっているかどうか、そして現在許可されている内容を確認してください。

  1. sudo ufw status

 

Output

Status: active To Action From — —— —- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

あなたのシステムでは、SSHトラフィックのみが許可されているため、NFSトラフィックのためのルールを追加する必要があります。

多くのアプリケーションでは、「sudo ufw app list」と入力することでアプリケーション名によって有効化することができますが、NFSはその一つではありません。しかし、ufwはサービスのポートとプロトコルを確認するために「/etc/services」もチェックするため、NFSを名前で追加することができます。ベストプラクティスでは、許可したいトラフィックを許可するために必要最低限のルールを有効化することを推奨していますので、どこからでもトラフィックを有効化するのではなく、より具体的に指定することが良いでしょう。

ホスト上でポート2049を開くために、以下のコマンドを使用してください。クライアントのIPアドレスに適切に置換してください。

  1. sudo ufw allow from client_ip to any port nfs

 

以下のように入力することで、変更を確認できます:

  1. sudo ufw status

 

出力でポート2049からのトラフィックを確認する必要があります。

Output

Status: active To Action From — —— —- OpenSSH ALLOW Anywhere 2049 ALLOW 203.0.113.24 OpenSSH (v6) ALLOW Anywhere (v6)

これによって、UFWはクライアントマシンからのNFSトラフィックをポート2049だけ許可することが確認されました。

ステップ5 — クライアント上でマウントポイントとマウントディレクトリを作成する。

ホストサーバーが設定され、共有が行われているので、今度はクライアントを準備します。

クライアントでリモート共有を利用できるようにするには、クライアントの空のディレクトリに共有したいホストのディレクトリをマウントする必要があります。

Note

注意:マウントポイントとして使用するフォルダ内にファイルやディレクトリがある場合、NFS共有をマウントするとすぐに隠されます。重要なファイルを失うことを防ぐために、既に存在するディレクトリにマウントする場合は、ディレクトリが空であることを確認してください。

マウント用のディレクトリを作成してください。

  1. sudo mkdir -p /nfs/general

 

ホストサーバーのIPアドレスを使用して、リモート共有をマウントすることができます。

  1. sudo mount host_ip:/mnt/volume-nyc3-01/nfs/ /nfs/general

 

これらのコマンドは、ホストコンピュータから共有をクライアントマシンにマウントします。マウントが成功したかどうかは、いくつかの方法で確認できます。 mountコマンドやfindmntコマンドで確認することもできますが、df -hコマンドはより読みやすい出力を提供します。

  1. df -h

 

Output

Filesystem Size Used Avail Use% Mounted on tmpfs 198M 972K 197M 1% /run /dev/vda1 50G 3.5G 47G 7% / tmpfs 989M 0 989M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/vda15 105M 5.3M 100M 5% /boot/efi tmpfs 198M 4.0K 198M 1% /run/user/1000 10.124.0.3:/mnt/volume-nyc3-01/nfs/ 25G 5.9G 19G 24% /nfs/general

表示されるマウントした共有フォルダは下部にあります。各マウントポイントの実際に使用されている容量を確認するには、ディスク使用量コマンドの「du」を使用し、マウントのパスを指定します。「-s」フラグはすべてのファイルの使用量を表示するのではなく、使用状況の要約を提供します。「-h」は人が読みやすい形式で結果を表示します。

例えば、

  1. du -sh /nfs/general

 

Output

4.0K /nfs/general

これは、ホームディレクトリの中身全体が利用可能なスペースのうちわずか4Kしか使用されていないことを示しています。

ステップ6 — NFSアクセスのテスト

次に、何かを書いて共有にアクセスをテストしてください。

最初に、/mnt/volume-nyc3-01/nfs/共有にテストファイルを作成してください。

  1. sudo touch /nfs/general/test

 

それから、所有権を確認してください。 (Sorekara, shōyuken o kakunin shitekudasai.)

  1. ls -l /nfs/general/test

 

Output

-rw-r–r– 1 nobody nogroup 0 Sep 28 18:05 /nfs/general/test

以下のようにネイティブな日本語に言い換えられます(1つのオプションのみ):
NFSのデフォルト動作を変更せずにこのボリュームをマウントし、クライアントマシンのルートユーザーとしてsudoコマンドでファイルを作成したため、ファイルの所有権はデフォルトでnobody:nogroupになります。このNFSマウント共有に対して、クライアントのスーパーユーザーはファイルの所有者を変更したりユーザーグループ用の新しいディレクトリを作成するなど、通常の管理作業を行うことができません。

ステップ7:ブート時にリモートNFSディレクトリをマウントする。

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

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

  1. sudo nano /etc/fstab

 

ファイルの最下部に、各シェアに対して1行追加してください。以下のようになります。

/etc/fstab を日本語で言い換えると、次のようになります。
「/etc/fstab」
. . .
host_ip:/mnt/volume-nyc3-01/nfs/    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Note

注意:指定したオプションについての詳細情報は、NFSのマニュアルページで見つけることができます。次のコマンドを実行してアクセスできます:
man nfs

クライアントは起動時にリモートパーティションを自動的にマウントしますが、接続を確立し、共有が利用可能になるまで数秒かかる場合があります。

ステップ8 – NFSリモート共有のアンマウント

もしリモートディレクトリをシステムからアンマウントしたい場合は、共有ディレクトリの階層から移動してアンマウントすることができます。以下のように行います。

  1. cd ~
  2. sudo umount /nfs/general

 

「umount」というコマンドは、予想している「unmount」という名前ではないことに注意してください。

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

  1. df -h

 

Output

Filesystem Size Used Avail Use% Mounted on tmpfs 198M 972K 197M 1% /run /dev/vda1 50G 3.5G 47G 7% / tmpfs 989M 0 989M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/vda15 105M 5.3M 100M 5% /boot/efi tmpfs 198M 4.0K 198M 1% /run/user/1000

次の再起動時にそれらが再度マウントされるのを防ぎたい場合は、/etc/fstabを編集し、その行を削除するか、行の先頭に#文字を置いてコメントアウトしてください。また、autoオプションを削除することでも自動マウントを防止でき、手動でマウントすることもできます。

結論

このチュートリアルでは、NFSホストを作成し、NFSマウントを作成してNFSクライアントで共有することで、いくつかの重要なNFSの動作を説明しました。

プロダクション環境でNFSを実装する場合、プロトコル自体は暗号化されていませんので、注意が必要です。プライベートネットワーク上で共有する場合は問題ありませんが、他の場合ではVPNやその他の暗号化トンネルが必要になります。データを保護するためにはこれらの手段が必要となります。

コメントを残す 0

Your email address will not be published. Required fields are marked *