我在NAS上启用了NFS,并且在Mac上成功挂载,倒是没有什么太多的问题。但是在Mac上启动NFS服务器,就遇到了很多问题。
Mac上如何启动NFS
Mac上可以通过修改/etc/exports
文件来启动NFS,但是文件格式却和Linux的不一样。问ChatGPT,很多时候都是Linux上的语法。
/tmp/nfs-data -mapall=root -alldirs
/tmp/nfs-data -mapall=root -alldirs -network 192.168.0.0 -mask 255.255.0.0
然后sudo nfsd restart
启动NFS服务,nfsd checkexports
查看是否有语法错误,showmount -e
会输出下面启动的NFS文件夹。
Exports list on localhost:
/tmp/nfs-data Everyone
rpcinfo -p
会输出NFSD对应的端口和协议
program vers proto port
100000 2 udp 111 rpcbind
100000 3 udp 111 rpcbind
100000 4 udp 111 rpcbind
100000 2 tcp 111 rpcbind
100000 3 tcp 111 rpcbind
100000 4 tcp 111 rpcbind
100024 1 udp 991 status
100024 1 tcp 1021 status
100021 0 udp 940 nlockmgr
100021 1 udp 940 nlockmgr
100021 3 udp 940 nlockmgr
100021 4 udp 940 nlockmgr
100021 0 tcp 1017 nlockmgr
100021 1 tcp 1017 nlockmgr
100021 3 tcp 1017 nlockmgr
100021 4 tcp 1017 nlockmgr
100011 1 udp 900 rquotad
100011 2 udp 900 rquotad
100011 1 tcp 999 rquotad
100011 2 tcp 999 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100005 1 udp 865 mountd
100005 3 udp 865 mountd
100005 1 tcp 752 mountd
100005 3 tcp 752 mountd
Linux中挂载Mac的NFS文件夹
假设Mac主机的IP是192.168.1.27,尝试mount -t nfs -v 192.168.1.27:tmp/nfs-data /tmp/nfs-data
会报错。
mount.nfs: timeout set for Fri Feb 28 15:50:24 2025
mount.nfs: trying text-based options 'vers=4.2,addr=192.168.1.27,clientaddr=198.19.249.104'
mount.nfs: mount(2): Protocol not supported
mount.nfs: trying text-based options 'vers=4,minorversion=1,addr=192.168.1.27,clientaddr=198.19.249.104'
mount.nfs: mount(2): Protocol not supported
mount.nfs: trying text-based options 'vers=4,addr=192.168.1.27,clientaddr=198.19.249.104'
mount.nfs: mount(2): Protocol not supported
mount.nfs: trying text-based options 'addr=192.168.1.27'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 192.168.1.27 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 192.168.1.27 prog 100005 vers 3 prot UDP port 865
mount.nfs: mount(2): Permission denied
mount.nfs: access denied by server while mounting 192.168.1.27:tmp/nfs-data
但是换成mount -t nfs -v 198.19.249.3:tmp/nfs-data /tmp/nfs-data
却可以成功挂载。
mount.nfs: timeout set for Fri Feb 28 15:52:26 2025
mount.nfs: trying text-based options 'vers=4.2,addr=198.19.249.3,clientaddr=198.19.249.104'
mount.nfs: mount(2): Protocol not supported
mount.nfs: trying text-based options 'vers=4,minorversion=1,addr=198.19.249.3,clientaddr=198.19.249.104'
mount.nfs: mount(2): Protocol not supported
mount.nfs: trying text-based options 'vers=4,addr=198.19.249.3,clientaddr=198.19.249.104'
mount.nfs: mount(2): Protocol not supported
mount.nfs: trying text-based options 'addr=198.19.249.3'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 198.19.249.3 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 198.19.249.3 prog 100005 vers 3 prot UDP port 865
Linux之间互相挂载
Linux上安装apt install nfs-kernel-server
,创建/etc/exports
文件,通过systemctl enable nfs-kernel-server
和systemctl restart nfs-kernel-server
启动NFS即可。
下面的Linux下的/etc/exports
文件
/tmp/nfs_data *(rw,sync,no_subtree_check,all_squash,anonuid=0,anongid=0)
另外一个Linux上通过mount -v -t nfs 198.19.249.104:/tmp/nfs_data /tmp/nfs_data
即可正常挂载。
Mac挂载Linux的NFS
Mac上不能够挂载虚拟机中的NFS文件夹,现在看上去是跨网段的挂载都不行,无论从VM挂Mac,还是Mac挂VM的。
mount_nfs: can't mount /tmp/nfs_data from 198.19.249.104 onto /private/tmp/nfs_data: Operation not permitted
mount: /private/tmp/nfs_data failed with 1
挂入Kubernetes
在Kubernetes里面,默认支持NFS。所以直接挂载成PersistentVolume,然后通过PVC挂入Deployment即可。以后想要修改啥,就直接放到NAS上,这样就可以直接挂进Kubernetes里面。
apiVersion: v1
kind: PersistentVolume
metadata:
name: synology-nas-pv
spec:
capacity:
storage: 20Gi # 按实际大小调整
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain # 建议设置为 Retain 避免数据误删
storageClassName: nfs-client # 添加这行,与 PVC 的 storageClassName 匹配
mountOptions:
- hard
- nfsvers=3 # 根据群晖支持的 NFS 版本调整(通常 3 或 4)
- tcp
- nolock
nfs:
path: /volume1/docker/macmini # 替换为群晖的 NFS 路径
server: 192.168.51.123 # 群晖 NAS 的 IP
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: synology-nas-pvc
spec:
storageClassName: nfs-client
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
volumeName: synology-nas-pv