寻求18GB大文件稳定上传至Azure Blob Storage的AzCopy优化方案
AzCopy大文件上传Azure Blob不稳定的优化方案
我尝试使用AzCopy将18GB的大文件上传至Azure Blob Storage,小文件上传正常,但大文件的上传结果不稳定。以下是抓取工作站内存并压缩后上传的PowerShell脚本:
$path = "C:\Windows\Temp\" # Set Azure Blob forensic storage $AzureURI = "https://something.blob.core.windows.net/storagepath" # Set Location Set-Location -Path C:\Windows\Temp\ $env:AZCOPY_CONCURRENCY_VALUE=4 # Download AzCopy Invoke-WebRequest -Uri "https://aka.ms/downloadazcopy-v10-windows" -OutFile AzCopy.zip -UseBasicParsing # Expand Archive Expand-Archive ./AzCopy.zip ./AzCopy -Force Get-ChildItem ./AzCopy/*/azcopy.exe | Move-Item -Destination "C:\Windows\Temp\azcopy.exe" # Download Raptor Grab Memory from Azure Blob Storage $File = "Raptor_GrabMemory.exe" $AzureToolURI = "https://something.blob.core.windows.net/forensiccollections/Raptor_GrabMemory.exe?sp=racwl&st=2023-02-27T21:18:50Z&se=2024-02-28T05:1(snip)" Invoke-WebRequest -Uri $AzureToolURI -OutFile $File # Grab the memory and zip it .\Raptor_GrabMemory.exe # Grab the memory file $file = Get-Childitem –Path $path -Include CTAM_* -File -Recurse -ErrorAction SilentlyContinue # use azcopy to push file to blob storage .\azcopy.exe cp $file $AzureURI --check-length=false 2>&1
目前仅将AZCOPY_CONCURRENCY_VALUE设置为4时有部分成功,但仍时好时坏。不介意上传速度,哪怕耗时8-10小时,只要能完成即可。以下是针对性优化建议:
进一步降低并发数+启用断点续传
把并发数压到最低(1或2),彻底减少网络波动的影响,同时开启断点续传,中断后自动从上次位置继续:$env:AZCOPY_CONCURRENCY_VALUE=1 .\azcopy.exe cp $file $AzureURI --check-length=false --resume 2>&1缩小分块大小
默认100MB的分块在不稳定网络里容易失败,改成32MB甚至16MB,单次传输的数据量更小,容错性更高:$env:AZCOPY_BLOCK_SIZE_MB=32 .\azcopy.exe cp $file $AzureURI --check-length=false --resume 2>&1提高重试次数与超时时间
给AzCopy更多重试机会和更长的单块传输超时,应对临时网络卡顿:.\azcopy.exe cp $file $AzureURI --check-length=false --resume --max-retries=20 --timeout=300s 2>&1强制单线程分块上传
如果上面的设置还是不稳,直接禁用并行分块传输,完全单线程跑:$env:AZCOPY_CONCURRENCY_VALUE=1 $env:AZCOPY_PARALLEL_BLOCK_UPLOADS=1 .\azcopy.exe cp $file $AzureURI --check-length=false --resume 2>&1脚本层面补全验证逻辑
确保只获取到目标内存文件,避免因多文件匹配导致上传异常:$file = Get-Childitem –Path $path -Filter CTAM_* -File -Recurse -ErrorAction Stop | Select-Object -First 1 if (-not $file) { Write-Error "未找到目标内存文件" exit 1 }上传后验证完整性
添加MD5校验,确保文件上传后和本地一致:.\azcopy.exe cp $file $AzureURI --check-length=false --resume --verify-md5 2>&1
内容的提问来源于stack exchange,提问作者Dirk Pitt
相关产品推荐
相关产品推荐

