本文介绍如何使用 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 文件系统暂存数据,验证传输,然后在方便的时候导入。
迁移步骤
迁移过程包括两个主要步骤:
- 将数据上传到 Azure Blob 存储:使用 AzCopy 将数据从本地 POSIX 文件系统复制到 Azure Blob 存储容器。 AzCopy 在传输过程中保留 POSIX 属性,例如所有权、权限和时间戳。
- 将数据导入 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 门户中监视其进度。 有关详细信息,请参阅 创建导入作业。