如何在 Ubuntu 16.04 上设置和配置 NFS

在本文中,我们将学习如何在 Ubuntu 16.04 网络文件系统 (NFS) 协议和文件系统上安装 NFS,该文件系统允许您从远程系统或服务器访问共享文件夹,还允许您作为远程目录挂载到服务器。这允许您在不同位置的不同客户端之间共享存储空间。NFS 一直是通过网络访问远程存储的最简单方法。

为了完成这个演示,我们需要两个安装了 Ubuntu 的系统和一个具有私有网络的 sudo 权限的用户。

在服务器上安装软件包

我们将安装“nfs-kernel”,这将允许我们共享服务器上的目录以共享文件和文件夹。下面是安装 nfs 包的命令。

$ sudo apt update
$ sudo apt install nfs-kernel-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
keyutils libnfsidmap2 libpython-stdlib libpython2.7-minimal
libpython2.7-stdlib libtirpc1 nfs-common python python-minimal python2.7
python2.7-minimal rpcbind
Suggested packages:
watchdog python-doc python-tk python2.7-doc binutils binfmt-support
The following NEW packages will be installed:
keyutils libnfsidmap2 libpython-stdlib libpython2.7-minimal
libpython2.7-stdlib libtirpc1 nfs-common nfs-kernel-server python
python-minimal python2.7 python2.7-minimal rpcbind
0 upgraded, 13 newly installed, 0 to remove and 98 not upgraded.
Need to get 4,375 kB of archives.
After this operation, 18.5 MB of additional disk s
Selecting previously unselected package libnfsidmap2:amd64.
(Reading database ... 56995 files and directories currently installed.)
..
…
…
currently installed.)
Processing triggers for ureadahead (0.100.0-19) ...
Processing triggers for systemd (229-4ubuntu4) ...
Setting up libnfsidmap2:amd64 (0.25-5) ...
Setting up libpython2.7-stdlib:amd64 (2.7.12-1~16.04) ...
Setting up python2.7 (2.7.12-1~16.04) ...
Setting up libpython-stdlib:amd64 (2.7.11-1) ...
Setting up python (2.7.11-1) ...
Setting up libtirpc1:amd64 (0.2.5-1) ...
Setting up keyutils (1.5.9-8ubuntu1) ...
Setting up rpcbind (0.2.3-0.2) ...
Setting up nfs-common (1:1.2.8-9ubuntu12) ...
Creating config file /etc/idmapd.conf with new version
Progress: [ 98%] [##########################################################]
Adding system user `statd' (UID 110) ...
Adding new user `statd' (UID 110) with group `nogroup' ...
Not creating home directory `/var/lib/nfs'.
nfs-utils.service is a disabled or a static unit, not starting it.
Setting up nfs-kernel-server (1:1.2.8-9ubuntu12) ...
Creating config file /etc/exports with new version
Creating config file /etc/default/nfs-kernel-server with new version
Processing triggers for libc-bin (2.23-0ubuntu3) ...
Processing triggers for ureadahead (0.100.0-19) ...########################.]
Processing triggers for systemd (229-4ubuntu4) ...

在客户端安装软件包

我们必须在客户端上安装 nfs 包,一般是 nfs-common,即提供从服务器访问 NFS 共享文件夹的包。

$ sudo apt update
$ sudo apt install nfs-common
apt install nfs-common
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
watchdog
The following NEW packages will be installed:
nfs-common
0 upgraded, 1 newly installed, 0 to remove and 98 not upgraded.
Need to get 185 kB of archives.
After this operation, 734 kB of additional disk space will be used.
Get:1 http://in.archive.ubuntu.com/ubuntu xenial/main amd64 nfs-common amd64 1:1 .2.8-9ubuntu12 [185 kB]
Fetched 185 kB in 1s (126 kB/s)
Selecting previously unselected package nfs-common.
(Reading database ... 57864 files and directories currently installed.)
Preparing to unpack .../nfs-common_1%3a1.2.8-9ubuntu12_amd64.deb ...
Unpacking nfs-common (1:1.2.8-9ubuntu12) ...
Processing triggers for ureadahead (0.100.0-19) ...
Processing triggers for systemd (229-4ubuntu4) ...
Setting up nfs-common (1:1.2.8-9ubuntu12) ...

在服务器上启用和创建共享目录

出于演示目的,我们将共享两个文件夹以区分配置、设置,第一个是具有超级用户权限,另一个是客户端系统上的受信任用户。

导出通用挂载

在这个例子中,我们将创建一个具有默认配置的通用 NFS 挂载,这对于在他们可以访问的客户端计算机上没有任何权限的用户来说是困难的,这可用于创建一个共享空间来将项目文件存储在文件夹中.

创建通用共享文件夹

$ sudo mkdir /usr/nfs/common –p

更改文件夹权限,以便任何人都可以在文件夹中写入

$ sudo chown nobody:nogroup /usr/nfs/common

现在尝试使用以下命令从客户端访问该文件夹

在客户端上挂载任何共享文件夹之前,我们需要在客户端计算机上创建一个挂载点

$ sudo mkdir /mnt/nfs/common
$ sudo mount 192.168.1.25:/usr/nfs/common /mnt/nfs/common

这将在客户端计算机上的服务器 192.168.1.25 上挂载 NFS 共享,/mnt/nfs/common 挂载在客户端计算机上的 /mnt/nfs/common 中,并且可以作为本地文件夹访问。

使用主目录创建共享文件夹

我们将共享存储在服务器上的用户主目录从客户端访问,方便管理用户所需的访问权限。

在服务器上配置 NFS 设置

当我们看到 2 种类型的 NFS 共享时,让我们看看如何配置设置以满足我们的要求。

使用编辑器打开 /etc/exports 文件

$ sudo vi /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)

将以下几行添加到配置文件中 –

/usr/nfs/common 192.168.1.100(rw,sync,no_subtree_check)
/home 192.168.1.100(rw,sync,no_root_squash,no_subtree_check)

以下是我们在上述命令中使用的每个选项的说明。

Rw -> 这将允许客户端计算机读取和写入共享。

同步 -> 这将允许数据在应用于查询之前写入 NFS 并且它也增加了一致的环境并且将是稳定的。

nosubtreecheck -> 这将阻止子树检查,如果我们启用此选项,如果客户端打开文件会导致很多问题。

Norootsquash -> 这将使来自客户端的 root 用户的 NFS 转换请求变成服务器的非特权用户,这也将阻止客户端上的 root 帐户以 root 身份使用服务器的文件系统。

$ sudo systemctl restart nfs-kernel-server

在客户端上挂载目录

之前,我们在客户端挂载共享文件夹,我们需要创建一个挂载点,我们会将共享文件夹从 NFS 服务器链接到本地文件夹(挂载点)。

$ mkdir /mnt/common
$ mkdir /mnt/home
$ sudo mount 192.168.1.100:/usr/nfs/common /mnt/common
$ sudo mount 192.168.1.100:/home /mnt/home

运行命令后,我们将不会验证 NFS 共享文件夹是否正确挂载

$ df –h
Filesystem Size Used Avail Use% Mounted on
udev 538M 0 538M 0% /dev
tmpfs 249M 628K 249M 2% /run
/dev/vda1 100G 10G 90G 10% /
tmpfs 445M 0 445M 0% /dev/shm
tmpfs 10.0M 0 10.0M 0% /run/lock
tmpfs 245M 0 245M 0% /sys/fs/cgroup
tmpfs 249M 0 249M 0% /run/user/0
192.168.1.100:/home 124G 11.28G 118.8G 9% /mnt/home
192.168.1.100:/usr/nfs/common 124G 11.28G 118.8G 9% /mnt/common

正如我们所看到的,它们都被挂载了,我们可以在底部看到它们,因为它们是从同一台服务器挂载的,所以我们可以看到相同的磁盘使用情况。

在引导时挂载 NFS 共享

我们可以在开机的时候挂载NFS共享,这样如果需要连接NFS共享文件夹,就可以直接访问挂载点的文件夹

打开 /etc/fstab 文件并添加以下行。

$ sudo vi /etc/fstab

在文件底部添加以下行

. . .
192.168.1.100:/usr/nfs/common /mnt/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
192.168.1.100:/home /mnt/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

卸载 NFS 共享文件夹

好像我们不想使用这些文件夹一样,我们可以使用以下命令卸载 NFS 共享文件夹

$ sudo umount /mnt/common
$ sudo umount /mnt/home

在上面的文章中,在 Ubuntu 16.04 上使用两个不同的 NFS 挂载设置和配置 NFS 共享,一个共享是打开的,任何人都可以读取或写入文件夹,而另一个是限制用户。