如何使用 BlobFuse v1 将 Azure Blob 存储装载为文件系统

重要

BlobFuse2 是最新版本的 BlobFuse,对本文讨论的版本 (BlobFuse v1) 进行了许多重大改进。 若要了解 BlobFuse2 中的改进,请参阅 BlobFuse2 增强功能列表

BlobFuse 是 Azure Blob 存储的虚拟文件系统驱动程序。 BlobFuse 允许通过 Linux 文件系统访问存储帐户中的现有块 Blob 数据。 BlobFuse 使用虚拟目录方案,并使用正斜杠“/”作为分隔符。

本指南介绍如何使用 BlobFuse v1,以及如何在 Linux 上装载 Blob 存储容器并访问数据。 若要了解有关 BlobFuse v1 的详细信息,请参阅自述文件Wiki

警告

BlobFuse 不保证 100% 的 POSIX 符合性,因为它只是将请求转换成 Blob REST API。 例如,重命名操作在 POSIX 中是原子操作,但在 Blobfuse 中不是。 有关本机文件系统和 BlobFuse 之间差异的完整列表,请访问 BlobFuse 源代码存储库

在 Linux 上安装 BlobFuse v1

适用于 Ubuntu、Debian、SUSE、CentoOS、Oracle Linux 和 RHEL 发行版的 Blobfuse 二进制文件通过适用于 Linux 的 Microsoft 软件存储库提供。 若要在这些发行版上安装 BlobFuse,请从列表中配置其中一个存储库。 如果你的发行版没有可用的二进制文件,还可以按照 Azure 存储安装步骤从源代码生成二进制文件。

对于 Ubuntu 版本,BlobFuse 将发布在 Linux 存储库中:16.04、18.04 和 20.04,RHEL 版本:7.5、7.8、7.9、8.0、8.1、8.2,CentOS 版本:7.0、8.0,Debian 版本:9.0、10.0,SUSE 版本:15,Oracle Linux 8.1。 运行以下命令以确保你已部署了以下版本之一:

cat /etc/*-release

配置 Microsoft 包存储库

配置 Microsoft 产品的 Linux 包存储库

例如,在 Redhat Enterprise Linux 8 发行版中:

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/8/packages-microsoft-prod.rpm

类似地,将 URL 更改为 .../rhel/7/...,使之指向 Redhat Enterprise Linux 7 发行版。

安装 BlobFuse v1

sudo yum install blobfuse

准备装载

BlobFuse 要求文件系统中存在一个临时路径,用于缓冲和缓存任何打开的文件,以便提供类似本机的性能。 对于此临时路径,请选择性能最高的磁盘,或者使用 ramdisk 来获得最佳性能。

注意

BlobFuse 将所有打开的文件内容存储在临时路径中。 请确保有足够的空间来容纳所有打开的文件。

(可选)将 ramdisk 用于临时路径

以下示例创建一个 16 GB 的 ramdisk,并创建一个用于 BlobFuse 的目录。 请根据需要选择大小。 此 ramdisk 允许 BlobFuse 打开多个文件,只要其大小总计不超过 16 GB 即可。

sudo mkdir /mnt/ramdisk
sudo mount -t tmpfs -o size=16g tmpfs /mnt/ramdisk
sudo mkdir /mnt/ramdisk/blobfusetmp
sudo chown <youruser> /mnt/ramdisk/blobfusetmp

将 SSD 用作临时路径

在 Azure 中,可以使用 VM 上提供的临时磁盘 (SSD),为 BlobFuse 提供低延迟缓冲区。 根据所使用的预配代理,临时磁盘将装载到 cloud-init 的“/mnt”或 waagent VM 的“/mnt/resource”上。

请确保用户有权访问该临时路径:

sudo mkdir /mnt/resource/blobfusetmp -p
sudo chown <youruser> /mnt/resource/blobfusetmp

授权访问存储账户

可以使用帐户访问密钥、共享访问签名、托管标识或服务主体来授权访问存储帐户。 可以在命令行、配置文件或环境变量中提供授权信息。 有关详细信息,请参阅 BlobFuse 自述文件中的有效身份验证设置

例如,假设你正在使用帐户访问密钥进行授权,并将其存储在配置文件中。 配置文件应采用以下格式:

accountName myaccount
accountKey storageaccesskey
containerName mycontainer
authType Key
blobEndpoint myaccount.blob.core.chinacloudapi.cn

accountName 是存储帐户的名称,而不是完整的 URL。 需要用你的存储信息更新 myaccountstorageaccesskeymycontainer

使用以下内容创建此文件:

sudo touch /path/to/fuse_connection.cfg

创建并编辑此文件以后,请确保限制对它的访问权限,防止其他用户读取它。

sudo chmod 600 /path/to/fuse_connection.cfg

注意

如果已在 Windows 上创建了配置文件,请确保运行 dos2unix 以清理该文件并将其转换为 Unix 格式。

创建装载用的空目录

sudo mkdir ~/mycontainer

装载

注意

有关装载选项的完整列表,请查看 BlobFuse 存储库

若要装载 BlobFuse,请以用户身份运行以下命令。 此命令将“/path/to/fuse_connection.cfg”中指定的容器装载到“/mycontainer”位置。

sudo blobfuse ~/mycontainer --tmp-path=/mnt/resource/blobfusetmp  --config-file=/path/to/fuse_connection.cfg -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120

注意

如果使用 ADLS 帐户,则必须包含 --use-adls=true

现在应该可以通过常规文件系统 API 访问块 Blob。 装载该目录的用户是可以访问它的唯一人员,默认情况下,这可以保护访问权限。 若要允许所有用户进行访问,可以通过选项 -o allow_other 进行装载。

sudo cd ~/mycontainer
sudo mkdir test
sudo echo "hello world" > test/blob.txt

持久保留装载

若要了解如何持久保留装载,请参阅 BlobFuse wiki 中的持久保留

功能支持

启用 Data Lake Storage Gen2、网络文件系统 (NFS) 3.0 协议或 SSH 文件传输协议 (SFTP) 可能会影响对此功能的支持。 如果已启用这些功能中的某一项,请参阅 Azure 存储帐户中的 Blob 存储功能支持,以评估对此功能的支持。

后续步骤