在 Linux 上挂载 Azure Blob 存储 — NetDrive Ubuntu 版

阅读时间 6 分钟 provider-guide azure linux
Casey
CaseyProduct Manager
使用 NetDrive 的实验性 Ubuntu 版本,将 Azure Blob 存储容器挂载为 Linux 挂载点——涵盖设置、身份验证与验证步骤。

某数据工程团队每晚都会将报表文件导出到一个 Azure Blob 存储容器,而负责重新处理这些文件的 Ubuntu 主机不应该为了读取一个文件就在每个脚本里都塞进 Azure SDK。该团队已经有 cpfind 和一堆能正常处理本地路径的 shell 管道。NetDrive 的 Linux 版本会把该容器挂载为其中一个本地路径,这样现有脚本就可以原样继续运行。

NetDrive drive manager showing Google Drive, S3 and pCloud mounted as drive lettersMounted clouds appearing as native drives in Windows File Explorer

在 Ubuntu 上挂载 Azure Blob 存储

NetDrive 让 Google Drive、OneDrive、S3、SFTP、WebDAV 等在 Windows 和 macOS 上显示为本地驱动器 — 无需同步,无需完整下载。

  • 运行于 NetDrive 实验性 Ubuntu 版本
  • 现有 shell 脚本通过普通挂载点进行读写
  • 后台上传,大文件不会阻塞调用进程
WindowsmacOS
下载 NetDrive for Linux →

免费试用。提供终身与订阅方案。

为什么挂载优于直接调用 Blob API 编写脚本

直接与 Azure Blob 存储对话,意味着要引入 Azure SDK 或 az storage blob CLI 命令,处理 SAS 令牌过期问题,并用当前任务所用语言编写重试逻辑。对单个脚本而言这还可以接受,但一旦有十几个 cron 任务和 CI 步骤都各自需要一套相同的管道代码,负担就会累积起来。挂载该容器则去掉了这一层——任何已经能读写本地路径的程序,都能以同样方式访问该挂载点。

NetDrive 在 3.11.204 版本(2020-07-22)中加入了 Azure Blob 存储支持,该版本同时也加入了 Azure 文件存储支持。在 Linux 上,该连接类型运行于 NetDrive 的实验性 Ubuntu 版本之上,而非经过更充分测试的 Windows 和 macOS 版本——在你把生产流水线指向它之前,这一点值得了解,因为 Linux 在 NetDrive 自己的对比页面上被标注为”实验性”。

Azure Blob 存储服务商图标 — NetDrive 在 Windows、macOS 和 Linux 上均支持 Azure Blob 存储

你需要从 Azure 门户获取的信息

在打开 NetDrive 之前,先收集以下三项信息:

  • 存储账户名称 — 在 Azure 门户中你的存储账户资源的概览页面上可以找到。
  • 容器名称 — 要挂载的具体 Blob 容器,例如 nightly-exports
  • 身份验证凭据 — 可以是主账户密钥(Azure 门户 → 存储账户 → Security + networkingAccess keys),也可以是限定于该容器的共享访问签名(SAS)令牌。对于无人值守的主机来说,将过期时间与你的凭据轮换策略对齐的 SAS 令牌是更安全的选择。

你还需要 Ubuntu 16.04 或更高版本,并在主机防火墙上开放到 Azure 存储终结点的出站访问。

在 Ubuntu 上安装 NetDrive

NetDrive for Linux 并未收录在 Ubuntu 的默认软件仓库中,因此安装要通过 GitHub 而非 apt 完成:

  1. 前往 github.com/NetDrive/installer,下载与你的 Ubuntu 版本匹配的发行版。
  2. 安装前先查看该发行版的版本说明——需要先加载一个驱动组件,否则连接将无法挂载。
  3. 安装该软件包,然后启动一次 NetDrive 以加载驱动。根据主机的配置情况,此步骤可能会提示输入 sudo

分步操作:连接一个 Azure Blob 容器

  1. 打开 NetDrive 的 Drive Manager,点击 + Add Drive
  2. 从服务商列表中选择 Azure Blob Storage

NetDrive Drive Manager 界面,显示可添加的多种云连接

  1. 输入从 Azure 门户获取的 Account NameContainer
  2. 将账户密钥或 SAS 令牌粘贴到身份验证字段中
  3. 设置挂载点,例如 /mnt/azure-exports,然后点击 Connect

在任务依赖挂载点之前先验证

在让无人值守任务依赖该挂载点之前,先确认挂载确实生效:

# Confirm the mount is listed
mount | grep azure-exports

# Or just list it
ls /mnt/azure-exports

确认设置完成后连接的驱动器已成功挂载

如果目录显示为空,或挂载始终没有出现,先检查主机防火墙是否允许通往 Azure 存储终结点的出站流量,再去怀疑凭据有问题——在锁定较严的构建服务器上,被阻断的端口比错误的 SAS 令牌更常见。

排查失败连接时检查网络端口是否可达

在 Linux 版本上需要留意的事项

  • 发布节奏不同。 为 Windows 或 macOS 发布的修复不会自动在同一周内登陆 Linux 版本。
  • 没有 apt 集成。 更新来自 GitHub 发行版而非包管理器,因此追踪新版本需要手动进行。
  • Windows 和 macOS 获得更深入的测试。 从 Azure Blob 存储读取的夜间导出任务,适合放在 Linux 版本上运行;但在将其置于无人值守的生产流水线之后前,要先做充分测试。

总结

在 Ubuntu 上挂载 Azure Blob 存储容器,能让 Linux 主机获得与 NetDrive 在 Windows 和 macOS 上相同的驱动器式访问方式,而无需围绕 Azure SDK 重写脚本。关于同一服务商在测试更充分的平台上的使用方法,请参阅在 Windows 上挂载 Azure Blob 存储在 macOS 上挂载 Azure Blob 存储;关于更全面的 Linux 内容,请参阅 NetDrive on Ubuntu Linux

— Casey, NetDrive