「サーバ - NFS」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の20版が非表示)
12行目: 12行目:
  |                      |                          |                      |
  |                      |                          |                      |
  +----------------------+                          +----------------------+
  +----------------------+                          +----------------------+
<br>
NFSとSambaの違いは、以下の通りである。<br>
* NFS
*: マルチプラットフォームでファイルシステムを共有する。
*: 冗長処理が少ないので高速で動作する。
* Samba
*: CIFS(Windows固有のプロトコル)を使用して、Windows / Unixプラットフォーム間でファイルシステムを共有する。
<br><br>
<br><br>


== NFSサーバのインストール ==
== NFSサーバのインストール ==
==== パッケージ管理システムからインストールする場合 ====
まず、全てのパッケージが最新であることを確認する。<br>
まず、全てのパッケージが最新であることを確認する。<br>
  # CentOS
  # RHEL
  sudo yum update
  sudo dnf update
   
   
  # SUSE
  # SUSE
27行目: 35行目:
<br>
<br>
NFSサーバをインストールするため、以下のコマンドを実行する。<br>
NFSサーバをインストールするため、以下のコマンドを実行する。<br>
  # CentOS
  # RHEL
  sudo yum install nfs-utils
  sudo dnf install nfs-utils
   
   
  # SUSE
  # SUSE
35行目: 43行目:
  # Raspberry Pi
  # Raspberry Pi
  sudo apt-get install nfs-kernel-server
  sudo apt-get install nfs-kernel-server
<br>
==== ソースコードからインストールする場合 ====
NFSのビルドに必要なライブラリをインストールする。<br>
# SUSE
sudo zypper install rpcgen libtirpc-devel libevent-devel libxml2-devel libmount-devel device-mapper-devel systemd-devel krb5-devel \
                    libgssglue-devel  # GSSAPIを有効にする場合
