【KVM入門④】〜NFSを使って全ての仮想マシンでファイルを共有する〜

# KVM入門一覧
- [【KVM入門⓪】〜Linuxの基礎知識〜](https://qiita.com/ryutarom128/items/00ed01b0c9dd59716964)
- [【KVM入門①】〜KVMを使って仮想マシンを作成する〜](https://qiita.com/ryutarom128/items/a31cc4e296442cd0f9d6)
- [【KVM入門②】〜複数の仮想マシンを作成して仮想マシン間で通信を行えるようにする〜](https://qiita.com/ryutarom128/items/2665a0f871d90f7f5358)
- [【KVM入門③】〜DNSとhostsの設定を行う〜](https://qiita.com/ryutarom128/items/7dd3646beddb96dc647a)
- 【KVM入門④】〜NFSを使って全ての仮想マシンでファイルを共有する〜👈今ここ
- [【KVM入門⑤】〜LDAPを使ってユーザ情報などを一元管理する〜](https://qiita.com/ryutarom128/items/b008ca44b7265164879c)

# はじめに
KVMシリーズ第4回です。

今回は、NFSを使って全ての仮想マシンでファイルを共有できるようにしていきます。

`test-vm1`をサーバ、`test-vm2`から`test-vm4`をクライアントとして、以下の図の赤色の部分の設定をするところまでをこの回の目標とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2906464/64a08f0f-739d-e37f-37e0-b2884e30ed00.png)

# すること

## サーバ側（`test-vm1`）

### 1. パッケージのインストール
パッケージマネージャのアップデートを行う。
```bash
sudo dnf update -y
```

nfs-utilsをインストールする。
```bash
sudo dnf install -y nfs-utils
```

### 2. /etc/exportsの編集

公開するディレクトリを作成する。
```bash
sudo mkdir /mnt/test
```

ファイルを編集する。
```bash
vi /etc/exports
```

以下を追記し、`172.16.1.0/24`からの接続を許可する。
```/etc/exports
/mnt/test 172.16.1.0/24(rw,no_root_squash)
```

設定を反映する。
```bash
sudo exportfs -rav
```

成功すれば以下のように表示される。
```bash
[xxx@vm1 ~]# sudo exportfs -rav
exporting 172.16.1.0/24:/mnt/test
```

nfs-serverサービスを起動し、さらに自動起動を有効にする。
```bash
sudo systemctl enable nfs-server --now
```

### 3. ファイアウォールの設定
ファイアウォールを起動していなかったら起動する。
```bash
sudo systemctl enable firewalld --now
```
nfsサービスをfirewalldサービスに追加する。
```bash
sudo firewall-cmd --add-service=nfs --permanent
```

firewalldサービスを再起動する。
```bash
sudo firewall-cmd --reload
```

以下のように表示されればファイアウォールの設定は成功している。
```bash
[xxx@vm1 ~]# sudo firewall-cmd --add-service=nfs --permanent
success
[xxx@vm1 ~]# sudo firewall-cmd --reload
success
[xxx@vm1 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources:
  services: cockpit dhcpv6-client nfs ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
```

## クライアント側（`test-vm2`から`test-vm4`）

### 1. パッケージのインストール
パッケージマネージャのアップデートを行う。
```bash
sudo dnf update -y
```

nfs-utilsをインストールする。
```bash
sudo dnf install -y nfs-utils
```

### 2. マウント
マウントポイントを作成する。
```bash
sudo mkdir /mnt/test
```

マウントする。
```bash
sudo mount -t nfs vm1:/mnt/test /mnt/test
```

以下のように表示されればマウントは成功している。
```bash
[xxx@vm2 ~]# sudo mount -t nfs vm1:/mnt/test /mnt/test
[xxx@vm2 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             4.0M     0  4.0M   0% /dev
tmpfs                888M     0  888M   0% /dev/shm
tmpfs                356M   33M  323M  10% /run
/dev/mapper/rl-root   26G  3.4G   23G  14% /
/dev/vda1            960M  366M  595M  39% /boot
tmpfs                178M  4.0K  178M   1% /run/user/2000
vm1:/mnt/test         26G  1.6G   25G   7% /mnt/test
```

### 3. OS起動時の自動マウントの設定
今のままでは以下のようにOSを再起動したときに自動でマウントしてくれない。
```bash
[xxx@vm2 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             4.0M     0  4.0M   0% /dev
tmpfs                888M     0  888M   0% /dev/shm
tmpfs                356M   33M  323M  10% /run
/dev/mapper/rl-root   26G  3.4G   23G  14% /
/dev/vda1            960M  366M  595M  39% /boot
tmpfs                178M  4.0K  178M   1% /run/user/2000
vm1:/mnt/test         26G  1.6G   25G   7% /mnt/test
[xxx@vm2 ~]# reboot

...

Rocky Linux 9.4 (Blue Onyx)
Kernel 5.14.0-427.18.1.el9_4.x86_64 on an x86_64

vm2 login:
Password:
Last login: Sun Jun  2 07:15:55 on ttyS0
[xxx@vm2 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             4.0M     0  4.0M   0% /dev
tmpfs                888M     0  888M   0% /dev/shm
tmpfs                356M   33M  323M  10% /run
/dev/mapper/rl-root   26G  3.4G   23G  14% /
/dev/vda1            960M  366M  595M  39% /boot
tmpfs                178M  4.0K  178M   1% /run/user/2000
```

そのため/etc/fstabファイルを編集して自動でマウントしてくれるようにする。
```bash
vi /etc/fstab
```

以下を追記する。
```bash
vm1:/mnt/test /mnt/test nfs rw 0 0
```

一旦アンマウントしてOSを再起動して、自動でマウントされていれば成功している。
```bash
[xxx@vm2 ~]# sudo umount /mnt/test
[xxx@vm2 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             4.0M     0  4.0M   0% /dev
tmpfs                888M     0  888M   0% /dev/shm
tmpfs                356M  5.1M  351M   2% /run
/dev/mapper/rl-root   26G  3.4G   23G  14% /
/dev/vda1            960M  366M  595M  39% /boot
tmpfs                178M  4.0K  178M   1% /run/user/0
[xxx@vm2 ~]# reboot

...

Rocky Linux 9.4 (Blue Onyx)
Kernel 5.14.0-427.18.1.el9_4.x86_64 on an x86_64

vm2 login:
Password:
Last login: Sun Jun  2 07:15:55 on ttyS0
[xxx@vm2 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             4.0M     0  4.0M   0% /dev
tmpfs                888M     0  888M   0% /dev/shm
tmpfs                356M  5.1M  351M   2% /run
/dev/mapper/rl-root   26G  3.4G   23G  14% /
/dev/vda1            960M  366M  595M  39% /boot
vm1:/mnt/test         26G  1.6G   25G   7% /mnt/test
tmpfs                178M  4.0K  178M   1% /run/user/0
```

# さいごに

今回はNFSを使って全ての仮想マシンでファイルを共有する方法を紹介しました。

次回はLDAPを使ってユーザ情報などを一元管理できるようにしていきます。