说明:网络文件系统(NFS)是一种文件系统协议,允许类Unix系统的用户进行文件传输,通过网络访问文件,就像使用本地存储一样,类似还有Webdav、Samba文件传输协议。这对于跨Internet上的多个计算机数据传输或文件共享都很有用。例如,您可以通过访问NFS共享用户或系统配置文件的主目录。今天就来简单的介绍一下如何在 Debian 9 或 Ubuntu 16.04 系统中搭建NFS服务端和NFS客户端。
此教程的环境为:1. 两台服务器(一台作为NFS客户端、一台作为服务端)请最好保证能在同一个局域网内。否者数据传输将占用网络带宽。2. 本教程基于局域网的两台搭载 Debian 9 系统的机器上执行,如果你是 Ubuntu 16.04系统也可以进行参考,同样适用。
NFS服务器设置
在其中一台 Debian 9 机器搭建NFS服务器。按照下面步骤进行操作,首先更新软件源:
sudo apt update
安装 nfs-kernel-server
和portmap
:
sudo apt install nfs-kernel-serversudo apt-get install portmap
默认情况下,可以添加下面这行命令到/etc/hosts.deny
文件中来阻止访问NFS使用的服务。
rpcbind mountd nfsd statd lockd rquotad : ALL
如果要允许访问NFS用于客户端和localhost的服务。将以下行添加到您的/etc/hosts.allow
文件中,并替换example_IP
为客户端的IPv4地址。
rpcbind mountd nfsd statd lockd rquotad : 127.0.0.1 : allowrpcbind mountd nfsd statd lockd rquotad : example_IP : allowrpcbind mountd nfsd statd lockd rquotad : ALL : deny
创建共享
在本地文件系统中创建一个目录,作为NFS共享的根目录:
sudo mkdir /var/nfsroot
为NFS共享的根目录,分配权限:
sudo chown nobody:nogroup /var/nfsroot/
导出共享
将以下命令行添加到/etc/exports
主配置文件中,替换example_IP
为客户端的IPv4地址。(注意!ip地址和左括号之间没有空格,并且文件末尾有一个空行)
/var/nfsroot example_IP/(rw,sync,root_squash,subtree_check)
注:
/var/nfsroot
为NFS共享根目录;example_IP
请替换为预配置客户端的固定IP;rw
表示共享文件夹的读写权限;sync
表示文件系统的所有更改都会立即刷新到磁盘; 正在等待相应的写操作。
如果想让另外一台主机也可以挂载这个目录,那么直接在后面追加即可,比如
/var/nfsroot 192.168.2.110/(rw,sync,root_squash,subtree_check) 192.168.2.111/(rw,sync,root_squash,subtree_check)
使用以下命令导出共享目录:
sudo exportfs -ra
在服务器上重新启动NFS服务以使更改生效:
sudo systemctl restart nfs-kernel-server
现在本机中的目录/var/nfsroot
作为一个基本的NFS服务器根目录能正常使用,NFS服务端的已经完成。
NFS客户端设置
下面开始配置NFS客户端。请按照以下说明进行配置。首先更新软件源:
sudo apt update
安装NFS客户端软件包nfs-common
:
sudo apt install nfs-common
在客户端的系统中创建一个目录,作为挂载点:
sudo mkdir /mnt/remotenfs
使用nano
或者 vim
编辑器将下面这行命令添加到客户端的/etc/fstab
文件末尾,并注意替换example_IP
为服务器IP地址。
example_IP:/var/nfsroot /mnt/remotenfs nfs rw,async,hard,intr,noexec 0 0
运行命令,挂载文件系统:
sudo mount /mnt/remotenfs
搞定!现在可以访问remotenfs
目录来访问NFS服务器托管的文件系统,当然也可以根据之前的步骤,通过修改NFS服务端的 /etc/exports
文件在更多的客户端中使用。
要从客户端计算机卸载共享目录,请使用umount
命令卸载它。
umount /mnt/remotenfs
高级配置
NFS提供各种挂载选项。本教程我们使用的是读写权限访问,异步文件传输和可中断硬等待的标准行为,但您可以使用以下选项在NFS共享上配置其他行为。
客户端选项
可以fstab
在mount
命令中指定这些选项,也可以使用带有-o
开关的命令手动指定这些选项,后跟逗号分隔的挂载选项列表。
- rw:读/写文件系统;
- ro:只读文件系统。远程NFS客户端无法修改文件系统。
- hard:如果服务器出现故障,使用存储在NFS上的文件的应用程序将始终等待。除非
intr
设置了该选项,否则用户无法终止该过程; - soft:
timeo
如果服务器出现故障,使用存储在NFS上的文件的应用程序将等待指定的时间(使用该选项),之后将抛出错误。 - intr:允许用户中断等待NFS请求的进程。
- timeo = <num>:用于软选项。指定NFS请求的超时。
- nolock:禁用文件锁。适用于较旧的NFS服务器。
- noexec:禁用NFS共享上的二进制文件或脚本的执行。
- nosuid:阻止用户获得NFS共享文件的所有权。
- rsize = <num>:设置读取块数据大小。NFSv2和NFSv3上默认为8192,NFSv4上默认为32768。
- wsize = <num>:设置写入块数据大小。NFSv2和NFSv3上默认为8192,NFSv4上默认为32768。
服务器选项
可以在/etc/exports
条目中指定这些选项:
- rw:读/写文件系统。
- ro:强制客户端仅以只读文件系统模式进行连接。
- no_root_squash:客户端计算机上的root帐户将具有与服务器计算机上的root相同的权限级别。该选项具有安全隐患; 除非你确定需要,否则不要使用它。另一方面,root_squash导致客户端上的root与服务器上的nobody具有相同的访问类型 - 从而防止客户端上的root将不需要的文件传播到其他文件。
- no_subtree_check:禁用部分卷导出的文件位置检查。此选项将加快全量导出的传输速度。
- sync:强制所有传输在同步模式下运行,因此所有客户端都将等待,直到其操作完成。这可以避免在服务器崩溃时数据损坏。