本文指示了如何使用网络文件系统 (NFS) 3.0 协议从基于 Linux 的 Azure 虚拟机 (VM) 或本地运行的 Linux 系统在 Azure Blob 存储中装载容器。 要详细了解 Blob 存储中的 NFS 3.0 协议支持,请参阅 Azure Blob 存储支持的网络文件系统 (NFS) 3.0 协议。
步骤 1:创建 Azure 虚拟网络
存储帐户必须包含在虚拟网络中。 虚拟网络使客户端能够安全地连接到存储帐户。 要详细了解 Azure 虚拟网络以及如何创建虚拟网络,请参阅虚拟网络文档。
同一虚拟网络中的客户端可以在帐户中装载容器。 还可以从在本地网络中运行的客户端装载容器,但必须先将本地网络连接到虚拟网络。 有关详细信息,请参阅 支持的网络连接。
步骤 2:配置网络安全
目前,保护存储帐户中数据的唯一方法就是使用虚拟网络和其他网络安全设置。 有关详细信息,请参阅 Blob 存储的网络安全建议。
用于保护数据的任何其他工具都不能用于授权 NFS 3.0 请求。 工具包括帐户密钥授权、Microsoft Entra 安全性和访问控制列表(ACL)。 如果为命名用户或组将条目添加到 Blob 或目录的 ACL 中,则该文件在客户端上对于非 root 用户将变得不可访问。 必须删除该条目才能还原对客户端上非根用户的访问权限。
重要
NFS 3.0 协议使用端口 111 和 2048。 如果要从本地网络进行连接,请确保客户端允许通过这些端口进行传出通信。 如果授予了对特定虚拟网络的访问权限,请确保与这些虚拟网络关联的任何网络安全组不包含阻止通过这些端口传入通信的安全规则。
步骤 3:创建和配置存储帐户
要使用 NFS 3.0 装载容器,必须创建一个存储帐户。 不能启用现有帐户。
标准常规用途 v2 存储帐户和高级块 Blob 存储帐户支持 NFS 3.0 协议。 有关这些类型的存储帐户的详细信息,请参阅存储帐户概述。
若要配置帐户,请选择以下值。
| 设置 | 卓越性能 | 标准性能 |
|---|---|---|
| 位置 | 所有可用区域 | 所有可用区域 |
| 性能 | 高级 | 标准 |
| 帐户种类 | BlockBlobStorage | 常规用途 V2 |
| 复制 | 本地冗余存储(LRS)、区域冗余存储(ZRS) | 本地冗余存储(LRS)、区域冗余存储(ZRS) |
| 连接方法 | 公共终结点(所选网络)或专用终结点 | 公共终结点(所选网络)或专用终结点 |
| 分层命名空间 | 已启用 | 已启用 |
| NFS V3 | 已启用 | 已启用 |
对于所有其他设置,可接受默认值。
步骤 4:创建容器
使用以下任何工具或 SDK 在存储帐户中创建容器。
| 工具 | SDK |
|---|---|
| Azure 门户 | .NET |
| AzCopy | 爪哇岛 |
| PowerShell | Python |
| Azure CLI | JavaScript |
| 休息 |
默认情况下,新容器的root squash选项为“no root squash”。 可以将此选项更改为 Root Squash 或 All Squash。 有关这些 Squash 选项的信息,请参阅操作系统文档。
下图展示了在 Azure 门户中显示的 Squash 选项。
步骤 5:安装 AZNFS 装载帮助程序包
AZNFS 装载帮助程序包可帮助 Linux NFS 客户端可靠地访问 Azure Blob NFS 共享,即使终结点的 IP 地址发生更改也是如此。 此包运行名为 aznfswatchdog的后台作业,用于监视对已装载共享的终结点 IP 地址的更改。
如果检测到更改,此后台作业会更新目标网络地址转换 (DNAT) 规则。 若要了解详细信息,请参阅 AZNFS 装载帮助程序。
确定是否在客户端上安装了 AZNFS 装载帮助程序包。
systemctl is-active --quiet aznfswatchdog && echo -e "\nAZNFS mounthelper is installed! \n"如果已安装包,将显示该消息
AZNFS mounthelper is installed!。如果未安装包,请使用以下命令进行安装:
wget -O - -q https://github.com/Azure/AZNFS-mount/releases/latest/download/aznfs_install.sh | bash
以下 Linux 分发版支持 AZNFS:
Ubuntu (18.04 LTS、20.04 LTS、22.04 LTS、24.04 LTS)
RedHat7、RedHat8、RedHat9、RedHat10
Rocky8、Rocky9
CentOS7、CentOS8
SUSE (SLES 15)
提示
AZNFS 3.0 现在以公共预览版提供。 此版本提供更高的吞吐量,支持更大的文件,增强元数据性能,并消除用户组限制。 若要了解有关尝试 AZNFS 3.0 的改进和查看说明,请参阅 AZNFS wiki。
步骤 6:装载容器
在 Linux 系统中创建目录,然后将容器装载到存储帐户中。
在 Linux 系统中,创建目录:
mkdir -p /nfsdata使用下列方法之一装载容器。 在这两种方法中,请将
<storage-account-name>占位符替换为存储帐户的名称。 将<container-name>替换为您的容器名称。要在重新启动时自动装载共享,请执行以下操作:
通过添加以下行在
/etc/fstab文件中创建条目:<storage-account-name>.blob.core.chinacloudapi.cn:/<storage-account-name>/<container-name> /nfsdata aznfs defaults,sec=sys,vers=3,nolock,proto=tcp,nofail,_netdev 0 0运行以下命令以立即处理
/etc/fstab条目并尝试装载前面的路径:mount /nfsdata
对于在重新启动后不会持续存在的临时装载,请运行以下命令:
mount -t aznfs -o sec=sys,vers=3,nolock,proto=tcp <storage-account-name>.blob.core.chinacloudapi.cn:/<storage-account-name>/<container-name> /nfsdata通过使用
-t aznfs装载选项,可确保即使终结点 IP 在装载后发生更改,NFS 客户端也始终正确连接到存储终结点。 如果该终结点的 IP 地址发生更改,则使用-t nfs装载选项装载的 NFS 共享可能与存储终结点断开连接。mount 命令提供其他可选参数。 这些参数主要影响客户端行为。
sys值是sec选项支持的唯一值。装载
nconnect选项仅适用于支持 Azurenconnect的客户端。 在不支持的客户端上使用此选项nconnect可降低吞吐量,并导致命令超时或工作不正确。若要详细了解如何确保客户端支持 Azure
nconnect,请参阅 “增加 TCP 连接数”。
解决常见错误
| 错误 | 原因/解决方法 |
|---|---|
Access denied by server while mounting |
请确保客户端在支持的子网中运行。 有关详细信息,请参阅 支持的网络位置。 |
No such file or directory |
请确保直接在终端中输入(而不是复制和粘贴)装载命令及其参数。 如果你将该命令的任何部分从另一个应用程序复制并粘贴到终端,粘贴的信息中的隐藏字符可能会导致出现此错误。 如果没有为 NFS 3.0 启用帐户,也可能出现此错误。 |
Permission denied |
新创建的 NFS 3.0 容器的默认模式为 0750。 非根用户没有权访问卷。 如果需要从非根用户访问,则根用户必须将模式更改为 0755。 下面是一个示例命令: sudo chmod 0755 /nfsdata |
EINVAL ("Invalid argument") |
此错误可能出现在客户端尝试以下操作时:
|
EROFS ("Read-only file system") |
此错误可能出现在客户端尝试以下操作时:
|
NFS3ERR_IO/EIO ("Input/output error") |
当客户端尝试读取、写入或设置存储在存档访问层中的 blob 的属性时,可能会出现此错误。 |
OperationNotSupportedOnSymLink 错误 |
在通过 Blob 存储或 Azure Data Lake Storage API 执行写入操作期间,可能会返回此错误。 不允许使用这些 API 编写或删除使用 NFS 3.0 创建的符号链接。 请确保使用 NFS 3.0 终结点来处理符号链接。 |
mount: /nfsdata: bad option; |
使用 sudo apt install nfs-common 安装 NFS 帮助程序。 |
Connection Timed Out |
确保客户端允许通过端口 111 和 2048 进行传出通信。 NFS 3.0 协议使用这些端口。 请确保使用 Blob 存储终结点而不是 Data Lake Storage 终结点装载存储帐户。 |
AZNFS 装载帮助程序的限制和故障排除
有关详细信息,请参阅 AZNFS 装载帮助程序。