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

copy azure storage containers to other account storage containers

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

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 个核心)

好的,我得到了从一个存储到另一个存储的所有容器,我是这样做的:

  1. 我在目标存储所在的同一区域中用 Azure 创建了一个 VM。

  2. 我下载了命令行工具 "Cloudcopy" 你可以在这里找到它:https://cloudcopy.codeplex.com/ 这个工具的伟大之处在于我为你创建了容器,以防它们目标存储中不存在(顺便说一下,最后的 -P 使容器 public)

  3. 我制作了一个老式的老式批处理脚本(在我的例子中,我所有的容器都编号为 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 以上的虚拟机在目标区域。