将数据从本地 POSIX 文件系统迁移到 Azure 托管 Lustre

本文介绍如何使用 Azure Blob 存储作为中介将数据从本地 POSIX 文件系统迁移到 Azure 托管 Lustre。 此方法使用 AzCopy 将数据上传到 Blob 容器,同时保留 POSIX 属性,然后将数据从 Blob 容器导入 Azure 托管 Lustre 文件系统。

概述

Azure Managed Lustre 与 Azure Blob 存储集成,从而使其在从本地环境迁移数据时用作暂存区域。

使用 Azure Blob 存储作为中介

使用 Azure Blob 存储作为数据迁移中的中介与使用传统 POSIX 协议(如 NFS 或 SMB)直接将数据复制到文件系统相比,具有多种优势:

  • 从 Azure 外部访问基于 REST API 的服务:Azure Blob 存储公开 REST API,可从任何具有 Internet 连接的网络访问。 这简化了从本地环境的数据传输,而无需通过 VPN 或 ExpressRoute 连接进行初始数据上传,并通过共享访问签名(SAS)令牌或Microsoft Entra ID 提供精细的访问控制。 如果安全要求不允许公共 Internet 访问,还可以配置 专用终结点 ,并使用 VPN 或 Azure ExpressRoute 将所有流量保留在专用网络上。
  • 在高延迟条件下提高性能:AzCopy 经过优化,用于通过高延迟连接传输数据。 它使用并行连接、自动重试和可恢复传输,这些传输明显优于传统的基于 POSIX 的协议(如 NFS 或 SMB),这些协议对网络延迟敏感,并且可能会经历长距离的严重吞吐量下降。
  • 分离暂存和导入:将数据上传到 Blob 存储首先允许独立于 Azure 托管 Lustre 文件系统暂存数据,验证传输,然后在方便的时候导入。

迁移步骤

迁移过程包括两个主要步骤:

  1. 将数据上传到 Azure Blob 存储:使用 AzCopy 将数据从本地 POSIX 文件系统复制到 Azure Blob 存储容器。 AzCopy 在传输过程中保留 POSIX 属性,例如所有权、权限和时间戳。
  2. 将数据导入 Azure 托管 Lustre:使用导入作业将数据从 Blob 容器引入 Azure 托管 Lustre 文件系统。 导入期间会自动应用存储在 Blob 元数据中的 POSIX 属性。

先决条件

在开始迁移之前,请确保已准备好以下资源和配置:

  • Azure 托管 Lustre 文件系统:一个已配置 Blob 集成的现有文件系统。 Blob 集成必须在文件系统创建时进行配置,以后无法添加。 如果还没有文件系统,请参阅 “创建 Azure 托管 Lustre 文件系统 ”,并确保在创建过程中启用 Blob 集成。 有关详细信息,请参阅 Azure Blob 存储集成
  • Azure Blob 存储帐户:一种存储帐户,其中的 Blob 容器已配置为与 Azure 托管 Lustre 一起使用。 有关详细信息,请参阅 Blob 集成先决条件
  • AzCopy:在本地系统上安装版本 10.32.2 或更高版本。 若要下载并安装 AzCopy,请参阅 AzCopy 入门
  • 身份验证:必须授权 AzCopy 才能访问存储帐户。 可以使用 Microsoft Entra ID 或共享访问签名 (SAS) 令牌。 有关详细信息,请参阅 授权 AzCopy

步骤 1:使用 POSIX 属性将数据上传到 Azure Blob 存储

使用 AzCopy 将数据从本地 POSIX 文件系统上传到 Azure Blob 存储容器。 若要在传输过程中保留 POSIX 属性,请使用 --preserve-posix-properties--posix-properties-style amlfs 标志。

--preserve-posix-properties 标志指示 AzCopy 保留 POSIX 属性,包括所有者、组、权限和时间戳。 该 --posix-properties-style amlfs 标志确保 POSIX 属性以 Azure 托管 Lustre 所需的格式存储。 AzCopy 会在上传过程中使用 --include-directory-stub 标志,为每个目录创建一个目录存根(长度为零的 blob)。 这些目录存根存储目录级 POSIX 元数据,以便 Azure 托管 Lustre 可以在导入期间正确重新构造目录权限。

使用 azcopy copy

azcopy copy 命令将数据从源复制到目标。 使用 azcopy 10.32.2 或更高版本执行从本地文件系统到 Blob 容器的完整数据传输。

# Requires AzCopy v10.32.2 or later. Verify with: azcopy --version
azcopy copy '/path/to/local/directory' 'https://<storage-account>.blob.core.chinacloudapi.cn/<container>/<path>' \
    --preserve-posix-properties \
    --posix-properties-style amlfs \
    --include-directory-stub \
    --recursive

请替换以下值:

  • /path/to/local/directory:本地 POSIX 文件系统中源数据的路径。
  • <storage-account>:Azure 存储帐户的名称。
  • <container>:Blob 容器的名称。
  • <path>:Blob 容器中的可选目标路径。

例如,若要将 /data/hpc-workload 目录复制到名为 lustre-data

