在 Debian 11 上部署 NFS 服务器

1. NFS 工作原理

nfs

  • 首先服务器端启动 RPC 服务,并开启 111 端口
  • 服务器端启动 NFS 服务,并向 RPC 注册端口信息
  • 客户端启动 RPC(portmap 服务),向服务端的 RPC 服务请求服务端的 NFS 端口
  • 服务端的 RPC 服务反馈 NFS 端口信息给客户端
  • 客户端通过获取的 NFS 端口来建立和服务端的 NFS 连接并进行数据的传输

2. 服务端配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 安装NFS服务
$ sudo apt install nfs-kernel-server

# 准备共享目录
$ sudo mkdir /data
$ sudo chown -R liubin:liubin /data
$ mkdir /data/nfs
$ chmod 777 /data/nfs

# 配置NFS
$ sudo vi /etc/exports
/data/nfs 10.4.7.0/24(rw,sync,no_subtree_check)
#/data/nfs 10.4.7.202(rw,sync,no_subtree_check) 10.4.7.203(rw,sync,no_subtree_check)

# 重启生效配置
$ sudo systemctl restart nfs-kernel-server

# 验证
$ sudo showmount -e 10.4.7.201
Export list for 10.4.7.201:
/data/nfs 10.4.7.0/24
  • ro:以只读方式挂载
  • rw:以读写方式挂载
  • sync:同时将数据写入到内存与硬盘中,保证不丢失数据
  • async:优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
  • no_subtree_check:指定主机不应检查通过主机文件系统访问的文件的位置
  • subtree_check:指定在导出目录而不是整个文件系统的情况下,主机应验证主机文件系统上文件和目录的位置
  • no_root_squash:当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的匿名用户
  • root_squash:当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的 root 管理员
  • all_squash:无论 NFS 客户端使用什么账户访问,均映射为 NFS 服务器的匿名用户

3. 客户端挂载配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 安装NFS依赖
$ sudo apt install nfs-common

# 创建目录,挂载共享目录
$ sudo mkdir /data
$ sudo chown -R liubin:liubin /data
$ mkdir /data/nfs
$ sudo mount -t nfs4 10.4.7.201:/data/nfs /data/nfs

# 使系统每次启动时都能自动挂载
$ sudo vim /etc/fstab
10.4.7.201:/data/nfs /data/nfs nfs4 defaults,user,exec 0 0

# 使文件/etc/fstab生效
$ sudo mount -a

# 验证
$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
......
10.4.7.201:/data/nfs nfs4 19G 4.4G 14G 25% /data/nfs
  • 如果不确定共享在客户端上是否始终可用,可添加 noauto 到选项列表中以防止系统尝试自动挂载
1
10.4.7.201:/data/nfs /data/nfs nfs4 defaults,user,exec,noauto 0 0

4. 使用 autofs 自动挂载

  • autofs 的主配置文件中按照 <挂载目录的上层目录> <子配置文件> 的格式填写,具体的挂载信息写入到子配置文件中,方便日后管理和维护
1
2
3
4
5
6
7
8
9
10
11
12
$ sudo apt install autofs
$ sudo mkdir -p /data/mynfs
$ sudo vim /etc/auto.master
/data /etc/auto.test
$ sudo vim /etc/auto.test
mynfs -fstype=nfs,rw,sync 10.4.7.201:/data/nfs
$ sudo systemctl reload autofs

$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
......
10.4.7.201:/data/nfs nfs4 19G 4.4G 14G 25% /data/mynfs

参考