21

I have an Ubuntu 20.04 server (a local VM in my case). How do I mount a directory on the Linux server from a macOS Catalina client, using NFS?

Jo Liss
  • 2,878
  • 2
  • 23
  • 23

1 Answers1

47

Setting up the Linux server

  1. Install the NFS server as per the Ubuntu NFS guide:

    sudo apt install nfs-kernel-server
    
  2. Edit /etc/exports:

    sudo nano /etc/exports
    

    Now add a line similar to this:

    /home/ubuntu 172.16.238.0/24(insecure,rw,all_squash,anonuid=1000,anongid=1000,no_subtree_check)
    
    • /home/ubuntu is the directory to export
    • 172.16.238.0/24 is the IP addresses to accept connections from. The Mac client's IP address should be in this range. Use * to allow from any IP address. (But be careful not to make your NFS server available to the entire internet!)
    • insecure means to accept connections from unprivileged (higher) port numbers
    • rw means read-write
    • all_squash,anonuid=1000,anongid=1000 forces all reads and writes to be performed by the user/group with UID/GID 1000 (1000 is the default ubuntu user/group on my server). Run the id command on the server to find out your UID/GID. You need these options unless your Ubuntu server and Mac client use the same UID/GID for the main user.
    • no_subtree_check is a performance thing
  3. Save the file and run

    sudo exportfs -vra
    

    to reload the NFS exports. (I'm not sure if the -a option is necessary.)

Setting up the Mac client

  1. On the macOS client, edit the /etc/auto_master file (documented in the auto_master man page):

    sudo nano /etc/auto_master
    

    and change the line starting with /net to the following (or add it if necessary):

    /net                    -hosts          -nobrowse,nosuid,locallocks,nfc,actimeo=1
    
    • locallocks creates locks on the client rather than on the server. Without this, Finder becomes very slow and takes forever to show directories.
    • nfc makes UTF-8 file names work
    • actimeo=1 sets the attribute cache timeout as short as possible. Note that setting it to 0 (or adding noac) causes Finder not to notice when a file is deleted on the server, so we can't use it.
    • Note that we're not using nfsvers=4 here. I got kernel panics on the Mac with this, so I went back to the default (NFSv3).

    Note: It appears that some macOS software updates can overwrite this file and remove your changes. I've found myself having to go back to back to this answer once a year or so re-apply the changes.

  2. Refresh the automounts by running

    sudo automount -vc
    

    (If you previously tried to mount an NFS volume, unmount it first, like so: sudo umount -f /net/fileserver.local/home/ubuntu)

  3. In the Finder menu, select Go -> Go to Folder, and type /net/SERVER_HOST_NAME, e.g. /net/fileserver.local.

    You should find your exported directory in there, e.g. at /net/fileserver.local/home/ubuntu. Drag this directory to the Finder sidebar to make it easy to access in the future.

Jo Liss
  • 2,878
  • 2
  • 23
  • 23
  • Also, is there any way to fix the permissions. The only way I have to access my files from the Mac is giving 777 permissions to the folder I want to share :( otherwise the system shows me a message telling my I don't have permissions to browse the folder. – Carlos Vega Sep 04 '15 at 20:08
  • @carlosvega The `all_squash,anonuid=1000,anongid=1000` options take care of permissions for me - everything owned by UID 1000 on the Ubuntu server can be accessed from the Mac client no problem, so there's no need for chmodding to 777. – Jo Liss Sep 07 '15 at 14:34
  • 5
    Just a quick comment, if you just want to mount "on the fly" on the mac side, this works for me : `sudo mount -t nfs -o resvport 172.16.238.x:/home/ubuntu /Users/xyz/ubuntu` – Scott Carlson Sep 09 '15 at 23:13
  • works for me with Mac OSX Sierra and Ubuntu 16.04 – Antonios Hadjigeorgalis Nov 17 '16 at 18:26
  • 3
    People don't realize how much trial and error lies behind this brilliant answer. Especially the "nfc" part is CRUCIAL when mounting (or `rsync`ing) non-MacOS servers. You won't notice at first, but the UTF-8 ain't the same on OS X as it is everywhere else. Without it, your file names might very well be garbled and require hours on end to fix later on. I know I can't use a comment to say, "thank you," so I'll just end it here ;) – DanielSmedegaardBuus Dec 05 '16 at 13:43
  • `locallocks` is a huge performance booster! thank you heaps for that one! – Seb Sep 01 '18 at 19:27
  • If I could upvote this answer a million times I would. Thanks you so much. I've been trying for weeks to setup NFS on an Ubuntu server and mount it on MacOS, and trawled the web far and wide and never could get it to work. None of all the "respectable answers" (from DigitalOcean, etc.) worked at all. This is probably the most useful technical answer I've gotten online ever. Thanks again. – prmph Apr 07 '23 at 18:54