Azure VM快照复制至存储账户后为0字节且报HTTP条件头错误
问题:Azure快照复制后文件为0字节且报错HTTP条件头未满足
我制作了一台Azure VM的快照,将其复制到存储账户后,文件显示为0字节。最初使用的复制命令如下:
az storage blob copy start --account-name $storageAccountName --destination-blob $destinationVHDFileName --destination-container $storageContainerName --account-key $storageAccountKey --source-uri $sas
后续我使用完整脚本执行复制操作,脚本内容如下:
subscriptionId="<subscriptionId>" # 快照所在资源组名称 resourceGroupName=myResourceGroupName # 快照名称 snapshotName=mySnapshotName # SAS过期时长(秒),例如3600 sasExpiryDuration=3600 # 目标存储账户名称 storageAccountName=mystorageaccountname # 目标存储容器名称 storageContainerName=mystoragecontainername # 目标存储账户密钥 storageAccountKey=mystorageaccountkey # 目标VHD文件名 destinationVHDFileName=myvhdfilename az account set --subscription $subscriptionId sas=$(az snapshot grant-access --resource-group $resourceGroupName --name $snapshotName --duration-in-seconds $sasExpiryDuration --query [accessSas] -o tsv) az storage blob copy start --destination-blob $destinationVHDFileName --destination-container $storageContainerName --account-name $storageAccountName --account-key $storageAccountKey --source-uri $sas
执行脚本后,复制进度到0.0244%时出现错误:
错误:使用HTTP条件标头指定的条件未满足。
解决方法
- 延长SAS有效期:将
sasExpiryDuration从3600秒(1小时)改为更长时间,比如7200秒(2小时),避免复制过程中SAS过期导致中断。 - 清理目标Blob:如果目标容器中已存在同名的
$destinationVHDFileName文件,先删除该文件再重新执行复制命令,避免因目标Blob已存在触发条件冲突。 - 明确指定SAS权限:生成SAS时添加
--permissions r参数,确保拥有读取快照的权限:sas=$(az snapshot grant-access --resource-group $resourceGroupName --name $snapshotName --duration-in-seconds 7200 --permissions r --query [accessSas] -o tsv) - 检查存储账户配置:确保目标存储账户与快照处于同一Azure区域,若跨区域复制需确认存储账户支持跨区域Blob复制功能。
- 检查复制状态:执行复制命令后,使用以下命令查看实时复制状态,而非依赖命令行的进度输出:
az storage blob show --container-name $storageContainerName --name $destinationVHDFileName --account-name $storageAccountName --account-key $storageAccountKey --query "properties.copy.status"
内容的提问来源于stack exchange,提问作者Kristen
相关产品推荐
相关产品推荐

