LINEで現役エンジニアに直接質問してみよう!登録無料

macOS Mojave から Ubuntu 18.4 LTS をNTFでマウントする

Railsを開発でMacを使っているものの、処理能力で不満を抱えていた。そこで、高スペックなLinuxマシンを自宅に用意し、高パワーを要求される処理はこのマシンで行いたいと思った。 ファイルを常に同期する方法として、今回はNFSを使う。

今回使ったMacOS環境は下記の通り。macOS Mojaveを使っている

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.4
BuildVersion:   18E227

そして、NFSサーバーとなる Ubuntu 18.04 環境については下記の通り。Mac からアクセスするときに必要になるので、ローカルIPアドレス、192.168.0.0/24 の範囲内で割り振っておく。

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"

Ubuntu で NFSを構築する

まず、Ubuntu で NFS を構築する NFS 構築に必要なパッケージはすべてnfs-kernel-serverに含まれている

$ sudo apt-get update
$ sudo apt-get install -y nfs-kernel-server

次に、NFS で公開するディレクトリを用意する。ここでは、/srv/nfsを使うことにする。このままではMacOS側でファイルの書き込みが出来ないので、できるように権限の調整を行っておく。

※: /srv はサーバー上で稼働しているサービスのデータファイルが見つけやすいように、統合的に管理できるようにするために設置されているディレクトリだ。 この決まりは、「FHS(File Hierarchy Standard)」で決められている。 /srv をどのように使ってディレクトリ構築していくかは全く決まっていない。今回は、/srv/nfsを使ったが、自分の使いやすい名前に変更してよい。 詳しくは下記。

$ sudo mkdir -p /srv/nfs
$ sudo chmod a+w /srv/nfs

ディレクトリが用意出来たら、NFS の設定を行う。設定ファイルは /etc/exports を使う。 公開ディレクトリ、アクセスを許可するネットワーク(CIDR形式)、オプションで記述する。オプションも忘れずに。

$ cat << 'EOF' | sudo tee -a /etc/exports > /dev/null
/srv/nfs 192.168.0.0/24(rw,wdelay,all_squash,no_subtree_check)
EOF

指定しているオプションの意味は下記の通り

  • rw: 書き込み権限を付与する
  • wdelay: 別の書き込み要求が間近に来ていると判定すると、ディスクへの書き込みを遅らせる
  • all_squash: サーバーに書き込むファイルのユーザーIDとグループIDをnobody:nogroupに固定する
  • nosubtreecheck: ファイルが見つからないときに子ディレクトリを探さない

設定を記述し終えたら、下記コマンドでNFSを起動する。再起動時、自動的に起動するようにもしておく。

$ sudo systemctl start nfs-kernel-server
$ sudo systemctl enable nfs-kernel-server

最後に NFSが正常に起動しているかを確認する。下記コマンドを実行し、公開ディレクトリ、ネットワーク、オプションなどが表示されればうまくいっている。

$ sudo exportfs -v
/srv/nfs        192.168.0.0/24(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,root_squash,no_all_squash)

macOS Mojave から NFSをマウントする

Desktop に nfs ディレクトリを作成して、そこにマウントする。

$ cd ~/Desktop && mkdir nfs
$ sudo mount_nfs -P 192.168.0.105:/srv/nfs $HOME/Desktop/nfs

192.168.0.105は、NFSサーバーのIPアドレスだ。今回、192.168.0.105だったのでそれを指定した。

あとは、マウントしたディレクトリで作業をおこなえば良い

$ cd ~/Desktop/nfs
$ echo 'Hello World!' > hello.txt
$ cat hello.txt
Hello World!

ちゃんと、読み書きができる

使い終わったら、アンマウントしよう

$ sudo umount $HOME/Desktop/nfs

アンマウントする前にNFSサーバーを落とすと、Macが永遠処理待ちになるので注意

Macでアンマウントする前に、NFSサーバーをシャットダウンしたことがあった。それをすると、Macが処理待ちで固まってしまい、シャットダウン操作などもできなくなった。 その場合、電源ボタンを長押しして、強制的にシャットダウンをした。

NFSは落ちることを前提に作られておらず、予期せぬ動作をさせてしまったのかもしれない(この辺はよく知らない)。

NFSサーバーを落とす前にちゃんとアンマウントされていることを確認しよう。

この記事を書いた人

自身がプログラミングを独学で勉強し始めて躓いた経験を元に、これから勉強をする人に向けに「イラスト多めでわかりやすい記事」にこだわって情報を発信しています。

現在はフルスタックエンジニアとしてサービス開発などのお仕事をしています。