NFS 服务器的主要配置是 /etc/exports 文件。
这是用于指定要与 NFS 客户端共享的目录的文件。
该文件的语法是:
Directory hostname(options)
Directory 的值应替换为我们要共享的目录的名称(例如,/usr/share/doc)。
值 hostname 应该是可以解析为 IP 地址的客户端主机名。
options 值用于指定应如何共享资源。
例如,/etc/exports 文件中的以下条目将与 NFS 客户端 client01(具有读写选项)和 NFS 客户端 client02(具有只读选项)共享 /usr/share/doc 目录):
# vi /etc/exports /usr/share/doc client01(rw) client02(ro)
请注意,client01 和 client02 名称/选项之间有一个空格,但主机名与其对应的选项之间没有空格。
新手管理员的一个常见错误是提供如下条目:
/usr/share/doc client01 (rw)
前一行将使用默认选项与 client01 主机共享 /usr/share/doc 目录,并且所有其他主机都可以以读写方式访问此共享。
在 /etc/exports 文件中指定主机名时,允许使用以下方法:
- 主机名:可以解析为 IP 地址的主机名。
- netgroup :使用@groupname 名称的 NIS 网络组。
- domain :使用通配符的域名。例如,*.onecoursesource.com 将包含 onecoursesource.com 域中的任何机器。
- 网络:由 IP 地址使用 VLSM(可变长度子网掩码)或者 CIDR(无类别域间路由)定义的网络。示例:192.168.1.0/255.255.255.0 和 192.168.1.0/24.
有许多不同的 NFS 共享选项,包括:
- rw :以读写方式共享。请记住,正常的 Linux 权限仍然适用。 (请注意,这是默认选项。)
- ro :以只读方式共享。
- sync :文件数据更改会立即到磁盘,这对性能有影响,但不太可能导致数据丢失。在某些发行版中,这是默认设置。
- async :与同步相反;文件数据更改最初是在内存中进行的。这会提高性能,但更有可能导致数据丢失。在某些发行版中,这是默认设置。
- root_squash :将根用户和组帐户从 NFS 客户端映射到匿名帐户,通常是 nobody 帐户或者 nfsnobody 帐户。有关更多详细信息,请参阅下一节“用户 ID 映射”。 (请注意,这是默认选项。)
- no_root_squash :将 root 用户和组帐户从 NFS 客户端映射到本地 root 和组帐户。
配置 NFS 客户端
挂载 NFS 共享与挂载分区或者逻辑卷没有太大区别。
首先创建一个普通目录:
# mkdir /access
接下来,使用 mount 命令挂载 NFS 共享:
# mount 192.168.1.22:/share /access
我们可以通过执行 mount 命令或者查看 /proc/mounts 文件来验证挂载是否成功。
查看 /proc/mounts 文件的好处是它提供了更多的细节:
# mount | tail -1 192.168.1.22:/share on /access type nfs (rw,addr=192.168.1.22)
# tail -1 /proc/mounts 192.168.1.22:/share /access nfs rw,relatime,vers=3,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp, timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.22,mountvers=3, mountport=772,mountproto=udp,local_lock=none,addr=192.168.1.22 0 0
如果重新启动 NFS 客户端,则系统启动后不会重新建立此挂载。
要使其在重新启动后持久挂载,请在 /etc/fstab 文件中添加如下所示的条目:
# tail -1 /etc/fstab 192.168.1.22:/share /access nfs defaults 0 0
将此条目添加到 /etc/fstab 文件后,卸载 NFS 共享(如有必要)并通过在执行 mount 命令时仅提供挂载点来测试新条目:
# umount /access # mount /access # mount | tail -1 192.168.1.22:/share on /access type nfs (rw,addr=192.168.1.22)
NFS 服务器命令
可以在 NFS 服务器上使用 exportfs 命令来显示当前共享的内容:
# exportfs /share [world]
exportfs 命令也可用于临时共享资源,假设 NFS 服务已经启动:
# exportfs -o ro 192.168.1.100:/usr/share/doc # exportfs /usr/share/doc 192.168.1.100 /share [world]
-o 选项用于指定共享选项。
该参数包括要共享的系统名称以及要共享的目录,以冒号 (:) 字符分隔。
如果我们对 /etc/exports 文件进行更改,则任何新添加的共享都将在重新启动后启用。
如果要立即启用这些更改,请执行以下命令:
# exportfs -a
nfsstat 命令可以显示有用的 NFS 信息。
例如,以下命令显示 NFS 客户端当前挂载的内容:
# nfsstat -m /access from 10.0.2.15:/share Flags: rw,vers=3,rsize=131072,wsize=131072,hard,proto=tcp,timeo=600, retrans=2,sec=sys,addr=10.0.2.15
showmount 命令显示类似信息:
# showmount -a All mount points on onecoursesource.localdomain: 10.0.2.15:/share
用户 ID 映射
为了使从 NFS 服务器到 NFS 客户端的资源共享过程尽可能透明,请确保在两个系统上使用相同的 UID(用户 ID)和 GID(组 ID)。