如何使用 Blobfuse 将 Blob 存储装载为文件系统
本文以 Ubuntu18.04 为例,演示使用 Blobfuse 将 Blob 存储装载为文件系统。若要详细了解 Blobfuse,请阅读 Blobfuse 存储库中的详细信息。
安装 Blobfuse
wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install blobfuse
可将 URL 更改为 .../ubuntu/16.04/...
,使之指向 Ubuntu 16.04 发行版。其他 Linux 版本请参考这里。
准备装载
Blobfuse 要求文件系统中存在一个临时路径,用于缓冲和缓存任何打开的文件,以便提供类似本机的性能。 对于此临时路径,请选择性能最高的磁盘,或者使用 ramdisk 来获得最佳性能。请确保有足够的空间来容纳所有打开的文件。
(可选)将 ramdisk 用于临时路径
以下示例创建 16 GB 的 ramdisk,并创建适用于 Blobfuse 的目录。 请根据需要选择大小。 此 ramdisk 允许 Blobfuse 打开多个文件,只要其大小总计不超过 16 GB 。
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 提供低延迟缓冲区。 此临时磁盘在 Ubuntu 发行版中装载在 /mnt
上。
请确保用户可以访问临时路径:
sudo mkdir /mnt/blobfusetmp
sudo chown <youruser> /mnt/blobfusetmp
配置存储帐户凭据
Blobfuse 要求将凭据采用以下格式存储在文本文件 fuse_connection.cfg 中:
accountName myaccount
accountKey myaccesskey==
containerName mycontainer
blobEndpoint myaccount.blob.core.chinacloudapi.cn
创建此文件以后,请确保限制对它的访问权限,防止其他用户读取它。
chmod 700 fuse_connection.cfg
创建装载用的空目录
mkdir ~/mycontainer
装载
请以用户身份运行以下命令。 此命令将 /path/to/fuse_connection.cfg
中指定的容器装载到 /mycontainer
位置。 /path/to/fuse_connection.cfg
请使用全路径。
blobfuse ~/mycontainer --tmp-path=/mnt/blobfusetmp --config-file=/path/to/fuse_connection.cfg
参数说明:
--tmp-path=/path/to/cache
: 指定缓存文件的临时文件夹。为了更好的性能,建议配置 SSD 或 ramdisk。--config-file=/path/to/connection.cfg
: 指定访问 Blob 账号信息的配置文件。- [可选]
--use-https=true|false
: 对 Blob 访问是否启用 https。默认True
。 - [可选]
--file-cache-timeout-in-seconds=120
: 临时文件夹缓存内容过期时间。默认120
秒。指定此选项后,在过期时间之内,Blobfuse 将读取缓存中内容而不是从 Blob 下载最新内容。到过期时间后,临时文件夹中的内容会被删除。请确保临时文件夹有足够的空间容纳 Blob 内容,或者将该参数设为0
来加速缓存内容的清除。 - [可选]
--log-level=LOG_WARNING
: 可将日志写到 syslog。默认日志级别为LOG_WARNING by default
。可选日志级别为LOG_OFF|LOG_CRIT|LOG_ERR|LOG_WARNING|LOG_INFO|LOG_DEBUG
。
现在就可以通过常规文件系统 API 访问块 Blob。 请注意,装载的目录只能由装载它的用户访问,这样是为了确保访问安全。 如果希望所有用户都能够访问,可以通过选项 -o allow_other
进行装载。
cd ~/mycontainer
mkdir test
echo "hello world" > test/blob.txt
对于只读访问:
- 由于 Blob 会在临时文件夹缓存并停留一段时间(
--file-cache-timeout-in-seconds
指定),如果 Blob 资源被修改,这些改动将在缓存过期,且文件重新打开后获得。 - 将
--file-cache-timeout-in-seconds
设置为0
,可以忽略缓存而得到最新的文件内容。
对于读写访问:
- 在挂载 Blobfuse 后,不建议 编辑/ 修改/删除 临时文件夹中的内容。这么做有数据丢失风险。
- 当 container 被挂载后,该 container 中的数据只能被 Blobfuse 处理。
- 如果一个文件同时被多方编辑,每一方在关闭文件后都会将改动上传至 Blob 存储。