Mount a shared NFS from TrueNAS on CentOS
On the setup of my house, I've decided that configuration files should be stored on the NAS. For this, the idea is that the NAS would have a share (say "config")which would be mounted on the other machines. Each application would then have its own directory in that config, so they don't overlap. Think docker volumes...
So, I have a TrueNAS and a linux machine for this exercise. I've created a dataset and tried to mount it on the linux machine, but... I used to get that the folder has 0755 permission and belongs to ... you guessed it: root:root.
Correct setup
I've used the following steps:
On the NAS
- Log in on the NAS and on the linux machine and identify a uid/gid combination which is not used.
- Create a group on the NAS with the GID identified above. I used
config
- Create an user on the NAS with the UID from step 1 and belonging to the group created at step 2. I used an user named
config
too. - Create a new dataset for the base directory which will be mounted and set it to belong to the new
user:group
. I used/mnt/Main/data/config
On the linux machine
- Repeat steps 1 to 3 from above
- Create a new directory where the NFS share would be mounted. I used
/mnt/config
- Mount the remote folder.
I used ansible for all this:
- name: Ensure group "config" exists with correct gid
group:
name: config
state: present
gid: 9013
- name: Add "config" user with correct gid
user:
name: config
comment: Configuration NFS user
uid: 9013
group: config
groups:
- docker
- name: Create config dir
file:
path: /mnt/config
state: directory
- name: Unmount NAS share
ansible.posix.mount:
path: /mnt/config
state: unmounted
- name: Mount NAS share
ansible.posix.mount:
src: '{{nas_ip}}:{{nas_share}}'
path: /mnt/config
opts: rw,sync,hard,intr
state: mounted
fstype: nfs
Where the nas_ip
and nas_share
are the identification of my NFS share.
Conclusion
The trick is: have matching owners on both machines
PS: In my defense, last time I mounted a NFS was about 10 years ago :)
HTH,