# Requires AzCopy v10.32.2 or later. Verify with: azcopy --version
azcopy copy '/data/hpc-workload' 'https://mystorageaccount.blob.core.chinacloudapi.cn/lustre-data/' \
    --preserve-posix-properties \
    --posix-properties-style amlfs \
    --include-directory-stub \
    --recursive

Important

默认情况下, azcopy copy 在目标处创建源目录名称作为子目录。 在前面的示例中,数据上传到lustre-data/hpc-workload/。 可以通过两种方式控制此行为:

  • 使用 --as-subdir=false 标志:此标志指示 AzCopy 仅将源目录 的内容 复制到目标,而无需创建父目录。 例如:

    # Requires AzCopy v10.32.2 or later. Verify with: azcopy --version
    azcopy copy '/data/hpc-workload' 'https://mystorageaccount.blob.core.chinacloudapi.cn/lustre-data/' \
        --preserve-posix-properties \
        --posix-properties-style amlfs \
        --include-directory-stub \
        --recursive \
        --as-subdir=false
    

    在这种情况下,hpc-workload 内的文件和子目录将直接上传到 lustre-data/ 下。

  • 使用通配符作为源 (例如 /data/hpc-workload/*):AzCopy 仅复制目录 的内容 ,而不在目标处创建父目录,类似于使用 --as-subdir=false

根据 Blob 容器中所需的目录结构选择适当的方法。 将数据导入 Azure Managed Lustre 时,会复制此结构。

使用 azcopy sync

azcopy sync 命令在源和目标之间同步数据。 使用此命令进行持续或增量传输,以保持 Blob 容器与您本地文件系统中的更改同步。

# Requires AzCopy v10.32.2 or later. Verify with: azcopy --version
azcopy sync '/path/to/local/directory' 'https://<storage-account>.blob.core.chinacloudapi.cn/<container>/<path>' \
    --preserve-posix-properties \
    --posix-properties-style amlfs \
    --include-directory-stub

例如,若要将 /data/hpc-workload 目录与名为 : 的 lustre-data容器同步:

# Requires AzCopy v10.32.2 or later. Verify with: azcopy --version
azcopy sync '/data/hpc-workload' 'https://mystorageaccount.blob.core.chinacloudapi.cn/lustre-data/' \
    --preserve-posix-properties \
    --posix-properties-style amlfs \
    --include-directory-stub

Note

azcopy sync 命令比较文件名和上次修改的时间戳,以确定需要传输哪些文件。 仅传输新的或更新的文件,这使得增量更新的同步操作更快。

Important

与上述命令不同 azcopy copy,该 azcopy sync 命令始终将源目录 的内容 同步到目标,而无需创建父目录。 例如,azcopy sync '/data/hpc-workload' 'https://...blob.core.chinacloudapi.cn/lustre-data/'hpc-workload 的内容直接上传到 lustre-data/,而不是上传到 lustre-data/hpc-workload/。 确保 Blob 容器中的目标路径反映 Azure 托管 Lustre 中所需的目录结构。 有关详细信息,请参阅 使用 AzCopy 与 Azure Blob 存储同步

验证上传

上传完成后,可以通过列出 Blob 容器的内容来验证是否已使用正确的 POSIX 属性上传数据:

# Requires AzCopy v10.32.2 or later. Verify with: azcopy --version
azcopy list 'https://<storage-account>.blob.core.chinacloudapi.cn/<container>/<path>' --properties

步骤 2:将数据导入 Azure 托管 Lustre

将数据上传到保留 POSIX 属性的 Azure Blob 存储后,通过创建导入作业将数据导入 Azure 托管 Lustre 文件系统。 Azure 托管 Lustre 从 Blob 元数据中读取 POSIX 属性,并将其应用于 Lustre 命名空间中的文件。

可以按照从 Azure Blob 存储创建导入作业到文件系统中的步骤随时创建导入作业。 如果在创建群集期间配置了 Blob 集成,也可以在初始设置期间导入数据。

对于从 Blob 存储到 Azure 托管 Lustre 的自动和连续数据同步,请考虑使用 自动导入功能

局限性

  • 不会保留符号链接:Azure Blob 存储不支持符号链接(symlinks)。 在 AzCopy 传输期间,源 POSIX 文件系统中的符号链接(Symlinks)会被跳过,不会被迁移到 Blob 容器或 Azure 托管 Lustre。 如果数据依赖于符号链接,则必须在迁移之前重新构造数据,或者在将数据导入 Azure 托管 Lustre 文件系统后手动重新创建符号链接。 有关详细信息,请参阅 将 Azure Blob 存储与 Azure 托管 Lustre 配合使用

技巧与最佳做法

  • 首先使用小型数据集进行测试:在迁移完整数据集之前,请使用一小部分文件测试该过程,以验证 POSIX 属性是否已正确保留。
  • 优化传输性能:AzCopy 自动使用多个并发连接。 可以通过根据网络带宽设置 AZCOPY_CONCURRENCY_VALUE 环境变量来进一步优化性能。 有关更多信息,请参阅使用 Azure 存储以优化 AzCopy 的性能
  • 使用增量同步进行正在进行的迁移:如果本地数据频繁更改,则用于 azcopy sync 增量更新,而不是每次复制整个数据集。
  • 监视导入作业:创建导入作业后,在 Azure 门户中监视其进度。 有关详细信息,请参阅 创建导入作业