我想这确实很简单,但是每次还要翻文档,于是打算单独写出来。
服务端
- 安装服务端包:
1
| sudo apt install -y nfs-kernel-server nfs-common
|
- 在
/etc/exports配置文件中添加以下内容,保存退出1 2
| # </path/to/your/folder> <AllowSubnet>(options) /mnt/lab 172.20.19.0/24(rw,sync,no_root_squash)
|
- 重启并使相关服务开机自启:
1 2
| systemctl restart rpcbind nfs-server systemctl enable --now nfs-server rpcbind
|
客户端
- 安装客户端:
1
| sudo apt install -y nfs-common
|
- 在
/etc/fstab中添加nfs挂载:1 2
| # <NFSPath> <MountPath> <Format> <Options> <Check> <Bootable> 192.168.8.124:/mnt/lab /mnt/lab nfs defaults,nofail,noatime,async 0 2
|
- 挂载:
1
| systemctl daemon-reload && mount -a
|
参数
服务端
服务端在/etc/exports配置文件中的最后一部分有一些可选择的参数,用于控制特性和特殊行为。其中:可以指定多个 sec= 选项,以根据安全模式应用不同导出规则。选项不区分大小写,但建议使用小写。配置后,需要使用 exportfs -a 应用更改,并重启 NFS 服务。常见参数解释如下:
通用参数
| 选项名称 | 描述 |
|---|
| secure | 要求请求来自端口 < 1024(保留端口),默认启用。 |
| insecure | 允许来自端口 > 1024 的请求,禁用 secure。 |
| rw | 允许读写访问(与 ro 相反)。 |
| ro | 只读访问,默认行为(除非指定 rw)。 |
| async | 允许服务器在更改提交到稳定存储前回复请求,提高性能但可能丢失数据。 |
| sync | 确保更改提交到稳定存储后才回复请求(nfs-utils 1.0.0 后默认)。 |
| no_wdelay | 在 async 模式下禁用写请求延迟,提高小写操作性能。 |
| wdelay | 启用写请求延迟(async 未设置时的默认)。 |
| nohide | 防止文件系统在挂载到另一个导出文件系统下时被隐藏。 |
| hide | 允许隐藏子文件系统(默认)。 |
| crossmnt | 允许客户端无缝访问父文件系统下的子挂载点。 |
| no_subtree_check | 禁用子树检查,提高重命名文件时的可靠性(nfs-utils 1.1.0 后默认)。 |
| subtree_check | 启用子树检查(旧版本默认)。 |
| insecure_locks | 等同于 no_auth_nlm,禁用 NLM 锁请求认证。 |
| no_auth_nlm | 禁用 NLM 锁请求的认证,适用于旧客户端。 |
| auth_nlm | 要求 NLM 锁请求认证(默认)。 |
| secure_locks | 等同于 auth_nlm。 |
| no_acl | 防止 NFS 向客户端暴露 ACL(仅适用于支持 ACL 的内核)。 |
| mountpoint=path 或 mp=path | 仅当指定路径成功挂载时才导出(无路径时,导出点本身须为挂载点)。 |
| fsid=num\root\uuid | 显式设置 NFS 文件系统 ID(例如 fsid=0 为 NFSv4 根)。 |
| refer=path@host[+host][:path@host[+host]] | 将客户端重定向到备用位置。 |
| replicas=path@host[+host][:path@host[+host]] | 提供文件系统的备用副本列表。 |
用户 ID 映射选项
| 选项名称 | 描述 |
|---|
| root_squash | 将 UID/GID 0(root)映射到匿名用户(默认)。 |
| no_root_squash | 禁用 root 压缩,允许客户端 root 访问。 |
| all_squash | 将所有 UID/GID 映射到匿名用户,适用于公共目录。 |
| no_all_squash | 禁用 all_squash(默认,保留原始 UID/GID)。 |
| anonuid=num | 设置匿名 UID。 |
| anongid=num | 设置匿名 GID。 |
安全选项(sec=)
| 选项名称 | 描述 |
|---|
| sec=sys | 无加密安全(默认)。 |
| sec=krb5 | 使用 Kerberos 进行认证。 |
| sec=krb5i | Kerberos 认证 + 完整性保护。 |
| sec=krb5p | Kerberos 认证 + 完整性 + 隐私保护。 |
多客户端
在 NFS 的 /etc/exports 文件中,要同时允许多个特定 IP 地址(如 172.20.19.13/32 和 172.20.19.14/32)访问导出路径,可以在导出路径后用空格分隔这些主机/IP 地址。每个 IP 后跟子网掩码(如 /32 表示单个主机)。
1
| /mnt/lab 172.20.19.13/32 172.20.19.14/32 (rw,sync,no_root_squash)
|
也可以对同一导出目录做不同的权限和选项控制:
1
| /mnt/lab 172.20.19.13/32(ro) 172.20.19.14/32(rw)
|
客户端
访问和文件系统模式选项
| 选项名称 | 描述 |
|---|
| rw | 允许读写访问(默认)。 |
| ro | 只读访问。 |
| noexec | 禁止挂载文件系统上执行二进制文件。 |
| nosuid | 禁止 setuid 和 setgid 位(安全推荐)。 |
| nodev | 禁止解释设备文件(安全推荐)。 |
| noacl | 禁用 ACL(访问控制列表)处理,适用于旧系统兼容。 |
重试和中断行为选项
| 选项名称 | 描述 |
|---|
| hard | 默认行为:如果服务器不可达,重试直到成功(可能导致进程挂起)。 |
| soft | 超时后返回错误,不无限重试(适用于非关键挂载)。 |
| intr | 允许用户中断(Ctrl+C)挂起的 NFS 操作(默认)。 |
| nointr | 禁止中断 NFS 操作,防止数据损坏(适用于关键数据)。 |
| retry=n | 设置重试次数(默认 -1 表示无限;soft 模式下有效)。 |
性能和传输选项
| 选项名称 | 描述 |
|---|
| rsize=n | 读取块大小(字节),如 32768(默认根据 NFS 版本自动协商,最大 1MB)。 |
| wsize=n | 写入块大小(字节),类似 rsize。 |
| timeo=n | RPC 超时时间(以 1/10 秒为单位,默认 600)。 |
| retrans=n | RPC 重传次数(默认 2)。 |
| async | 异步写入,提高性能(默认)。 |
| sync | 同步写入,确保数据立即写入服务器。 |
| noac | 禁用属性缓存,确保最新属性(用于多客户端频繁访问)。 |
| actimeo=n | 属性缓存超时时间(秒),覆盖 acreg、acdir、acdirmax 等子选项(默认 3)。 |
| lookupcache=mode | 目录条目缓存模式(all/none/pos/positive,默认 all;内核 2.6.28+ 支持)。 |
协议和版本选项
| 选项名称 | 描述 |
|---|
| proto=tcp\udp | 传输协议(tcp 默认,推荐;udp 更快但不可靠)。 |
| vers=n | NFS 协议版本(2/3/4/4.0/4.1/4.2,默认最高支持版本,如 4.2)。 |
| nfsvers=n | 等同于 vers(兼容选项)。 |
| port=n | NFS 服务端口(默认 2049)。 |
| mountport=n | mountd 服务端口(默认从 portmapper 查询)。 |
| mountproto=tcp\udp | mountd 协议(默认 udp)。 |
| udp | 使用 UDP 协议(等同 proto=udp)。 |
| tcp | 使用 TCP 协议(等同 proto=tcp)。 |
安全和锁选项
| 选项名称 | 描述 |
|---|
| sec=sys\krb5\krb5i\krb5p | 安全模式(sys 默认无加密;krb5 Kerberos 认证;krb5i 带完整性;krb5p 带隐私)。 |
| lock | 启用文件锁(默认)。 |
| nolock | 禁用文件锁,适用于旧服务器。 |
挂载行为选项
| 选项名称 | 描述 |
|---|
| bg | 后台挂载(如果服务器不可达)。 |
| fg | 前台挂载(默认)。 |
| defaults | 等同于 rw,suid,dev,exec,auto,nouser,async,relatime(通用默认)。 |