将 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 个核心)
好的,我得到了从一个存储到另一个存储的所有容器,我是这样做的:
我在目标存储所在的同一区域中用 Azure 创建了一个 VM。
我下载了命令行工具 "Cloudcopy" 你可以在这里找到它:https://cloudcopy.codeplex.com/ 这个工具的伟大之处在于我为你创建了容器,以防它们目标存储中不存在(顺便说一下,最后的 -P 使容器 public)
我制作了一个老式的老式批处理脚本(在我的例子中,我所有的容器都编号为 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 以上的虚拟机在目标区域。
我正在寻找一种解决方案,将带有 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 个核心)
好的,我得到了从一个存储到另一个存储的所有容器,我是这样做的:
我在目标存储所在的同一区域中用 Azure 创建了一个 VM。
我下载了命令行工具 "Cloudcopy" 你可以在这里找到它:https://cloudcopy.codeplex.com/ 这个工具的伟大之处在于我为你创建了容器,以防它们目标存储中不存在(顺便说一下,最后的 -P 使容器 public)
我制作了一个老式的老式批处理脚本(在我的例子中,我所有的容器都编号为 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 以上的虚拟机在目标区域。