将azure存储容器复制到其他帐户存储容器

时间:2015-11-16 18:15:05

标签: azure copy storage azure-storage-blobs

我正在寻找一种解决方案,将容器中的blob从一个azure存储复制到另一个azure存储,这是最简单的方法。它需要获取源存储的容器名称,并在目标存储中制作容器名称的精确副本。任何帮助或想法?对于很多容器2500 +。

2 个答案:

答案 0 :(得分:1)

好的,我把所有的容器从存储器存储到存储器,这是我做的:

  1. 我在azure中创建了一个位于我目标存储区域的虚拟机。

  2. 我下载了命令行工具“Cloudcopy”,你可以在这里找到它:https://cloudcopy.codeplex.com/关于这个工具的好处是我为你创建了容器,如果它们不存在于目标存储(-P到最后使容器公开)

  3. 我制作了一个旧学校旧时尚批处理脚本(在我的情况下,我的所有容器都编号为00000001/00000002 /等),它将所有容器提取到我的VM临时存储(d :)并在发送文件之后到目标存储并删除临时存储(如果临时存储已满,在我的情况下限制为382GB,我的文件超过2TB)

  4. 这是我使用的批处理脚本(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核心)