Linux 上的 NFS 

Last Update: 2023-11-25

目录

Linux NFS 服务端

安装服务

使用 RH 系发行版:

  1. 安装 nfs-utils 软件包 sudo dnf install nfs-utils
  2. 开机自动启动 nfs-server sudo systemctl enable --now nfs-server
  3. 开放端口
    • NFSv3 sudo firewall-cmd --add-service={rpc-bind,mountd,nfs} && sudo firewall-cmd --add-service={rpc-bind,mountd,nfs} --permanent
    • NFSv4 sudo sudo firewall-cmd --add-service=nfs && sudo firewall-cmd --add-service=nfs --permanent

使用 Debian 系发行版:

  1. sudo apt install nfs-kernel-server 安装 NFS 服务端
  2. sudo systemctl enable --now nfs-server.service 启动 NFS Server 并设置开机启动

执行 sudo exportfs -ra 可以让 NFS 根据 /etc/exports 文件重新载入配置。

exportfs 常用的选项有:

exports 常用配置参数

/etc/exports 管理 NFS 的共享配置,每个条目都有以下结构:

export host(options)
export host1(options1) host2(options2) host3(options3)
export *(options)

/mnt/mp_storage0 192.168.2.11(rw,async,root_squash,no_subtree_check)
/mnt/mp_backup *(ro,async,root_squash,no_subtree_check)

配置的选项有:

如果服务器支持 NFSv3 则客户端使用 sudo showmount --exports <server-ip> 查看有哪些共享目录。

如果服务器支持 NFSv4 则客户端可以直接挂载根目录后进行查找:

mount <my-server>:/ /mnt/
ls /mnt/

仅开启 NFSv4

NFSv4 只需要 TCP/UDP 2049 一个端口,也不需要 portmap 这个包。

只需要把 /etc/nfs.conf 中的:

[nfsd]
...
# vers3=y
...

改为:

[nfsd]
...
vers3=n
...

在 NFSv4 中,rpc 相关的服务已经没有用了,但依旧会随 nfs-server.service 启动。最后需要停掉它们:

sudo systemctl mask --now rpc-statd.service rpcbind.service rpcbind.socket

Linux NFS 客户端

使用 RH 系发行版: sudo dnf install nfs-utils 安装 nfs-utils 软件包。

使用 Debian 系发行版: sudo apt install nfs-common 安装 NFS 客户端与服务端。

注: 网上教程也有说用 sudo apt install nfs-client 只安装客户端就行。但是自从 Debian 11 开始的软件库里不再有 nfs-clientsudo apt install nfs-client 会被自动定向到安装 nfs-common

sudo showmount 192.168.1.10 -e 查看服务器共享了哪些文件夹。

在客户机上用 sudo mount -t nfs -o nfsvers=4 192.168.1.10:/mnt/hgst3ta ~/NetworkStorage/hgst3ta/ 挂载。

注: man nfs 可以查看所有的挂载选项。

sudo umount 192.168.1.10:/mnt/hgst3ta 卸载。

可以创建 ~/.config/systemd/user/mnt-r6-FreeBSDa-hgst3ta.service 在用户登入时执行挂载的 .service 文件。内容如下:

[Unit]
Description=Mount r6 vm100 2nd HGST 8T disk under %h/NetworkStorage/hgst3ta/.

[Service]
ExecStart=sudo mount.nfs4 192.168.1.10:/mnt/hgst3ta %h/NetworkStorage/hgst3ta/
ExecStop=sudo umount 192.168.1.10:/mnt/hgst3ta
RemainAfterExit=yes

[Install]
WantedBy=default.target

systemctl --user enable mnt-r6-FreeBSDa-hgst3ta.service 在用户登入后自动执行。