0

我有几个 Azure 帐户。我想将一个大型博客(250GB vhd)从一个帐户复制到另一个帐户,而无需下载然后上传到本地计算机/从本地计算机上传。

我尝试使用 Microsoft 实用程序 AZCOPY 来执行此操作(键替换为 x):

azcopy https://accountfrom.blob.core.windows.net/neo4j/neo4j-250gb.db.vhd https://accountto.blob.core.windows.net/neo4j/neo4j-250gb.db.vhd /DestKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx /SourceKey:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

但这给了我错误消息:解析目标位置时出错远程服务器返回错误:(403)禁止。

我通过在 CloudBerry 中打开帐户来测试密钥和帐户。我也从 CloudBerry 获得了网址,所以我认为我也做对了。

403的原因可能是什么?

4

7 回答 7

3

我尝试了 Gaurav 关于使用 Fiddler 的建议。这让我可以看到来自 Azure 存储的 XML 响应。在那里我看到“AuthenticationErrorDetail: Request date header too old”原来我使用的是虚拟机,它的时间已经过去了。更新 VM 上的时钟修复了授权问题。

于 2015-02-07T23:28:13.763 回答
1

AzCopy 命令行模式为“azcopy [source] [dest] [file pattern] [options]”,[source] 将被视为文件夹(如果从本地文件夹复制)或虚拟目录(如果从 blob 复制),即 AzCopy 将复制源文件夹/虚拟目录下的所有文件。

因此,在您的命令行中,azcopy 将尝试查找等于“xxxx.core.windows.net/neo4j/neo4j-250gb.db.vhd”的虚拟目录,但我们知道它不是虚拟目录而是文件。

要从 blob 复制单个文件,您可以尝试使用以下命令与 [file pattern] 和选项 /s。

azcopy accountfrom.blob.core.windows.net/neo4j/ accountto.blob.core.windows.net/neo4j/ /sourcekey:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx /destkey:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx neo4j-250gb.db.vhd /s

注意,“从 blob 复制”和“从本地文件夹复制”的文件模式不同。从 blob 复制时,文件模式被视为前缀,而从本地复制时,文件模式是通用文件系统文件模式。

例如,当从本地复制时,您可以使用文件模式 ab* 来指定所有以“ab”开头的文件,但是当从 blob 复制时,您只能指定像“ab”这样的前缀。

有关如何使用选项 /s,请访问http://blogs.msdn.com/b/windowsazurestorage/archive/2012/12/03/azcopy-uploading-downloading-files-for-windows-azure-blobs.aspx

对于错误'403禁止',它与您使用的命令行模式无关,而是密钥或帐户有问题。

最后但并非最不重要的一点是,您始终可以在 aka.ms/azcopy 获得最新的azcopy

于 2014-02-19T06:51:33.050 回答
1

不仅要检查目标Blob,还要检查Blob 的 SAS 令牌权限。

在此处输入图像描述

于 2020-05-06T02:59:25.120 回答
0

您是否尝试过 CopyFromBlob 方法?我不确定它是否适用于订阅,如果我有多个订阅,我会对其进行测试。但它非常快,不做上下。

像这样的东西:

//set the azure container
string sourceContainerName = "mySourceContainer";
string destinationContainerName = "myDestinationContainer";
//azure connection string
string sourceSettingKey = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", "xxxx",
                                            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
string destinationSettingKey = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", "xxxx",
                                            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
//setup the container object
CloudStorageAccount sourceStorageAccount = CloudStorageAccount.Parse(sourceSettingKey);
CloudStorageAccount destinationStorageAccount = CloudStorageAccount.Parse(destinationSettingKey);
CloudBlobClient sourceClient = sourceStorageAccount.CreateCloudBlobClient();
CloudBlobClient destinationClient = destinationStorageAccount.CreateCloudBlobClient();
CloudBlobContainer sourceContainer = blobClient.GetContainerReference(sourceContainerName);
CloudBlobContainer destinationContainer = blobClient.GetContainerReference(destinationContainerName);

// Set permissions on the container.
BlobContainerPermissions permissions = new BlobContainerPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Blob;
sourceContainer.SetPermissions(permissions);
destinationContainer.SetPermissions(permissions);

//grab the blob
CloudBlob sourceBlob = sourceContainer.GetBlobReference("mySourceBlobName");
CloudBlob destinationBlob = destinationContainer.GetBlobReference("myDestinationBlobName");
//create a new blob
destinationBlob.CopyFromBlob(sourceBlob);
于 2013-08-12T20:56:19.787 回答
0

AzCopy 需要从中复制文件的存储容器,而不是文件的完整路径。

像这样,

AzCopy /Source:https://accountfrom.blob.core.windows.net/neo4j /Dest:https://accountto.blob.core.windows.net/neo4j /SourceKey:key /DestKey:key /Pattern:neo4j-250gb.db.vhd

/Pattern指正在复制的文件。默认情况下,跨 Azure 存储复制的文件是在服务器端完成的。有关更多信息,请参阅 https://docs.microsoft.com/en-us/azure/storage/common/storage-use-azcopy#copy-blobs-in-blob-storage 。

于 2018-02-12T10:44:16.183 回答
0

我得到了 403,因为我使用的第一个密钥(为存储帐户生成)在某种程度上存在缺陷。只需更改为使用第二个密钥即可解决问题 - 当然还需要重新生成第一个密钥。

于 2016-12-01T00:19:15.337 回答
0

首次创建“对象”时,需要以允许的“资源类型”在 SAS 密钥生成表单中进行检查。调试的默认方法是获取所有检查的 SAS 密钥,如果它有效,则将其缩小。

于 2020-07-17T12:29:03.180 回答