我正在寻找一种解决方案,将容器中的blob从一个azure存储复制到另一个azure存储,这是最简单的方法。它需要获取源存储的容器名称,并在目标存储中制作容器名称的精确副本。任何帮助或想法?对于很多容器2500 +。
答案 0 :(得分:1)
好的,我把所有的容器从存储器存储到存储器,这是我做的:
我在azure中创建了一个位于我目标存储区域的虚拟机。
我下载了命令行工具“Cloudcopy”,你可以在这里找到它:https://cloudcopy.codeplex.com/关于这个工具的好处是我为你创建了容器,如果它们不存在于目标存储(-P到最后使容器公开)
我制作了一个旧学校旧时尚批处理脚本(在我的情况下,我的所有容器都编号为00000001/00000002 /等),它将所有容器提取到我的VM临时存储(d :)并在发送文件之后到目标存储并删除临时存储(如果临时存储已满,在我的情况下限制为382GB,我的文件超过2TB)
这是我使用的批处理脚本(CMD):
@echo off
setlocal enabledelayedexpansion
REM Adds zeros to the container name
SET /a counter=100000000
REM set the count starting value
SET /a count=1
:loop
REM Yes i know very old fashion loop
set /a calculation=%counter%+%count%
set directoryname=%calculation:~-8%
REM the ~-8% cuts off the 1 in the beginning from the counter
START /WAIT c:\\CloudCopy.exe "https://<STORAGENAMESOURCE>.blob.core.windows.net/%directoryname%/*.*" "d:\%directoryname%" "DefaultEndpointsProtocol=https;AccountName=<STORAGENAMESOURCE>;AccountKey=<STORAGEKEYSOURCE>"
START /WAIT c:\\CloudCopy.exe "d:\%directoryname%\*.*" "https://<STORAGENAMEDESTINATION>.blob.core.windows.net/%directoryname%" "DefaultEndpointsProtocol=https;AccountName=<STORAGENAMEDESTINATION>;AccountKey=<STORAGEKEYDESTINATION>" -P
rd /s /q d:\%directoryname%
set /a count=%count%+1
goto loop
当然,您可以将%directoryname%变量替换为您想要的,它可以工作,您可以忽略整个计数器部分作为示例,您可以添加特定容器名称的列表,并确保做出更好的循环。这个对我有用,而且我很忙,所以现在对我来说很好:)啊顺便说一句,Cloudcopy还支持非常大的文件,比如我的大小为2GB + hench VM在目的地区域。
答案 1 :(得分:0)
AzCopy允许您在同一存储帐户中或不同存储帐户之间复制blob
AzCopy.exe
https://<sourceaccount>.blob.core.windows.net/<sourcecontainer>/
https://<destaccount>.blob.core.windows.net/<destcontainer>/
/sourcekey:<key> /destkey:<key> /S
以下可选参数非常有用:
/MOV
删除复制后的源文件
/NC:<number>
并发网络呼叫数量(默认为8 x核心)