Macからraspberrypi3B+上のディレクトリをネットワーク経由でmountする


# 目的
Macからraspberrypi3B+上のディレクトリをネットワーク経由でmountする際の備忘録です

# raspberrypi側の準備

raspberrypiの情報

```
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 10 (buster)
Release:	10
Codename:	buster

IPアドレス:192.168.1.100
ユーザ名:pi
パスワード:pi
```

nfs関連パッケージをインストール

```
sudo apt-get purge rpcbind
sudo apt-get install nfs-kernel-server
```

mount用のディレクトリを作成

```
mkdir -p /home/pi/exports
touch /home/pi/exports/test.txt
sudo mkdir -p /export/src
sudo mount --bind /home/pi/exports /export/src
sudo chown -R pi:pi /export/src
```

/etc/exportsを設定してnfs-server.serviceを再起動

```
$ sudo emacs /etc/exports
# 以下を追加
/home/pi/exports 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
$ sudo /etc/init.d/nfs-kernel-server restart
[ ok ] Restarting nfs-kernel-server (via systemctl): nfs-kernel-server.service.
```

# Macからraspberrypi上のディレクトリをmount/unmountする

mountは以下

```
$ mkdir -p pi_mount_dir # mount対象ディレクトリ
$ sudo mount -t nfs -o rw,resvport 192.168.1.100:/home/pi/exports ./pi_mount_dir
$ ls pi_mount_dir/.
test.txt
```

unmountは以下

```
$ sudo umount pi_mount_dir
```

# IPアドレス指定ではなく名前指定でmountする場合

IPアドレス指定は以下の通り実行していたところ、

```
$ mkdir -p pi_mount_dir # mount対象ディレクトリ
$ sudo mount -t nfs -o rw,resvport 192.168.1.100:/home/pi/exports ./pi_mount_dir
$ ls pi_mount_dir/.
test.txt
```

名前指定の場合は、mount時に以下のように指定すればよい

```
$ sudo emacs /etc/hosts
# 以下を追加
192.168.1.100 rpi
$ sudo mount -t nfs -o rw,resvport rpi:/home/pi/exports ./pi_mount_dir
```

# mount_nfs: can't mount /home/pi from 192.168.1.100 Permission denied

```
$ sudo mount -t nfs 192.168.1.100:/home/pi pi_mount_dir
mount_nfs: can't mount /home/pi from 192.168.1.100 onto pi_mount_dir: Permission denied
```

オプションを更新して解決

```
$ sudo mount -t nfs -o rw,resvport 192.168.1.100:/home/pi/exports ./pi_mount_dir
```

# エラー：nfs-kernel-server.serviceJob for nfs-server.service canceled.

nfs-kernel-server restart時にエラー発生

```
$ sudo /etc/init.d/nfs-kernel-server restart
[....] Restarting nfs-kernel-server (via systemctl): nfs-kernel-server.serviceJob for nfs-server.service canceled.
 failed!
```

statusを確認

```
$ sudo /etc/init.d/nfs-kernel-server status
● nfs-server.service - NFS server and services
   Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sun 2020-06-07 01:21:17 JST; 30s ago
  Process: 14027 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=1/FAILURE)
  Process: 14028 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
  Process: 14031 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)

 6月 07 01:21:17 raspberrypi systemd[1]: Starting NFS server and services...
 6月 07 01:21:17 raspberrypi exportfs[14027]: exportfs: Failed to stat /home/pi/exports: No such file or directory
 6月 07 01:21:17 raspberrypi systemd[1]: nfs-server.service: Control process exited, code=exited, status=1/FAILURE
 6月 07 01:21:17 raspberrypi systemd[1]: nfs-server.service: Failed with result 'exit-code'.
 6月 07 01:21:17 raspberrypi systemd[1]: Stopped NFS server and services.
```

原因は以下

```
exportfs: Failed to stat /home/pi/exports: No such file or directory
```

ディレクトリを作成して解決

```
mkdir -p /home/pi/exports
```

# 参考
[Raspberry Pi で NFS サーバーを構築する．](http://nort-wmli.blogspot.com/2014/09/raspberry-pi-nfs.html)
[Raspberry Pi でexportしたnfsフォルダをMacでマウントする](http://yak-shaver.blogspot.com/2015/01/raspberry-pi-exportnfsmac.html)
[RaspberryPi3のセットアップ続き〜VimやNFS設定](https://qiita.com/B73W56H84/items/1d164a3c083872e10ccb#nfs-server-設定)