モチベーション
家で複数のPC、ワークステーションを使う場合、情報共有のためNASを利用するかと思う。自分も既にRaspberry Piにsambaをインストールして、NASとして使っている。
文書の共有はNASで十分だけど、linuxで(CGIの端末から)使う場合にローカルディスクと同様に使いたいと思っていた。
今回、上記のRaspberry Piに新たに外部ディスク(480GBのSSD)を追加して、NFSマウント先として運用する事にした。
環境
NFSマウントするサーバ、クライアント、および各々のディレクトリは、以下のとおり。
NFSサーバ
- Raspberry Pi 3B+
- raspberrypi 4.19.66-v7-
- /export/nfs配下をNFSマウント用に公開
NFSクライアント
- HP Z820
- Ubuntu 18.02.2
- NFSマウントする自分のディレクトリは/mnt/nfs
- HP Z620
- Ubuntu 18.04.2
- NFSマウントする自分のディレクトリは/mnt/nfs
- MacBook Pro
- macOS Catalina バージョン 10.15.6
- NFSマウントする自分のディレクトリは/opt/nfs マウントするディレクトリが、他のクライアント異なっている理由は後述する。
NFSサーバの設定
外部ディスクを接続
詳細は省略するが、新規の外部ディスク(USB接続)をRaspberry Piから使うには、次のような手順で行う。
- パーティション設定(例えば、sudo fdisk /dev/sdc)
- フォーマット(ext4でフォーマットするには、sudo mkfs.ext4 /dev/sdc1)
- 必要ならボリュームラベル設定(例えば、sudo e2label /dev/sdc1 ssd480)
上記の例でのデバイス/dev/sdc1と後で説明で出てくるデバイス/dev/sda1と異なっているのは、使用している外付けUSBデバイスを変更したため。
設定手順の概要
NFSサーバー設定手順の概要は次の通り。
- NFSサーバをインストール
- NFSマウント用に/etc/fstabと/etc/exportsを設定
NFSサーバをインストール
$ sudo apt install nfs-kernel-server
自分が実行した際には、インストールの後処理で、サービスが正常に動作していないようだったので、rebootした後、以下でサービスが正常に動作していることを確認した。
$ service rpcbind status
/etc/fstabの設定
NFSマウントで公開する/export/nfsは実態はなく、/media/pi/ssd480/nfsをマウントしている。これを/etc/fstabに設定する。
これは、サーバの外部ディスクを変更しても、NFSマウントしているクライアント側には、影響しないようにするためである。
実は、ここの設定で少し苦労した。
システムが自動でマウントする/media/pi/ssd480を仮定して、/etc/fstabに/media/pi/ssd480/nfsを/export/nfsにマウントするような設定だと、自動マウントの結果、/media/pi/ssd4801が作られ、実態はそちらにあったりした。
最終的には、/etc/fstabに次の2行を追加した。
/dev/sda1 /media/pi/ssd480 ext4 defaults 0 0
/media/pi/ssd480/nfs /export/nfs none bind 0 0
/etc/exportsの設定
次の1行を追加した。
/export/nfs 192.168.xxx.0/24(rw,sync,no_subtree_check,no_root_squash)
NFSクライアント
ワークステーション(Ubuntu 18.02)
UbuntuでNFSクライアントの設定は、次の2手順で完了。
- NFSのパッケージをインストール
- NFSマウント実行
具体的には、次の手順。
$ sudo apt install nfs-common
$ sudo mount 192.168.xxx.yyy:/export/nfs /mnt/nfs
起動時に自動的にNFSマウントさせるため、/etc/fstabに次の1行を記述。
192.168.xxx.yyy:/export/nfs /mnt/nfs nfs
MacBook Pro (macOS Catalina)
MacでNFSマウントする場合には、マウントする自分のディレクトリに注意が必要。
例えば、/Volumes配下にディレクトリを作成して、NFSマウントしようとすると、次のようなエラーとなった。
mount_nfs: can't mount /export/nfs from 192.168.xxx.yyy onto /Volumes/NFS: Operation not permitted
ネットで調べてみると、Catalinaになって、その辺りの仕様が変更になったように読み取れた。
また、/(ルート)に、/mntディレクトリを作成しようとすると、次のようなエラーとなった。
$ sudo mkdir /mnt
Password:
mkdir: /mnt: Read-only file system
そこで、/(ルート)にあった空きのディレクトリ/opt配下にnfsディレクトリを作成して、そこにNFSマウントすることにした。
$ sudo mkdir -p /opt/nfs
$ sudo chmod 777 /opt/nfs
$ sudo mount_nfs -P 192.168.xxx.yyy:/export/nfs /opt/nfs
自分は、毎回手動でNFSマウントすることにした。そのためのシェルプロを使って、IPアドレスなどの入力は省略できるようにしている。以下参考。
$ cat $HOME/bin/nfsmount
sudo mount_nfs -P 192.168.xxx.yyy:/export/nfs /opt/nfs
$ tail -1 $HOME/.bash_profile
export PATH="$HOME/bin:$PATH"