如何将Blob Storage文件传输至自建VM?哪种方式更优?
嗨,我来帮你搞定把Azure Blob Storage里的文件传到自己VM的事儿,顺便把你纠结的术语和方式差异说清楚~
一、先澄清个术语误区
你提到的“从Blob上传至VM”其实是表述上的混淆:站在VM的角度,把Blob里的文件拿到VM本地,本质是下载操作;而把VM里的文件放到Blob里,才叫上传。你需要的是把Blob文件转移到VM,所以核心操作就是“从Blob下载至VM”,下面的方法都是针对这个场景的。
二、具体操作方法
我给你列几种最常用、靠谱的方式,你可以根据自己的需求选:
1. 使用AzCopy(最推荐,高效稳定)
AzCopy是专门用于Azure存储数据传输的工具,支持断点续传、批量处理,速度拉满,适合大文件或批量操作:
- 先在你的VM上安装AzCopy:
- Linux VM:执行以下命令
wget https://aka.ms/downloadazcopy-v10-linux && tar -xvf downloadazcopy-v10-linux && sudo cp ./azcopy_linux_amd64_*/azcopy /usr/bin/ - Windows VM:可以直接下载安装包,或者用PowerShell快速安装
Invoke-WebRequest -Uri https://aka.ms/downloadazcopy-v10-windows -OutFile AzCopy.zip; Expand-Archive AzCopy.zip -DestinationPath C:\AzCopy -Force
- Linux VM:执行以下命令
- 获取Blob容器的SAS令牌:在Azure Portal里找到你的存储账户→Blob容器→生成SAS,权限选「读取」,设置好有效期,复制生成的SAS链接。
- 执行下载命令:
- 下载单个文件:
azcopy copy "https://<存储账户名>.blob.core.windows.net/<容器名>/<文件路径>?<SAS令牌>" "/VM本地目标路径/文件名" - 下载整个容器(递归所有文件):
azcopy copy "https://<存储账户名>.blob.core.windows.net/<容器名>?<SAS令牌>" "/VM本地目标文件夹" --recursive
- 下载单个文件:
2. 使用Azure CLI(适合自动化脚本)
如果需要把传输操作集成到自动化工作流里,用Azure CLI会更方便:
- 先在VM上安装Azure CLI,然后登录(可以用交互式登录或服务主体,适合无人值守):
az login - 下载单个文件:
az storage blob download --account-name <存储账户名> --container-name <容器名> --name <Blob文件名> --file /VM本地目标路径/文件名 - 批量下载整个容器的文件:
az storage blob download-batch --account-name <存储账户名> --destination /VM本地目标文件夹 --source <容器名> --pattern "*"
3. 挂载Blob容器为VM本地磁盘(适合频繁访问)
如果需要频繁访问Blob里的文件,不想每次都下载到VM本地占空间,可以直接把Blob容器挂载成VM的本地磁盘:
- Linux VM:用BlobFUSE工具,步骤大概是:
- 安装BlobFUSE依赖包
- 创建配置文件,填入存储账户名和SAS令牌/账户密钥
- 执行挂载命令:
blobfuse /mnt/blobcontainer --container-name <容器名> --config-file ./blobfuse.cfg
- Windows VM:可以用Azure Storage Explorer可视化挂载,或者用PowerShell映射网络驱动器:
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<存储账户名>.blob.core.windows.net/<容器名>" -Credential (Get-Credential -UserName "Azure\<存储账户名>" -Message "输入存储账户密钥")
三、关于方式选择的补充
回到你最初的疑问:其实“从Blob上传至VM”是错误的表述,你需要的就是“从Blob下载至VM”。如果是问不同下载方式的优劣:
- 追求速度、批量处理大文件:选AzCopy,性能最优还支持断点续传
- 需要集成到自动化脚本/工作流:选Azure CLI,命令式操作便于脚本化
- 频繁访问Blob文件、不想占用VM本地存储:选挂载Blob容器,像用本地磁盘一样直接访问Blob内容
内容的提问来源于stack exchange,提问作者user204760
相关产品推荐
相关产品推荐

