使用nfs挂载远程目录到本地进行开发的攻略 基于CentOS7、macOS


远程开发的方式有多种,比较方便的就是sftp。但是当22端口不可用时,sftp便不再可行了。这个时候,一种方便的方式就是mount远程目录到本地了。

本文基于CentOS 7 和macOS进行操作,具体版本如下:

服务器版本

#cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)

系统版本

macOS Big Sur 版本 11.6 (20G165)

服务器安装配置nfs服务

安装及启动

  • 安装nfs服务
yum install -y nfs-utils rpcbind
  • 启动nfs服务(也可以配置完再启动)
systemctl start nfs
systemctl start rpcbind
  • 配置随系统自动启动(也可以不配置)
systemctl enable nfs
systemclt enable rpcbind

配置可被挂载的目录

  • 配置文件位置
/etc/exports
  • 内容格式

可被挂载的目录 可访问的ip或者ip段 (选项)

例子

/home/nemo 10.10.0.18(rw,all_squash,anonuid=9527,anongid=9527,sync,insecure)

解释:/home/nemo是我想共享的目录,可以被10.10.0.18挂载,挂载选项是:rw,all_squash,anonuid=9527,anongid=9527,sync,insecure,no_subtree。具体含义见附录一。ip也是支持多格式的,见附录二。

重启服务,以生效配置

  • 重启nfs服务即可,命令如下:
systemctl restart nfs

用户端(macOS)的配置

有两种方式,一种是简单粗暴的直接挂载。还有一种是用到再挂载,不用自动取消挂载。

第一种方式,直接挂载

命令如下:

sudo mount -o vers=4 -t nfs SERVER:/EXPORT/DIR /LOCAL/DIR

例如:

sudo mount -o vers=4 -t nfs 192.168.1.2:/share ~/1.2

解释:把192.168.1.2上的/share文件夹映射到本地的~/1.2目录

第二种方式,自动挂载

需要用到automount,索性macOS自带。操作步骤如下:

  • 配置需要把挂载的目录放到哪里,修改配置文件:/etc/auto_master,在文件后边追加如下内容:
/Users/nemo auto_test

解释:/Users/nemo是我希望挂载的目录存放的位置,auto_test是挂载配置文件名,和/etc/auto_master做相对路径计算。当然也可以写绝对路径,但是在执行df -h的时候就没那么好看了。。。原文:

A map name beginning with / is the pathname of a file containing the map, otherwise the name represents a map to be found as a file in /etc or to be read from Directory Service (and thus from whatever sources Directory Service uses, such as NIS or LDAP servers).

  • 创建挂载的配置文件 /etc/auto_test,内容如下:
1.2 -rw,vers=4,bg,soft,rsize=32768,wsize=32768 192.168.1.2:/share

解释:

1.2即相对于/etc/auto_master中指定的根目录计算的,绝对路径为:/Users/nemo/1.2
-rw,vers=4,bg,soft,rsize=32768,wsize=32768为选项,具体含义见附录三。
192.168.1.2为远程服务器,/share为远程服务器上的绝对路径。

最终本地执行ls /Users/nemo/1.2的效果等同于在服务器上执行ls /share

  • 清空automount的缓存,使刚创建的配置生效:
sudo automount -vc

通过df -H -T nfs即可查看到刚挂载上的nfs文件夹了,例如:

Filesystem           Size   Used  Avail Capacity iused     ifree %iused  Mounted on
192.168.1.2:/share   537G    72G   465G    14%  130762 262012710    0%   /Users/nemo/1.2

附录一

rw               可读可写
ro               只读(还与文件系统的rwx有关)

sync             数据同步写入到内存与硬盘中
async            数据先暂存于内存当中,不会直接写入硬盘

wdelay           当有写操作,就会检查是否有相关的写操作,并在一起执行(默认设置)
no_wdelay        当有写操作就立即执行,通常要与sync配合使用

root_squash      当客户端登陆NFS的身份为root用户时,将客户端的root用户及所属组都映射为匿名用户或用户组(默认设置) 
no_root_squash   使客户端可以使用root身份及权限来操作共享的目录
all_squash       无论客户端登陆NFS的身份为何,都将映射为匿名用户
no_all_squash    无论客户端登陆NFS的身份为何,都将映射为root用户(默认设置)

anonuid          将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户
anongid          将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户

secure           使客户端只能从小于1024的tcp/ip端口连接服务端(默认设置)
insecure         允许客户端从大于1024的tcp/ip端口连接服务端

subtree          当共享的目录是一个子目录,服务端会检查其父目录的权限(默认设置)
no_subtree       当共享的目录是一个子目录,服务端不检查其父目录的权限

附录二

192.168.1.2      指定特定的的IP可以共享nfs目录
*                指定所有网段及ip都可以共享nfs目录
192.168.1.*      指定子网中的特定主机可以共享nfs目录
192.168.1.0/24   指定子网中的所有主机都可以共享nfs目录
example.com      指定域名的主机可以共享nfs目录

附录三

见:https://linux.die.net/man/5/nfs

参考


《“使用nfs挂载远程目录到本地进行开发的攻略 基于CentOS7、macOS”》 有 1 条评论

  1. 实测,自动挂载没啥意义,macOS会在连接不可用时提示挂载不可用。 当连接可用时,自动恢复挂载的可用性。基本就是无感的状态。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注