Raspberry PiのディスクをNFSマウントして使う

モチベーション

家で複数の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"

も参照してください