今回はLinux系のネタになります。

ManjaroLinuxでNFSマウントしようとしたら少しハマったので解決方法を記載します。

そもそもNFSとは?

NetworkFileSystem(ネットワークファイルシステム)の略です。

基本的にはLinuxホスト間でネットワーク上でのファイル共有をする際のプロトコルとなります。
LinuxのAサーバのある特定のフォルダをLinuxのBサーバからもアクセスしたいという際に、
Aサーバで公開を行い、Bサーバでマウントして自分のドライブのように利用するものです。

Windowsでいうファイル共有サービスのLinux版とイメージしてください。

Ubuntuの場合は、クライアントには「nfs-common」というパッケージをインストールすれば、
NFSが使えるようになるのですが、ManjaroLinuxの場合は少し異なっていました。

ManjaroLinuxでインストールしたパッケージは以下

ManjaroLinuxでは下記のコマンドでnfsを含むパッケージを検索してくれます。

sudo pacman -Ss nfs

上記コマンドにより一覧に表示されたパッケージの中で筆者が
インストールしたのが以下パッケージになります。

mkinitcpio-nfs-utils 
nfs-utils
nfsidmap 
gvfs-nfs
liblockfile
libnfs
unionfs-fuse

以下コマンドでインストールします。

sudo pacman -S mkinitcpio-nfs-utils nfs-utils nfsidmap gvfs-nfs liblockfile libnfs unionfs-fuse

NFSサーバの準備

まずはNFSサーバを準備します。

NFSサーバには以下のパッケージをインストールします。

$ sudo pacman -S nfs-utils nfsidmap

共有したいフォルダを作成し、設定ファイル(/etc/exports)に記述します。

$ sudo mkdir /nfs/share
$ vi /etc/exports
/nfs/share 192.168.1.0/255.255.255.0(rw)

サービスを有効化、起動します。

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

これでサーバ側の準備完了です。

NFSマウントの方法(手動)

上記パッケージをインストールしたら、クライアント側で共有したいフォルダを作成します。

例:/home/nfs

$ sudo mkdir /home/nfs

次に以下コマンドでNFSサーバ側の共有フォルダとクライアント側のマウントポイントと
オプションを指定することでマウントできます。

$ sudo mount -t nfs 192.168.1.x:/nfs/share /home/share -o hard,intr

・192.168.1.xはNFSサーバのIPで、/nfs/shareがサーバ上の共有フォルダです。
・パラメータhardはサーバ側との接続が切断されたらリトライを繰り返します。

ここで仮にsoftオプションを指定してマウントするとサーバが応答しなくなるとエラーを返します。
しかし、hardオプションが指定されていると、サーバが応答するまで再試行が続けられます。
ここはサーバとして永続的に使うのか、一時的な共有利用かで使い分けかと思います

・intrオプションはサーバーダウン又はサーバーへ接続できない場合にNFS要求を割り込ませることができます。

上記コマンド実行後、クライアント側のLinuxにおいて、
以下コマンドでNFSサーバ側のフォルダが確認できれば成功です。

$ ls /home/nfs

これでNFSマウントが出来ることが確認できました。しかし、毎回Linuxのクライアントを起動する度に
上記コマンドを実行するのは手間ですよね。というわけで自動的にNFSマウントを行う方法を紹介します。

NFSマウントの方法(自動)

この場合、特に追加のパッケージは不要です。

設定ファイル(/etc/fstab)に追記を行います。

※上記設定ファイルはLinuxで外付けディスクを
自動マウントさせる場合の設定ファイルと同一です。

$ sudo vi /etc/fstab

上記ファイルをvi エディタで開き、以下を追記して保存して終了します。

192.168.1.x:/nfs/share /home/nfs nfs defaults 0 0

おまけその1

macOSXからnfs共有にアクセスしたい場合は、以下コマンドを実行します。

$ sudo mount -t nfs -o resvport,rw  192.168.1x:/nfs/share /Volumes/HackintoshSSD/Users/osmaniax/share

おまけその2

利用状況を見てみるには「nfsstat」コマンドを使用します。

$ nfsstat
Server rpc stats:
calls      badcalls   badfmt     badauth    badclnt
13572      0          0          0          0       

Server nfs v3:
null             getattr          setattr          lookup           access           
1       100%     0         0%     0         0%     0         0%     0         0%     
readlink         read             write            create           mkdir            
0         0%     0         0%     0         0%     0         0%     0         0%     
symlink          mknod            remove           rmdir            rename           
0         0%     0         0%     0         0%     0         0%     0         0%     
link             readdir          readdirplus      fsstat           fsinfo           
0         0%     0         0%     0         0%     0         0%     0         0%     
pathconf         commit           
0         0%     0         0%     

Server nfs v4:
null             compound         
4         0%     13567    99%     

Server nfs v4 operations:
op0-unused       op1-unused       op2-future       access           close            
0         0%     0         0%     0         0%     66        0%     24        0%     
commit           create           delegpurge       delegreturn      getattr          
21        0%     5         0%     0         0%     0         0%     13409    32%     
getfh            link             lock             lockt            locku            
35        0%     0         0%     0         0%     0         0%     0         0%     
lookup           lookup_root      nverify          open             openattr         
73        0%     0         0%     0         0%     24        0%     0         0%     
open_conf        open_dgrd        putfh            putpubfh         putrootfh        
0         0%     0         0%     13505    32%     0         0%     8         0%     
read             readdir          readlink         remove           rename           
0         0%     19        0%     0         0%     2         0%     1         0%     
renew            restorefh        savefh           secinfo          setattr          
0         0%     0         0%     1         0%     0         0%     21        0%     
setcltid         setcltidconf     verify           write            rellockowner     
0         0%     0         0%     0         0%     272       0%     0         0%     
bc_ctl           bind_conn        exchange_id      create_ses       destroy_ses      
0         0%     0         0%     8         0%     4         0%     0         0%     
free_stateid     getdirdeleg      getdevinfo       getdevlist       layoutcommit     
0         0%     0         0%     0         0%     0         0%     0         0%     
layoutget        layoutreturn     secinfononam     sequence         set_ssv          
0         0%     0         0%     4         0%     13555    33%     0         0%     
test_stateid     want_deleg       destroy_clid     reclaim_comp     allocate         
0         0%     0         0%     0         0%     4         0%     0         0%     
copy             copy_notify      deallocate       ioadvise         layouterror      
0         0%     0         0%     0         0%     0         0%     0         0%     
layoutstats      offloadcancel    offloadstatus    readplus         seek             
0         0%     0         0%     0         0%     0         0%     0         0%     
write_same       
0         0%