<br>
[https://mirrors.edge.kernel.org/pub/linux/utils/nfs-utils NFSの公式Webサイト]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf nfs-utils-<バージョン>.tar.xz
cd nfs-utils-<バージョン>
<br>
NFSをビルドおよびインストールする。<br>
./configure --prefix=<NFSのインストールディレクトリ>                                                        \
            --sysconfdir=<NFSの設定ディレクトリ  例. /etc または /<NFSのインストールディレクトリ>/etc等>            \
            --sbindir=<NFSのシステムバイナリディレクトリ  例. /usr/sbin または /<NFSのインストールディレクトリ>/sbin等> \
            --with-statedir=<NFSのステータスディレクトリ  例. /<NFSのインストールディレクトリ>/var等  デフォルトでもよい> \
            --with-systemd                                                                          \
            --disable-gss  # GSSAPIを無効にする場合は指定する
make -j $(nproc)
# /sbin/mount.nfsファイル、/sbin/nfsdcltrackファイル、/usr/lib/udev/rules.d/99-nfs.rulesファイルを作成する必要があるため、スーパーユーザ権限で実行する
sudo make install
<br>
特に重要なファイルとして、以下に示すものがインストールされる。<br>
* /sbin/mount.nfs
* /sbin/nfsdcltrack
*: <br>
* /usr/lib/systemd/system-generators/nfs-server-generator
* /usr/lib/systemd/system-generators/rpc-pipefs-generator
*: <br>
* /usr/lib/systemd/system/fsidd.service
* /usr/lib/systemd/system/XXX-NFS-var-rpc_pipefs.mount
* /usr/lib/systemd/system/nfs-blkmap.service
* /usr/lib/systemd/system/nfs-idmapd.service
* /usr/lib/systemd/system/nfs-mountd.service
* /usr/lib/systemd/system/nfs-server.service
* /usr/lib/systemd/system/nfsdcld.service
*: <br>
* /usr/lib/systemd/system/rpc-statd-notify.service
* /usr/lib/systemd/system/rpc-statd.service
* /usr/lib/systemd/system/rpc_pipefs.target
*: <br>
* /usr/lib/udev/rules.d/60-nfs.rules
* /usr/lib/udev/rules.d/99-nfs.rules
<br>
NFSのルールファイルを編集する。<br>
sudo vi /usr/lib/udev/rules.d/99-nfs.rules
<br>
# /usr/lib/udev/rules.d/99-nfs.rulesファイル
SUBSYSTEM=="bdi", ACTION=="add", PROGRAM="/<NFSのインストールディレクトリ>/lib/nfsrahead %k", ATTR{read_ahead_kb}="%c"
<br><br>
== NFS-Ganeshaサーバのインストール ==
NFS-Ganeshaは、ほとんどのUNIX/Linux上でユーザーモードで動作するNFSv3、v4、v4.1ファイルサーバである。<br>
また、9p.2000Lプロトコルもサポートしている。<br>
<br>
詳細を知りたい場合は、[https://github.com/nfs-ganesha/nfs-ganesha/wiki NFS-GaneshaサーバのプロジェクトWiki]を参照すること。<br>
<br>
NFS-Ganeshaサーバのビルドに必要なライブラリをインストールする。<br>
sudo zypper install gcc gcc-c++ git cmake autoconf libtool bison flex \
                    libgssglue-devel openssl-devel libnsl-devel libacl-devel libntirpc-devel doxygen
<br>
[https://download.nfs-ganesha.org NFS-Ganeshaサーバの公式Webサイト]または[https://github.com/nfs-ganesha/nfs-ganesha Github]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf nfs-ganesha-<バージョン>.tar.gz
cd nfs-ganesha-<バージョン>
<br>
NFS-Ganeshaサーバをビルドおよびインストールする。<br>
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<NFS-Ganeshaサーバのインストールディレクトリ> ../src \
      -DUSE_GSS=Off  # GSSを無効にする場合
      -D_USE_9P=OFF  # 9pプロトコルを無効にする場合
make -j $(nproc)
make install
<br><br>
<br><br>


== NFSサーバの設定 ==
== NFSサーバの設定 ==
NFSサーバのドメイン名を設定するため、以下のコマンドを実行する。<br>
NFSサーバのドメイン名を設定するため、以下のコマンドを実行する。<br>
ドメインを使用しない場合は、以下の設定を行わない。<br>
<u>ドメインを使用しない場合は、以下の設定を行わない。</u><br>
  sudo vi /etc/idmapd.conf
  sudo vi /etc/idmapd.conf
<br>
<br>
  # /etc/idmapd.confファイル
  # /etc/idmapd.confファイル
  # 5行目:自ドメイン名に変更
  # 5行目:自ドメイン名に変更
  # CentOS
  # RHEL
  Domain = centos.com
  Domain = rhel.com
   
   
  # SUSE
  # SUSE
61行目: 146行目:
   
   
  # マウント設定を記述
  # マウント設定を記述
  /home/ユーザ名/NFS 192.168.1.0/24(rw,no_root_squash)
  /home/ユーザ名/NFS 192.168.1.0/24(rw,async,no_root_squash)
<br>
<br>
exportsの主なオプションを下表に示す。<br>
exportsの主なオプションを下表に示す。<br>
109行目: 194行目:
== NFSサービスの自動起動 ==
== NFSサービスの自動起動 ==
Linuxの起動時に、NFSサービスを自動起動するために、以下のコマンドを実行する。<br>
Linuxの起動時に、NFSサービスを自動起動するために、以下のコマンドを実行する。<br>
  # CentOS
  # RHEL
  sudo systemctl start rpcbind nfs-server
  sudo systemctl start rpcbind nfs-server
  sudo systemctl enable rpcbind nfs-server
  sudo systemctl enable rpcbind nfs-server
   
   
  # SUSE
  # SUSE
sudo systemctl start nfs-server
sudo systemctl enable nfs-server
# Raspberry Pi
  sudo systemctl start nfs-server
  sudo systemctl start nfs-server
  sudo systemctl enable nfs-server
  sudo systemctl enable nfs-server
121行目: 210行目:
Firewalldを有効にしている場合は、NFSサービスの許可が必要である。<br>
Firewalldを有効にしている場合は、NFSサービスの許可が必要である。<br>
  # NFS v4の許可
  # NFS v4の許可
  sudo firewall-cmd --add-service=nfs --permanent
  sudo firewall-cmd --permanent --add-service=nfs
# NFS v3も許可する場合
sudo firewall-cmd --permanent --add-service={nfs3,mountd,rpc-bind}
sudo firewall-cmd --reload
<br>
<u>KVM上でNFSサービスを有効にする場合は、ゾーンをlibvirtdに変更する必要がある。</u><br>
# NFS v4の許可
sudo firewall-cmd --permanent --zone=libvirt --add-service=nfs
   
   
  # NFS v3も許可する場合
  # NFS v3も許可する場合
  sudo firewall-cmd --add-service={nfs3,mountd,rpc-bind} --permanent
  sudo firewall-cmd --permanent --zone=libvirt --add-service={nfs3,mountd,rpc-bind}
   
   
  sudo firewall-cmd --reload
  sudo firewall-cmd --reload
132行目: 230行目:
==== Linuxクライアント ====
==== Linuxクライアント ====
まず、NFSクライアントをインストールする。<br>
まず、NFSクライアントをインストールする。<br>
# RHEL
sudo dnf install nfs-utils
# SUSE
  sudo zypper install nfs-client
  sudo zypper install nfs-client
# Raspberry Pi
sudo apt-get install nfs-common
<br>
<br>
次に、ドメインの設定を行う。<br>
次に、ドメインの設定を行う。<br>
ドメインが存在しない場合は、この設定を行わない。<br>
<u>ドメインが存在しない場合は、この設定を行わない。</u><br>
  sudo vi /etc/idmapd.conf
  sudo vi /etc/idmapd.conf
<br>
<br>
141行目: 246行目:
   
   
  # 自ドメイン名に変更
  # 自ドメイン名に変更
  Domain = suse.com
  Domain = <ドメイン名>
<br>
<br>
===== 手動マウント =====
===== 手動マウント =====
NFSサーバの共有ディレクトリをマウントする。<br>
NFSサーバの共有ディレクトリをマウントする。<br>
  sudo mount -t nfs <NFSサーバのIPアドレスまたはホスト名>:/home/ユーザ名/NFS <マウントするディレクトリ>
もし、NFS v3でマウントする場合は、<code>-o vers=3</code>オプションを付加してマウントする。<br>
# NFS v4の場合
  sudo mount -t nfs <NFSサーバのIPアドレスまたはホスト名>:/home/ユーザ名/NFS <マウントするクライアントPCのディレクトリ>
# NFS v3の場合
sudo mount -t nfs -o vers=3 <NFSサーバのIPアドレスまたはホスト名>:<NFSサーバの共有ディレクトリ> <マウントするクライアントPCのディレクトリ>
# 例: NFS v3でマウントする場合
# NFSサーバのIPアドレスが192.168.0.1
# NFSサーバの共有ディレクトリが/mnt/NFS
# NFSクライアントのマウントディレクトリが$HOME/NFS-Clientディレクトリ
sudo mount -t nfs -o vers=3 192.168.0.1:/mnt/NFS $HOME/NFS-Client
 
<br>
<br>
正常にマウントされているか確認するために、以下のコマンドを実行する。<br>
正常にマウントされているか確認するために、以下のコマンドを実行する。<br>
  df -hT
  df -hT
<br>
<br>
もし、NFS v3でマウントする場合は、<code>-o vers=3</code>オプションを付加してマウントする。<br>
 
sudo mount -t nfs -o vers=3 <NFSサーバのIPアドレスまたはホスト名>:/home/ユーザ名/NFS <マウントするクライアントPCのディレクトリ>
===== 自動マウント(Linuxの起動時) =====
<br>
===== Linuxの起動時に自動マウント =====
Linuxの起動時にNFS共有ディレクトリを自動マウントする場合は、/etc/fstabファイルに以下のように設定する。<br>
Linuxの起動時にNFS共有ディレクトリを自動マウントする場合は、/etc/fstabファイルに以下のように設定する。<br>
  sudo vi /etc/fstab
  sudo vi /etc/fstab
160行目: 275行目:
  <NFSサーバのIPアドレスまたはホスト名>:/home/ユーザ名/NFS  <マウントするクライアントPCのディレクトリ>  nfs  defaults  0  0
  <NFSサーバのIPアドレスまたはホスト名>:/home/ユーザ名/NFS  <マウントするクライアントPCのディレクトリ>  nfs  defaults  0  0
<br>
<br>
===== マウントポイントのアクセス時に自動マウント =====
===== 自動マウント(マウントポイントのアクセス時) =====
マウントポイントのアクセス時に、動的にNFS共有ディレクトリにマウントする場合は、以下のように設定する。<br>
マウントポイントのアクセス時に、動的にNFS共有ディレクトリにマウントする場合は、以下のように設定する。<br>
以下の例では、/mnt/NFSディレクトリに動的マウントするように設定している。<br>
以下の例では、/mnt/NFSディレクトリに動的マウントするように設定している。<br>
189行目: 304行目:


==== Windowsクライアント ====
==== Windowsクライアント ====
===== ネットワークドライブのマウント =====
WindowsからNFSの共有ディレクトリと通信するには、NFSクライアントを有効にする必要がある。<br>
WindowsからNFSの共有ディレクトリと通信するには、NFSクライアントを有効にする必要がある。<br>
初期設定では、この機能は無効になっている。<br>
初期設定では、この機能は無効になっている。<br>
<br>
<br>
これを有効にするには、コントロールパネルから[プログラム] - [プログラムと機能] - [Windowsの機能を有効または無効にする]を選択する。<br>
# NFSクライアント機能を有効にする。
[Windowsの機能]画面が表示されるので、機能一覧から[NFS用サービス]チェックボックスにチェックを入力して、[OK]ボタンを押下する。<br>
#* [設定]から行う場合
#*# [設定] - [システム] - [オプション機能]を選択する。
#*# 画面右上の[Windowsのその他の機能]を選択する。
#*# [Windowsの機能]画面が表示されるので、一覧から[NFS用サービス]を展開して[NFSクライアント]と[管理ツール]にチェックを入力する。
#*# [OK]ボタンを押下する。
#* Powershellから行う場合
#*# <code>Enable-WindowsOptionalFeature -FeatureName ServicesForNFS-ClientOnly, ClientForNFS-Infrastructure -Online -NoRestart</code>
#: <br>
# インストール完了後、PCを再起動する。
#: <br>
# ネットワークドライブを割り当てる。
#* ファイルエクスプローラから行う場合
#*# ファイルエクスプローラを起動して、[ネットワークドライブの割り当て]を選択して、NFSの共有ディレクトリを設定する。<br>
#*# [ネットワークドライブ]画面が表示されるので、NFSサーバのIPアドレス(またはホスト名)とNFSの共有ディレクトリのパスを続けて入力する。<br>
#* Powershellから行う場合
#*# 一般ユーザ権限でPowershellを起動する。
#*#: <code>New-PSdrive -PSProvider FileSystem -Name <ネットワークドライブ名  例: M> -Root <NFSサーバのディレクトリパス  例: \\192.168.0.1\mnt\NFS></code>
#* コマンドプロンプトから行う場合
#*# 一般ユーザ権限でコマンドプロンプトを起動する。
#*#: <code>mount <NFSサーバのディレクトリパス  例: 192.168.0.1:/mnt/NFS> <ネットワークドライブ名  例: Z:\></code>
#: <br>
# 例えば、NFSサーバのIPアドレスが"192.168.0.1"、共有ディレクトリのパスが"/mnt/NFS"の場合、以下のように入力する。<br>
#: \\192.168.0.1\mnt\NFS
#: <br>
# 以上の設定を行うと、ファイルエクスプローラの[ネットワークロケーション]または[ネットワーク]に共有ディレクトリが表示される。<br>
<br>
<br>
ファイルエクスプローラを起動して、[ネットワークドライブの割り当て]を選択して、NFSの共有ディレクトリを設定する。<br>
===== ネットワークドライブの権限 =====
[ネットワークドライブ]画面が表示されるので、NFSサーバのIPアドレス(またはホスト名)とNFSの共有ディレクトリのパスを続けて入力する。<br>
NFSサーバ上にあるディレクトリおよびファイルにおいて、作成または書き込みを行う場合、以下に示すファイル群を作成する。<br>
これらのファイル群を作成するには、管理者権限が必要となることに注意する。<br>
<br>
<br>
例えば、NFSサーバのIPアドレスが"192.168.1.10"、共有ディレクトリのパスが"/home/ユーザ名/NFS"の場合、以下のように入力する。<br>
passwdファイルを作成する。<br>
  \\192.168.1.10\home\ユーザ名\NFS
このファイルには、Windows上のユーザ名とマッピングするLinux上のユーザのUIDとGIDを記述する。<br>
  # C:\Windows¥System32¥drivers¥etc\passwd
<Windows上のユーザ名>:x:<Linux上のUID>:<Linux上のGID>:::
例: win11:x:1000:
<br>
<br>
以上の設定を行うと、ファイルエクスプローラの[ネットワークロケーション]または[ネットワーク]に共有ディレクトリが表示される。<br>
Windows 10/11において、ユーザのグループ名を表示する。<br>
net user <ユーザ名>
<br>
groupファイルを作成する。<br>
このファイルには、groupファイルには、Windows上のユーザが所属するグループ名とマッピングするLinux上のユーザのGIDを記述する。<br>
# C:\Windows¥System32¥drivers¥etc\group
<Windows上のユーザのグループ名>:x:<GID>:
例: Administrators:x:100:
<br>
===== ネットワークドライブの切断 =====
NFSサーバから切断する時は、エクスプローラまたはコマンドプロンプトから切断する。<br>
<br>
* エクスプローラから切断する場合
*: NFSサーバに接続しているドライブを右クリックして、コンテキストメニューから[切断]を選択する。
*: <br>
* Powershellから切断する場合
*: 例: ZドライブとしてNFSサーバのディレクトリをマウントしている場合
*: <code>Remove-PSdrive -Name Z</code>
*: <br>
* コマンドプロンプトから切断する場合
*: コマンドプロンプト上にて、umountコマンドを実行する。
*: 例: ZドライブとしてNFSサーバのディレクトリをマウントしている場合
*: <code>umount Z:</code>
<br><br>
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]][[カテゴリ:Web]]

2024年12月26日 (木) 09:00時点における最新版

概要

NFSプロトコルは、1983年にSun Microsystemsによって最初に開発された。
これは、クライアントPCがネットワーク経由でファイルにアクセスできるようにするための方法として設計された。

NFS(Network File System)を使用することにより、
NFSサーバのディスクパーティションをクライアント端末のHDD /SSDのようにマウントすることができるようになる。

ここでは、以下のような環境を例に、NFSサーバを構築する。

+----------------------+             |             +----------------------+
| [    NFS Server    ] |192.168.1.10 | 192.168.1.11| [    NFS Client    ] |
|     www.suse.com     +-------------+-------------+   client.suse.com    |
|                      |                           |                      |
+----------------------+                           +----------------------+


NFSとSambaの違いは、以下の通りである。

  • NFS
    マルチプラットフォームでファイルシステムを共有する。
    冗長処理が少ないので高速で動作する。
  • Samba
    CIFS(Windows固有のプロトコル)を使用して、Windows / Unixプラットフォーム間でファイルシステムを共有する。



NFSサーバのインストール

パッケージ管理システムからインストールする場合

まず、全てのパッケージが最新であることを確認する。

# RHEL
sudo dnf update

# SUSE
sudo zypper update

# Raspberry Pi
sudo apt-get update
sudo apt-get upgrade


NFSサーバをインストールするため、以下のコマンドを実行する。

# RHEL
sudo dnf install nfs-utils

# SUSE
sudo zypper install nfs-kernel-server

# Raspberry Pi
sudo apt-get install nfs-kernel-server


ソースコードからインストールする場合

NFSのビルドに必要なライブラリをインストールする。

# SUSE
sudo zypper install rpcgen libtirpc-devel libevent-devel libxml2-devel libmount-devel device-mapper-devel systemd-devel krb5-devel \
                    libgssglue-devel  # GSSAPIを有効にする場合


NFSの公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf nfs-utils-<バージョン>.tar.xz
cd nfs-utils-<バージョン>


NFSをビルドおよびインストールする。

./configure --prefix=<NFSのインストールディレクトリ>                                                        \
            --sysconfdir=<NFSの設定ディレクトリ  例. /etc または /<NFSのインストールディレクトリ>/etc等>            \
            --sbindir=<NFSのシステムバイナリディレクトリ  例. /usr/sbin または /<NFSのインストールディレクトリ>/sbin等> \
            --with-statedir=<NFSのステータスディレクトリ  例. /<NFSのインストールディレクトリ>/var等  デフォルトでもよい> \
            --with-systemd                                                                           \
            --disable-gss  # GSSAPIを無効にする場合は指定する

make -j $(nproc)

# /sbin/mount.nfsファイル、/sbin/nfsdcltrackファイル、/usr/lib/udev/rules.d/99-nfs.rulesファイルを作成する必要があるため、スーパーユーザ権限で実行する
sudo make install


特に重要なファイルとして、以下に示すものがインストールされる。

  • /sbin/mount.nfs
  • /sbin/nfsdcltrack

  • /usr/lib/systemd/system-generators/nfs-server-generator
  • /usr/lib/systemd/system-generators/rpc-pipefs-generator

  • /usr/lib/systemd/system/fsidd.service
  • /usr/lib/systemd/system/XXX-NFS-var-rpc_pipefs.mount
  • /usr/lib/systemd/system/nfs-blkmap.service
  • /usr/lib/systemd/system/nfs-idmapd.service
  • /usr/lib/systemd/system/nfs-mountd.service
  • /usr/lib/systemd/system/nfs-server.service
  • /usr/lib/systemd/system/nfsdcld.service

  • /usr/lib/systemd/system/rpc-statd-notify.service
  • /usr/lib/systemd/system/rpc-statd.service
  • /usr/lib/systemd/system/rpc_pipefs.target

  • /usr/lib/udev/rules.d/60-nfs.rules
  • /usr/lib/udev/rules.d/99-nfs.rules


NFSのルールファイルを編集する。

sudo vi /usr/lib/udev/rules.d/99-nfs.rules


# /usr/lib/udev/rules.d/99-nfs.rulesファイル
SUBSYSTEM=="bdi", ACTION=="add", PROGRAM="/<NFSのインストールディレクトリ>/lib/nfsrahead %k", ATTR{read_ahead_kb}="%c"



NFS-Ganeshaサーバのインストール

NFS-Ganeshaは、ほとんどのUNIX/Linux上でユーザーモードで動作するNFSv3、v4、v4.1ファイルサーバである。
また、9p.2000Lプロトコルもサポートしている。

詳細を知りたい場合は、NFS-GaneshaサーバのプロジェクトWikiを参照すること。

NFS-Ganeshaサーバのビルドに必要なライブラリをインストールする。

sudo zypper install gcc gcc-c++ git cmake autoconf libtool bison flex \
                    libgssglue-devel openssl-devel libnsl-devel libacl-devel libntirpc-devel doxygen


NFS-Ganeshaサーバの公式WebサイトまたはGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf nfs-ganesha-<バージョン>.tar.gz
cd nfs-ganesha-<バージョン>


NFS-Ganeshaサーバをビルドおよびインストールする。

mkdir build && cd build

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<NFS-Ganeshaサーバのインストールディレクトリ> ../src \
      -DUSE_GSS=Off  # GSSを無効にする場合
      -D_USE_9P=OFF  # 9pプロトコルを無効にする場合
make -j $(nproc)
make install



NFSサーバの設定

NFSサーバのドメイン名を設定するため、以下のコマンドを実行する。
ドメインを使用しない場合は、以下の設定を行わない。

sudo vi /etc/idmapd.conf


# /etc/idmapd.confファイル
# 5行目:自ドメイン名に変更
# RHEL
Domain = rhel.com

# SUSE
Domain = suse.com

# Raspberry Pi
Domain = raspberrypi.com


/etc/exportsファイルの設定を行う。
/etc/exportsファイルは、どのクライアント端末に、どのディレクトリを、どのような権限でアクセス許可するかを設定するファイルである。
例えば、以下の設定では、/home/ユーザ名/NFSディレクトリを共有ディレクトリとして、読み書き可能としている。

sudo vi /etc/exports


# /etc/exportsファイル

# マウント設定を記述
/home/ユーザ名/NFS 192.168.1.0/24(rw,async,no_root_squash)


exportsの主なオプションを下表に示す。

オプション 説明
rw 読み込みと書き込みの両方を許可する
ro 読み込みを許可する
sync 同期書き込みを有効にする(デフォルト)
async 非同期書き込みを有効にする
secure 1024番ポートより小さいポートからのリクエストのみ受け付ける (デフォルト)
insecure 1024番ポート以降のポートからのリクエストも受け付ける
wdelay 別の書き込み要求が実行中 / 発生予定の場合、書き込みを遅延させる(デフォルト)
no_wdelay wdelayを無効にする。
asyncと合わせて設定する
subtree_check サブツリーのチェックを行う。(デフォルト)
一般的な指針として、多くは読み込みのみでファイル名の変更があまり行われないようなディレクトリをエクスポートする場合は、
サブツリーチェックが有効の方が良い。
no_subtree_check サブツリーのチェックを無効にする。
一般的な指針として、ホームディレクトリのような細かなファイルが多く、変更も多いディレクトリをエクスポートする場合は、
サブツリーのチェックを無効にした方が良い。
root_squash root UID / GIDをanonymous UID / GIDにマッピングする。
エクスポートされたディレクトリに対して、root権限ではアクセスできないようにする。
no_root_squash rootをanonymous UID / GIDにマッピングしない。
エクスポートされたディレクトリに対して、root権限でアクセスできるようにする。
all_squash 全てのUID / GIDをanonymous UID / GIDにマッピングする。
no_all_squash 全てのUID / GIDをanonymous UID / GIDにマッピングしない。(デフォルト)
anonuid=UID 指定のUIDをanonymous UIDにマッピングする。
anongid=GID 指定のGIDをanonymous GIDにマッピングする。


/etc/exportsファイルの設定の変更を反映させる。

exportfs -ra



NFSサービスの自動起動

Linuxの起動時に、NFSサービスを自動起動するために、以下のコマンドを実行する。

# RHEL
sudo systemctl start rpcbind nfs-server
sudo systemctl enable rpcbind nfs-server

# SUSE
sudo systemctl start nfs-server
sudo systemctl enable nfs-server

# Raspberry Pi
sudo systemctl start nfs-server
sudo systemctl enable nfs-server



ファイアーウォールの設定

Firewalldを有効にしている場合は、NFSサービスの許可が必要である。

# NFS v4の許可
sudo firewall-cmd --permanent --add-service=nfs

# NFS v3も許可する場合
sudo firewall-cmd --permanent --add-service={nfs3,mountd,rpc-bind}

sudo firewall-cmd --reload


KVM上でNFSサービスを有効にする場合は、ゾーンをlibvirtdに変更する必要がある。

# NFS v4の許可
sudo firewall-cmd --permanent --zone=libvirt --add-service=nfs

# NFS v3も許可する場合
sudo firewall-cmd --permanent --zone=libvirt --add-service={nfs3,mountd,rpc-bind}

sudo firewall-cmd --reload



NFSの共有ディレクトリへの接続

Linuxクライアント

まず、NFSクライアントをインストールする。

# RHEL
sudo dnf install nfs-utils

# SUSE
sudo zypper install nfs-client

# Raspberry Pi
sudo apt-get install nfs-common


次に、ドメインの設定を行う。
ドメインが存在しない場合は、この設定を行わない。

sudo vi /etc/idmapd.conf


# /etc/idmapd.confファイル

# 自ドメイン名に変更
Domain = <ドメイン名>


手動マウント

NFSサーバの共有ディレクトリをマウントする。
もし、NFS v3でマウントする場合は、-o vers=3オプションを付加してマウントする。

# NFS v4の場合
sudo mount -t nfs <NFSサーバのIPアドレスまたはホスト名>:/home/ユーザ名/NFS <マウントするクライアントPCのディレクトリ>

# NFS v3の場合
sudo mount -t nfs -o vers=3 <NFSサーバのIPアドレスまたはホスト名>:<NFSサーバの共有ディレクトリ> <マウントするクライアントPCのディレクトリ>

# 例: NFS v3でマウントする場合
# NFSサーバのIPアドレスが192.168.0.1
# NFSサーバの共有ディレクトリが/mnt/NFS
# NFSクライアントのマウントディレクトリが$HOME/NFS-Clientディレクトリ
sudo mount -t nfs -o vers=3 192.168.0.1:/mnt/NFS $HOME/NFS-Client


正常にマウントされているか確認するために、以下のコマンドを実行する。

df -hT


自動マウント(Linuxの起動時)

Linuxの起動時にNFS共有ディレクトリを自動マウントする場合は、/etc/fstabファイルに以下のように設定する。

sudo vi /etc/fstab

# /etc/fstabファイル(最下行に追記)
<NFSサーバのIPアドレスまたはホスト名>:/home/ユーザ名/NFS   <マウントするクライアントPCのディレクトリ>   nfs   defaults   0   0


自動マウント(マウントポイントのアクセス時)

マウントポイントのアクセス時に、動的にNFS共有ディレクトリにマウントする場合は、以下のように設定する。
以下の例では、/mnt/NFSディレクトリに動的マウントするように設定している。

sudo mkdir /mnt/NFS


sudo zypper install autofs


sudo vi /etc/auto.master

# /etc/auto.masterファイル(最下行に追記)
/-    /etc/auto.mount


sudo vi /etc/auto.mount

# /etc/auto.mountファイル
# [マウントポイント] [オプション] [ロケーション]
/mnt/NFS -fstype=nfs,rw <NFSサーバのIPアドレスまたはホスト名>:/home/ユーザ名/NFS


AutoFSを自動起動設定にする。

sudo systemctl start autofs
sudo systemctl enable autofs


正常に機能しているか確認するため、マウントポイントへ移動して以下のコマンドを実行する。

cd /mnt/NFS
ls -ahlF
cat /proc/mounts | grep mntdir


Windowsクライアント

ネットワークドライブのマウント

WindowsからNFSの共有ディレクトリと通信するには、NFSクライアントを有効にする必要がある。
初期設定では、この機能は無効になっている。

  1. NFSクライアント機能を有効にする。
    • [設定]から行う場合
      1. [設定] - [システム] - [オプション機能]を選択する。
      2. 画面右上の[Windowsのその他の機能]を選択する。
      3. [Windowsの機能]画面が表示されるので、一覧から[NFS用サービス]を展開して[NFSクライアント]と[管理ツール]にチェックを入力する。
      4. [OK]ボタンを押下する。
    • Powershellから行う場合
      1. Enable-WindowsOptionalFeature -FeatureName ServicesForNFS-ClientOnly, ClientForNFS-Infrastructure -Online -NoRestart

  2. インストール完了後、PCを再起動する。

  3. ネットワークドライブを割り当てる。
    • ファイルエクスプローラから行う場合
      1. ファイルエクスプローラを起動して、[ネットワークドライブの割り当て]を選択して、NFSの共有ディレクトリを設定する。
      2. [ネットワークドライブ]画面が表示されるので、NFSサーバのIPアドレス(またはホスト名)とNFSの共有ディレクトリのパスを続けて入力する。
    • Powershellから行う場合
      1. 一般ユーザ権限でPowershellを起動する。
        New-PSdrive -PSProvider FileSystem -Name <ネットワークドライブ名 例: M> -Root <NFSサーバのディレクトリパス 例: \\192.168.0.1\mnt\NFS>
    • コマンドプロンプトから行う場合
      1. 一般ユーザ権限でコマンドプロンプトを起動する。
        mount <NFSサーバのディレクトリパス 例: 192.168.0.1:/mnt/NFS> <ネットワークドライブ名 例: Z:\>

  4. 例えば、NFSサーバのIPアドレスが"192.168.0.1"、共有ディレクトリのパスが"/mnt/NFS"の場合、以下のように入力する。
    \\192.168.0.1\mnt\NFS

  5. 以上の設定を行うと、ファイルエクスプローラの[ネットワークロケーション]または[ネットワーク]に共有ディレクトリが表示される。


ネットワークドライブの権限

NFSサーバ上にあるディレクトリおよびファイルにおいて、作成または書き込みを行う場合、以下に示すファイル群を作成する。
これらのファイル群を作成するには、管理者権限が必要となることに注意する。

passwdファイルを作成する。
このファイルには、Windows上のユーザ名とマッピングするLinux上のユーザのUIDとGIDを記述する。

# C:\Windows¥System32¥drivers¥etc\passwd

<Windows上のユーザ名>:x:<Linux上のUID>:<Linux上のGID>:::
例: win11:x:1000:


Windows 10/11において、ユーザのグループ名を表示する。

net user <ユーザ名>


groupファイルを作成する。
このファイルには、groupファイルには、Windows上のユーザが所属するグループ名とマッピングするLinux上のユーザのGIDを記述する。

# C:\Windows¥System32¥drivers¥etc\group

<Windows上のユーザのグループ名>:x:<GID>:
例: Administrators:x:100:


ネットワークドライブの切断

NFSサーバから切断する時は、エクスプローラまたはコマンドプロンプトから切断する。

  • エクスプローラから切断する場合
    NFSサーバに接続しているドライブを右クリックして、コンテキストメニューから[切断]を選択する。

  • Powershellから切断する場合
    例: ZドライブとしてNFSサーバのディレクトリをマウントしている場合
    Remove-PSdrive -Name Z

  • コマンドプロンプトから切断する場合
    コマンドプロンプト上にて、umountコマンドを実行する。
    例: ZドライブとしてNFSサーバのディレクトリをマウントしている場合
    umount Z: