介绍
NFS,或网络文件系统,是一个分布式文件系统协议,允许您在您的服务器上安装远程目录. 这允许您在不同的位置管理存储空间,并从多个客户端写入该空间。
Block storage 是一个用于描述基于网络的存储量的一般术语,通常由托管提供商提供。 与 Object Storage不同,区块存储通常不提供其自身的直接访问API。 相反,它需要安装到现有服务器并从该服务器共享。
在本指南中,您将了解如何安装托管 NFS 服务器所需的软件,在服务器和客户端上配置两个 NFS 安装,并安装和卸载远程共享。
前提条件
您将在本教程中使用两个服务器,其中一个与另一个共享其文件系统的一部分。
- 两个 Ubuntu 服务器. 本教程将遵循我们对 Ubuntu 22.04 的最佳实践,但最新的 Ubuntu 或 Debian 版本也应该起作用。 每个版本都应该有一个具有
sudo
特权的非root用户,使用 UFW 设置的防火墙和私人网络,如果您可以使用它。
- 有关
sudo
特权和防火墙的非root用户设置的协助,请遵循我们的Initial Server Setup with Ubuntu 22.04](https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-22-04)
指南。 - 如果您正在为您的服务器和客户端使用DigitalOcean Droplets,您可以在我们的文档中阅读有关如何创建私人网络的更多信息。
在本教程中,共享其目录的服务器将被称为 ** 主机**,并将这些目录设置为 ** 客户端的服务器。 ** 主机 服务器应具有附加的区块存储量。如果您使用 DigitalOcean 区块存储,您可以遵循 创建和安装卷的文档.您还需要知道两个服务器的 IP 地址。
在本教程中,这些 IP 地址将被host_ip
和client_ip
所引用。
步骤 1 – 下载和安装组件
您将开始在每个服务器上安装所需的组件。
关于客人
在 host服务器上,安装nfs-kernel-server
包,这将允许您共享您的目录. 由于这是您在本会中使用apt
进行的第一个操作,因此在安装之前,请刷新本地包索引:
1sudo apt update
2sudo apt install nfs-kernel-server
安装这些包后,切换到客户端服务器。
关于客户
在客户端**服务器上,您需要安装一个名为nfs-common
的包,该包提供NFS功能,而不包括任何服务器组件。
1[environment second]
2sudo apt update
3sudo apt install nfs-common
<$>[注] 注: 也可以通过使用内置的操作系统功能连接到其他平台上的 NFS 共享。
现在,这两个服务器都有必要的包,你可以开始配置它们。
步骤 2 — 在主机上创建共享目录
在本教程中,您将创建一个使用默认 NFS 行为的通用 NFS 安装程序,以使具有 root 权限的用户难以与 client 机器使用这些 client 超级用户权限进行交互。
假设你的区块存储被安装在你的 ** 主机** 上的路径,如 /mnt/volume-nyc3-01
,你可以创建一个名为 `nfs’的目录在该卷内共享。
首先,创建共享目录:
1sudo mkdir -p /mnt/volume-nyc3-01/nfs
由于您正在使用sudo
创建该目录,因此目录属于 host的 root用户:
1ls -dl /mnt/volume-nyc3-01/nfs/
1[secondary_label Output]
2drwxr-xr-x 2 root root 4096 Sep 27 16:19 /mnt/volume-nyc3-01/nfs/
NFS 将在客户端上的任何 root 操作转换为nobody:nogroup
凭证作为安全措施,因此,您需要更改目录所有权以匹配这些凭证。
1sudo chown nobody:nogroup /mnt/volume-nyc3-01/nfs/
您现在已经准备好导出此目录。
步骤 3 — 在主机服务器上配置 NFS 导出
接下来,您将潜入NFS配置文件,以设置这些资源的共享。
在 host机上,在nano
中打开/etc/exports
文件或您喜爱的文本编辑器,使用 root权限:
1sudo nano /etc/exports
该文件包含评论,显示每个配置行的总体结构,语法如下:
1[label /etc/exports]
2directory_to_share client(share_option1,...,share_optionN)
您需要为您打算共享的每个目录创建一个行,请确保将这里显示的client_ip
位置保持器更改为您的实际 IP 地址:
1[label /etc/exports]
2/mnt/volume-nyc3-01/nfs/ client_ip(rw,sync,no_subtree_check)
在这里,您正在使用相同的配置选项对两个目录,除了no_root_squash
。
rw
:此选项使客户端计算机能够阅读和写入卷。sync
:此选项强迫NFS在回复之前将更改写到磁盘上。这导致一个更稳定和一致的环境,因为答案反映了远程卷的实际状态。然而,它也降低了文件操作的速度。no_subtree_check
: 此选项阻止了次要检查,这是一个过程,在那里主机必须检查文件是否实际上仍然可用于每个被导出的请求。这可能会导致许多问题,当文件被重新命名,而客户端已经打开它。在几乎所有情况下,最好禁用次要检查。no_otroot_squash
: 默认情况下
当您完成更改时,保存并关闭文件. 如果您正在使用nano
,请按Ctrl+X
,然后在提示时按Y
,然后输入。
1sudo systemctl restart nfs-kernel-server
然而,在您实际使用新共享之前,您需要确保通过防火墙规则允许访问该共享。
步骤 4 – 在主机上调整防火墙
首先,检查防火墙的状态,看看是否已启用,如果是,请查看当前允许的内容:
1sudo ufw status
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6OpenSSH ALLOW Anywhere
7OpenSSH (v6) ALLOW Anywhere (v6)
在您的系统上,只允许通过 SSH 流量,因此您需要为 NFS 流量添加规则。
在许多应用程序中,你可以使用sudo ufw app list
并以名义启用它们,但nfs
不是其中之一。然而,因为ufw
还检查服务的端口和协议,你仍然可以以名义添加NFS。
使用以下命令在 host上打开端口 2049
,确保取代您的 client IP 地址:
1sudo ufw allow from client_ip to any port nfs
您可以通过键入检查更改:
1sudo ufw status
您应该在输出中看到从端口2049
允许的流量:
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6OpenSSH ALLOW Anywhere
72049 ALLOW 203.0.113.24
8OpenSSH (v6) ALLOW Anywhere (v6)
这确认 UFW 将仅允许 NFS 流量从您的客户端机端口2049
。
步骤 5 – 在客户端上创建 Mount 点和 Mount 目录
现在,主机服务器已配置并服务其份额,您将准备您的客户端。
为了在 **客户端上提供远程共享,您需要将您想要共享的 **主机上的目录插入到 **客户端上的空目录中。
<$>[注] 注: 如果文件夹中有文件和目录,您将使用为安装点,它们将被隐藏,一旦您安装NFS共享。
创建一个目录为您的山脉:
1[environment second]
2sudo mkdir -p /nfs/general
现在你有位置将远程共享放置,并且你已经打开了防火墙,你可以使用你的主机服务器的IP地址来配置共享:
1[environment second]
2sudo mount host_ip:/mnt/volume-nyc3-01/nfs/ /nfs/general
此命令将该部分从主机安装到 client机器上。您可以通过多种方式双重检查它是否成功安装。您可以用mount
或findmnt
命令检查这一点,但df -h
提供了更可读的输出:
1[environment second]
2df -h
1[secondary_label Output]
2[environment second]
3Filesystem Size Used Avail Use% Mounted on
4tmpfs 198M 972K 197M 1% /run
5/dev/vda1 50G 3.5G 47G 7% /
6tmpfs 989M 0 989M 0% /dev/shm
7tmpfs 5.0M 0 5.0M 0% /run/lock
8/dev/vda15 105M 5.3M 100M 5% /boot/efi
9tmpfs 198M 4.0K 198M 1% /run/user/1000
1010.124.0.3:/mnt/volume-nyc3-01/nfs/ 25G 5.9G 19G 24% /nfs/general
您安装的份额显示在底部. 要查看每个安装点实际使用的空间,请使用磁盘使用命令du
和安装路径。
例如:
1[environment second]
2du -sh /nfs/general
1[secondary_label Output]
2[environment second]
34.0K /nfs/general
这表明,整个家庭目录的内容只使用可用空间的4K。
第6步:测试NFS访问
接下来,通过写一些东西来测试该份额的访问。
首先,写一个测试文件到 /mnt/volume-nyc3-01/nfs/
共享:
1[environment second]
2sudo touch /nfs/general/test
然后检查其所有权:
1[environment second]
2ls -l /nfs/general/test
1[secondary_label Output]
2[environment second]
3-rw-r--r-- 1 nobody nogroup 0 Sep 28 18:05 /nfs/general/test
因为你在不改变NFS的默认行为的情况下安装了这个卷,并通过sudo
命令创建了该文件作为 client机器的 root用户,因此文件的所有权默认为nobody:nogroup
。
步骤 7 — 在 Boot 上安装远程 NFS 目录
您可以在启动时自动安装远程 NFS 共享,将其添加到 client 上的 /etc/fstab
文件中。
在您的文本编辑器中打开此文件与 root 特权:
1[environment second]
2sudo nano /etc/fstab
在文件的底部,为您的每个股票添加一个行,它们将看起来像这样:
1[label /etc/fstab]
2[environment second]
3. . .
4host_ip:/mnt/volume-nyc3-01/nfs/ /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
<$>[注] 注: 您可以在 NFS 用户页面中找到有关您指定的选项的更多信息。
1[environment second]
2man nfs
美元
客户端将在启动时自动安装远程分区,但可能需要几分钟才能建立连接并使共享可用。
步骤 8 — 卸载 NFS 远程共享
如果您不再希望在您的系统上安装远程目录,则可以通过将其移出共享目录结构并卸载来卸载,如下:
1[environment second]
2cd ~
3sudo umount /nfs/general
请注意,该命令被命名为上
,而不是卸载
,正如你所期望的那样。
这将删除远程共享,只允许您访问本地存储:
1[environment second]
2df -h
1[secondary_label Output]
2[environment second]
3Filesystem Size Used Avail Use% Mounted on
4tmpfs 198M 972K 197M 1% /run
5/dev/vda1 50G 3.5G 47G 7% /
6tmpfs 989M 0 989M 0% /dev/shm
7tmpfs 5.0M 0 5.0M 0% /run/lock
8/dev/vda15 105M 5.3M 100M 5% /boot/efi
9tmpfs 198M 4.0K 198M 1% /run/user/1000
如果您还想防止他们在下一次重新启动时被远程安装,请编辑 /etc/fstab
,并通过在行开始时放置一个 #
字符来删除行或评论它。
结论
在本教程中,您创建了一个 NFS 主机,并通过创建一个 NFS 安装程序来说明一些关键的 NFS 行为,并与 NFS 客户端共享。
如果您想在生产中实现 NFS,重要的是要注意,协议本身不是加密的。在您通过私人网络共享的情况下,这可能不是一个问题。