如何在Ubuntu14.04上设置NFS挂载
介绍
NFS 或网络文件系统是一种分布式文件系统协议,允许您在服务器上挂载远程目录。 这使您可以利用不同位置的存储空间并轻松地从多个服务器写入相同的空间。 NFS 适用于必须定期访问的目录。
在本指南中,我们将介绍如何在 Ubuntu 14.04 服务器上配置 NFS 挂载。
先决条件
在本指南中,我们将在两个 Ubuntu 14.04 服务器之间配置目录共享。 这些可以是任何大小。 对于这些服务器中的每一个,您都必须设置一个具有 sudo 权限的帐户。 您可以按照我们的 Ubuntu 14.04 服务器 初始设置指南中的步骤 1-4 来了解如何配置此类帐户。
出于本指南的目的,我们将将共享其目录的服务器称为 主机 ,并将挂载这些目录的服务器称为 客户端 。
为了在整个指南中保持直截了当,我将使用以下 IP 地址作为主机和服务器值的替代:
- 主机:1.2.3.4
- 客户端:111.111.111.111
您应该将上面的值替换为您自己的主机和客户端值。
下载并安装组件
在开始之前,我们需要在主机和客户端服务器上安装必要的组件。
在主机服务器上,我们需要安装 nfs-kernel-server
包,这将允许我们共享我们的目录。 由于这是我们在此会话中使用 apt
执行的第一个操作,因此我们将在安装之前刷新本地包索引:
sudo apt-get update sudo apt-get install nfs-kernel-server
安装这些软件包后,您可以切换到客户端计算机。
在客户端计算机上,我们将不得不安装一个名为 nfs-common
的包,它提供 NFS 功能而无需包含服务器组件。 同样,我们将在安装之前刷新本地包索引,以确保我们拥有最新信息:
sudo apt-get update sudo apt-get install nfs-common
在主机服务器上创建共享目录
在本指南中,我们将尝试共享两个单独的目录。 我们要共享的第一个目录是包含用户数据的 /home
目录。
第二个是我们将专门为 NFS 创建的通用目录,以便我们可以演示正确的过程和设置。 这将位于 /var/nfs
。
由于 /home
目录已经存在,继续创建 /var/nfs
目录:
sudo mkdir /var/nfs
现在,我们有了一个专门用于与远程主机共享的新目录。 但是,目录所有权并不理想。 我们应该将用户所有权授予我们系统上名为 nobody
的用户。 我们也应该将组所有权授予我们系统上名为 nogroup
的组。
我们可以通过输入以下命令来做到这一点:
sudo chown nobody:nogroup /var/nfs
我们只需要更改专门用于共享的目录的所有权。 例如,我们不想更改 /home
目录的所有权,因为它会给我们主机服务器上的任何用户带来大量问题。
在主机服务器上配置 NFS 导出
现在我们已经创建并分配了目录,我们可以深入 NFS 配置文件来设置这些资源的共享。
使用 root 权限在文本编辑器中打开 /etc/exports
文件:
sudo nano /etc/exports
您看到的文件会有一些注释,向您展示每个配置行的一般结构。 基本上,语法类似于:
directory_to_share客户端( share_option1 , ... , share_optionN )
所以我们想为我们希望共享的每个目录创建一行。 由于在此示例中或客户端的 IP 为 111.111.111.111
,我们的行将如下所示:
/home 111.111.111.111 (rw,sync,no_root_squash,no_subtree_check) /var/nfs 111.111.111.111 (rw,sync,no_subtree_check)
除了我们启用的特定选项,我们已经解释了这里的所有内容。 现在让我们来看看这些。
- rw:此选项为客户端计算机提供对卷的读写访问权限。
- sync:此选项强制 NFS 在回复之前将更改写入磁盘。 这会产生更稳定和一致的环境,因为回复反映了远程卷的实际状态。
- no_subtree_check:此选项防止子树检查,这是主机必须检查文件是否在每个请求的导出树中实际上仍然可用的过程。 如果在客户端打开文件时重命名文件,这可能会导致许多问题。 在几乎所有情况下,最好禁用子树检查。
- no_root_squash:默认情况下,NFS 将来自 root 用户的请求远程转换为服务器上的非特权用户。 这应该是一项安全功能,不允许客户端上的 root 帐户以 root 身份使用主机的文件系统。 该指令对某些共享禁用此功能。
完成更改后,保存并关闭文件。
接下来,您应该通过键入以下内容来创建保存共享导出的 NFS 表:
sudo exportfs -a
但是,NFS 服务实际上还没有运行。 您可以通过键入以下内容来启动它:
sudo service nfs-kernel-server start
这将使您的共享对您配置的客户端可用。
在客户端服务器上创建挂载点和挂载远程共享
现在您的主机服务器已配置并使其目录共享可用,我们需要准备我们的客户端。
我们将不得不挂载远程共享,所以让我们创建一些挂载点。 我们将使用传统的 /mnt
作为起点,并在其下创建一个名为 nfs
的目录,以保持我们的共享。
实际目录将与它们在主机服务器上的位置相对应。 我们可以通过键入以下内容来创建每个目录和必要的父目录:
sudo mkdir -p /mnt/nfs/home sudo mkdir -p /mnt/nfs/var/nfs
现在我们有了放置远程共享的地方,我们可以通过寻址我们的主机服务器来挂载它们,在本指南中是 1.2.3.4
,如下所示:
sudo mount 1.2.3.4 :/home /mnt/nfs/home sudo mount 1.2.3.4 :/var/nfs /mnt/nfs/var/nfs
这些应该将共享从我们的主机安装到我们的客户端计算机上。 我们可以通过查看客户端服务器上的可用磁盘空间来仔细检查:
df -h
Filesystem Size Used Avail Use% Mounted on /dev/vda 59G 1.3G 55G 3% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 2.0G 12K 2.0G 1% /dev tmpfs 396M 324K 396M 1% /运行无 5.0M 0 5.0M 0% /run/lock 无 2.0G 0 2.0G 0% /run/shm 无 100M 0 100M 0% /run/user 1.2.3.4:/home 59G 1.3G 55G 3% /mnt/ nfs/家庭
正如您在底部看到的,只有我们的一个股票出现了。 这是因为我们导出的两个共享都在远程服务器上的同一个文件系统上,这意味着它们共享同一个存储池。 为了使 Avail
和 Use%
列保持准确,计算中只能添加一个份额。
如果要查看已挂载的所有 NFS 共享,可以键入:
mount -t nfs
1.2.3.4:/home on /mnt/nfs/home type nfs (rw,vers=4,addr=1.2.3.4,clientaddr=111.111.111.111) 1.2.3.4 :/var/nfs on /mnt/nfs/var/nfs 类型 nfs (rw,vers=4,addr=1.2.3.4,clientaddr=111.111.111.111)
这将显示您的客户端计算机上当前可访问的所有 NFS 挂载。
测试 NFS 访问
您可以通过向共享写入内容来测试对共享的访问。 您可以像这样将测试文件写入您的共享之一:
sudo touch /mnt/nfs/home/test_home
让我们将测试文件也写入另一个共享以演示一个重要的区别:
sudo touch /mnt/nfs/var/nfs/test_var_nfs
查看挂载的主目录中文件的所有权:
ls -l /mnt/nfs/home/test_home
-rw-r--r-- 1 root root 0 Apr 30 14:43 test_home
如您所见,该文件归根用户所有。 这是因为我们在此挂载上禁用了 root_squash
选项,该选项会将文件作为匿名非 root 用户写入。
在我们的另一个测试文件上,它是在 和 启用 root_squash
的情况下安装的,我们会看到一些不同的东西:
ls -l /mnt/nfs/var/nfs/test_var_nfs
-rw-r--r-- 1 nobody nogroup 0 Apr 30 14:44 test_var_nfs
如您所见,该文件被分配给“nobody”用户和“nogroup”组。 这遵循我们的配置。
自动挂载远程 NFS 目录
我们可以通过将远程 NFS 共享添加到客户端上的 fstab
文件来自动挂载远程 NFS 共享。
在文本编辑器中以 root 权限打开此文件:
sudo nano /etc/fstab
在文件的底部,我们将为每个共享添加一行。 它们看起来像这样:
1.2.3.4 :/home /mnt/nfs/home nfs auto,noatime,nolock,bg,nfsvers=4,intr,tcp,actimeo=1800 0 0 1.2.3.4 :/var/nfs /mnt/nfs/var/nfs nfs auto,noatime,nolock,bg,nfsvers=4,sec=krb5p,intr,tcp,actimeo=1800 0 0
我们在此处指定的选项可以在 fstab
文件中描述 NFS 挂载的手册页中找到:
man nfs
这将在启动时自动挂载远程分区(建立连接和共享可用可能需要一些时间)。
卸载 NFS 远程共享
如果您不再希望远程目录挂载到您的系统上,您可以通过移出共享目录结构并卸载来轻松卸载它,如下所示:
cd ~ sudo umount /mnt/nfs/home sudo umount /mnt/nfs/var/nfs
这将删除远程共享,只留下您的本地存储可访问:
df -h
Filesystem Size Used Avail Use% Mounted on /dev/vda 59G 1.3G 55G 3% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 2.0G 12K 2.0G 1% /dev tmpfs 396M 320K 396M 1% /run none 5.0M 0 5.0M 0% /run/lock none 2.0G 0 2.0G 0% /run/shm none 100M 0 100M 0% /run/user
如您所见,我们的 NFS 共享不再可用作存储空间。
结论
NFS 提供了一种通过网络访问远程系统的快速简便的方法。 但是,协议本身并未加密。 如果您在生产环境中使用它,请考虑通过 SSH 或 VPN 连接路由 NFS 以创建更安全的体验。