Azcopy Sync同步Azure文件共享

文章目录

  • Azcopy Sync同步文件共享
    • 一、工作原理
    • 二、安装 AzCopy
      • 在 Windows 上
      • 在 Linux 上
    • 三、资源准备
      • 1. 创建源和目标 Azure 存储账户
      • 2. 创建源和目标文件共享
      • 3. 确定路径
      • 4. 生成源和目的存储账户的共享访问签名(SAS)令牌
        • 配置权限
        • 示例生成的 URL
    • 四、Azcopy Sync 运行命令
      • Bash 示例
      • PowerShell 示例
      • 必须开启的参数
      • 推荐开启的参数
      • 可选择开启的参数
    • 五、基础脚本
        • Bash 脚本(适用于 Linux)
        • PowerShell 脚本(适用于 Windows)
    • 六、进阶脚本
      • Bash 脚本(适用于 Linux 和 macOS)
      • PowerShell 脚本(适用于 Windows)
      • 脚本说明
      • 示例脚本:结合推荐和可选参数
    • 七、跨Vnet使用专用终结点同步的问题
    • 八、Azcopy Sync 配置和注意事项
      • 1. 问题:`azcopy sync` 执行时客户端和存储账户之间的通信机制是怎样的?
      • 2. 问题:在 `azcopy sync` 的操作中,执行命令的服务器是否相当于代理服务器?
      • 3. 问题:`azcopy sync` 客户端的硬件和网络配置需要什么?
      • 4. 问题:`azcopy sync` 客户端和存储账户需要配置哪些网络设置?
      • 5. 需要注意的配置和可能的阻碍
      • 6. 可能的阻碍和解决方案

Azcopy Sync同步文件共享

使用场景:为了在不使用Azure Fileshare(文件共享)的GRS冗余的情况下,实现两个不同存储账户的Azure Fileshare的数据同步,且为了尽量节省带宽和出站流量,使用增量同步

azcopy sync 是 AzCopy 工具中的一个命令,用于在两个存储位置之间进行增量同步。它会比较源位置和目标位置的文件,仅复制源位置中新创建或修改的文件,并删除目标位置中不再存在于源位置中的文件,以确保两者的一致性。

假设你有一个源文件共享和一个目标文件共享,初次同步后,只会复制源文件共享中所有的文件。第二次同步时,只有源文件共享中新添加或修改的文件会被复制到目标文件共享,并且目标文件共享中不在源文件共享中的文件会被删除。

一、工作原理

  1. 比较源和目标

    • azcopy sync 会比较源和目标位置的文件,根据文件的修改时间和大小来决定哪些文件需要复制、更新或删除。
  2. 增量复制

    • 只有在源位置中新创建或修改的文件才会被复制到目标位置。
  3. 删除目标中的多余文件

    • 如果在目标位置中发现有不在源位置中的文件,azcopy sync 会根据设置删除这些文件,以保持源和目标的一致性。

二、安装 AzCopy

在 Windows 上

  1. 下载 AzCopy

    • 访问 AzCopy 下载页面。

    • 下载适用于 Windows 的 AzCopy ZIP 文件。

  2. 安装 AzCopy

    • 解压下载的 ZIP 文件。

    • azcopy.exe 复制到一个常用目录,例如 C:\Program Files (x86)\AzCopy

  3. 添加到系统路径

    • 打开“系统属性”对话框。

    • 点击“高级系统设置”。

    • 点击“环境变量”按钮。

    • 在“系统变量”部分,找到 Path 变量,并点击“编辑”。

    • 点击“新建”,并添加 AzCopy 安装目录的路径(例如 C:\Program Files (x86)\AzCopy)。

    • 点击“确定”保存更改。

  4. 验证安装

    • 打开命令提示符或 PowerShell。

    • 运行 azcopy 命令,确保显示 AzCopy 的帮助信息。

在 Linux 上

  1. 下载 AzCopy
    wget https://aka.ms/downloadazcopy-v10-linux -O azcopy_linux.tar.gz
  1. 安装 AzCopy
    tar -xvf azcopy_linux.tar.gz  ​  sudo mv azcopy_linux_amd64_10.25.1/azcopy /usr/local/bin/
  1. 验证安装
    azcopy --version

三、资源准备

1. 创建源和目标 Azure 存储账户

2. 创建源和目标文件共享

3. 确定路径

确定你要同步的文件和目录路径:

  • 源路径:指向源文件共享中的具体目录或文件。

  • 目标路径:指向目标文件共享中的具体目录。

4. 生成源和目的存储账户的共享访问签名(SAS)令牌

共享访问签名 (SAS) 令牌是一个 URI,可以授予有限时间内对 Azure 存储资源的访问权限。SAS 令牌为你提供了一种安全的方式来授予客户端对存储资源的细粒度访问,而无需共享存储帐户密钥。通过使用 SAS 令牌,你可以控制客户端对资源的访问权限,包括允许的操作、资源的类型、访问的开始时间和到期时间等。

生成 SAS 令牌以提供对存储资源的访问权限:

  1. 导航到存储账户

    • 在 Azure 门户中,选择你创建的存储账户。
  2. 生成 SAS 令牌

    • 在存储账户页面的左侧菜单中选择“共享访问签名”。
配置权限
  1. 选择服务

    • 选择 文件 服务,因为 azcopy sync 是用于 Azure 文件共享的同步操作。
  2. 选择资源类型

    • 勾选 服务, 容器对象。这确保你可以访问文件共享中的所有资源。
  3. 选择权限

    • 勾选以下权限:

      • 读 ()

      • 写 ()

      • 删除 (删除)

      • 列表 (列出)

    • 这些权限确保 azcopy sync 命令可以读取、写入、删除和列出文件共享中的文件。

  4. 设置有效期

    • 配置 开始日期/时间结束日期/时间

    • 例如,设置开始时间为当前时间,结束时间为你希望的有效期结束时间。

  5. 设置 IP 地址(可选):

    • 你可以指定允许访问的 IP 地址范围。如果不需要限制特定 IP,可以留空。
  6. 选择协议

    • 选择 HTTPSHTTPS 和 HTTP。为了安全性,建议选择 HTTPS
  7. 生成 SAS 令牌

    • 配置完成后,点击页面底部的 生成 SAS 和连接字符串 按钮。
  8. 获取 SAS 令牌和 URL

    • 页面会显示生成的 SAS 令牌和 URL。

    • 将生成的 SAS 令牌附加到你的源和目标 URL 中,用于 azcopy sync 命令。

在这里插入图片描述

示例生成的 URL

假设你的存储帐户名为 mystorageaccount,文件共享名为 myfileshare,路径为 path/to/dir,生成的 SAS 令牌为 sp=r&st=2024-07-13T07:12:16Z&se=2024-07-13T15:12:16Z&spr=https&sv=2020-08-04&sr=c&sig=signature

你将生成的 SAS 令牌如下所示:


SOURCE_URL="https://mystorageaccount.file.core.windows.net/myfileshare/path/to/dir?sp=r&st=2024-07-13T07:12:16Z&se=2024-07-13T15:12:16Z&spr=https&sv=2020-08-04&sr=c&sig=signature"  DESTINATION_URL="https://mystorageaccount.file.core.windows.net/myfileshare/path/to/dir?sp=r&st=2024-07-13T07:12:16Z&se=2024-07-13T15:12:16Z&spr=https&sv=2020-08-04&sr=c&sig=signature"


四、Azcopy Sync 运行命令

一行命令直接运行就行,无多余功能

Bash 示例

azcopy sync "https://[sourceaccount].file.core.chinacloudapi.cn/[sourceshare]?[source_sas]" "https://[destinationaccount].file.core.chinacloudapi.cn/[destinationshare]?[destination_sas]" \--recursive=true \--delete-destination=true \--preserve-permissions=true \--preserve-smb-info=true

PowerShell 示例

azcopy sync "https://[sourceaccount].file.core.chinacloudapi.cn/[sourceshare]?[source_sas]" "https://[destinationaccount].file.core.chinacloudapi.cn/[destinationshare]?[destination_sas]" `--recursive=true `--delete-destination=true `--preserve-permissions=true `--preserve-smb-info=true

如果是国际版 Azure,只需将域名部分从 .file.core.chinacloudapi.cn 改为 .file.core.windows.net

# 国际版 Azure
"https://[sourceaccount].file.core.windows.net/[sourceshare]?[source_sas]"# 世纪互联版 Azure
"https://[sourceaccount].file.core.chinacloudapi.cn/[sourceshare]?[source_sas]"

必须开启的参数

  1. –recursive=true

    • 递归地同步所有子目录和文件。这是默认行为,但明确指定有助于确保所有子目录和文件都被包含在同步操作中。
  2. –delete-destination=true

    • 删除目标位置中不在源位置中的文件,以确保源和目标的一致性。
  3. –preserve-permissions=true

    • 保留文件和目录的权限信息。这在需要保持文件权限设置的环境中尤为重要。
  4. –preserve-smb-info=true

    • 保留 SMB 信息(如时间戳、属性等),以确保文件和目录的元数据在同步后保持一致。

推荐开启的参数

  1. --log-level=INFO
    • 设置日志级别为 INFO,以便详细记录同步过程中的信息,便于调试和监控。

可选择开启的参数

  1. --overwrite=ifSourceNewer

    • 仅在源文件比目标文件更新时才覆盖目标文件。这有助于减少不必要的数据传输。
    • 确保源和目标存储账户的时间戳准确。如果服务器时间不同步,可能会导致不必要的文件传输或漏传文件
  2. --check-md5

    • 在比较文件时检查 MD5 哈希值。这可以确保文件内容的完全一致性,传输后的文件与源文件完全一致,防止数据损坏
    • 计算 MD5 哈希值会增加 CPU 和时间开销,特别是对于大文件或大量文件的同步操作。
  3. --put-md5

    • 在上传时为文件计算 MD5 哈希值,并将其作为文件的 Content-MD5 属性保存。适用于确保数据传输完整性的场景。
  4. --cap-mbps=<rate>

    • 限制传输速率,指定传输速率的上限(以 Mbps 为单位)。适用于需要控制带宽使用的场景。
  5. --exclude-path=<path1;path2>

    • 排除指定的路径,在同步过程中忽略这些路径。适用于需要排除特定目录的场景。
  6. --include-pattern=<pattern1;pattern2>

    • 仅包含符合指定模式的文件进行同步。适用于需要同步特定类型文件的场景。
  7. --exclude-pattern=<pattern1;pattern2>

    • 排除符合指定模式的文件。在同步过程中忽略这些文件。
  8. --from-to=<sourceDestinationType>

    • 指定源和目标的类型(如 LocalBlob、BlobLocal 等)。在无法自动检测源和目标类型时使用。

例如,如果性能非常关键且数据一致性要求不高,可以考虑不使用 --check-md5--put-md5


五、基础脚本

在命令的基础上,优化结构,使用先定义的变量易于维护阅读,同时输出一些信息方便调试阅读

Bash 脚本(适用于 Linux)
#!/bin/bash  # 定义变量  
ACCOUNT_TYPE="international" # 国际版或国内版Azure: "international", "china"  
SOURCE_ACCOUNT="[source_account]"  
SOURCE_SHARE="[source_share]"  
SOURCE_PATH="[path/to/source/dir]"  
SOURCE_SAS="[source_SAS]"DESTINATION_ACCOUNT="[destination_account]"  
DESTINATION_SHARE="[destination_share]"  
DESTINATION_PATH="[path/to/destination/dir]"  
DESTINATION_SAS="[destination_SAS]"# 根据账号类型设置域名  
if [ "$ACCOUNT_TYPE" == "china" ]; then  SOURCE_DOMAIN=".file.core.chinacloudapi.cn"  DESTINATION_DOMAIN=".file.core.chinacloudapi.cn"  
else  SOURCE_DOMAIN=".file.core.windows.net"  DESTINATION_DOMAIN=".file.core.windows.net"  
fiSOURCE_URL="https://$SOURCE_ACCOUNT$SOURCE_DOMAIN/$SOURCE_SHARE/$SOURCE_PATH?$SOURCE_SAS"  
DESTINATION_URL="https://$DESTINATION_ACCOUNT$DESTINATION_DOMAIN/$DESTINATION_SHARE/$DESTINATION_PATH?$DESTINATION_SAS"# 打印URL以供调试  
echo "Source URL: $SOURCE_URL"  
echo "Destination URL: $DESTINATION_URL"# 执行 azcopy sync 命令  
azcopy sync "$SOURCE_URL" "$DESTINATION_URL" \  --recursive=true \  --delete-destination=true \  --preserve-permissions=true \  --preserve-smb-info=true  
PowerShell 脚本(适用于 Windows)
# 定义变量
$accountType = "international" # 国际版或国内版Azure: "international", "china"
$sourceAccount = "[source_account]"  # 源存储账户名称
$sourceShare = "[source_share]"  # 源文件共享名称
$sourcePath = "[source_path]"  # 源文件共享中的路径,选择根目录的话空着就好
$sourceSas = "[source_SAS]"  # 源存储账户的SAS令牌$destinationAccount = "[destination_account]"  # 目标存储账户名称
$destinationShare = "[destination_share]"  # 目标文件共享名称
$destinationPath = "[destination_path]"  # 目标文件共享中的路径
$destinationSas = "[destination_SAS]"  # 目标存储账户的SAS令牌# 根据账号类型设置域名
if ($accountType -eq "china") {$sourceDomain = ".file.core.chinacloudapi.cn"$destinationDomain = ".file.core.chinacloudapi.cn"
} else {$sourceDomain = ".file.core.windows.net"$destinationDomain = ".file.core.windows.net"
}$sourceUrl = "https://$($sourceAccount)$($sourceDomain)/$($sourceShare)/$($sourcePath)?$($sourceSas)"
$destinationUrl = "https://$($destinationAccount)$($destinationDomain)/$($destinationShare)/$($destinationPath)?$($destinationSas)"# 打印URL以供调试
Write-Output "Source URL: $sourceUrl"
Write-Output "Destination URL: $destinationUrl"# 执行 azcopy sync 命令
azcopy sync $sourceUrl $destinationUrl `--recursive=true `--delete-destination=true `--preserve-permissions=true `--preserve-smb-info=true

六、进阶脚本

增加了错误检验,生成日志用于审计的功能,用于前期的测试调试使用。

Bash 脚本(适用于 Linux 和 macOS)

#!/bin/bash  # 配置变量  
ACCOUNT_TYPE="international" # 国际版或国内版Azure: "international", "china"  
SOURCE_ACCOUNT="your_source_account" # 源存储账户名称  
SOURCE_SHARE="your_source_share" # 源文件共享名称  
SOURCE_PATH="" # 源文件共享中的路径,选择根目录的话空着就好  
SOURCE_SAS="your_source_sas_token" # 源存储账户的SAS令牌  DESTINATION_ACCOUNT="your_destination_account" # 目标存储账户名称  
DESTINATION_SHARE="your_destination_share" # 目标文件共享名称  
DESTINATION_PATH="" # 目标文件共享中的路径  
DESTINATION_SAS="your_destination_sas_token" # 目标存储账户的SAS令牌  # 参数验证,检查所有必要的变量是否已定义  
for var in SOURCE_ACCOUNT SOURCE_SHARE SOURCE_SAS DESTINATION_ACCOUNT DESTINATION_SHARE DESTINATION_SAS; do  if [ -z "${!var}" ]; then  echo "Error: $var is not set."  exit 1  fi  
done# 根据账号类型设置域名,区分国际版和国内版Azure  
if [ "$ACCOUNT_TYPE" == "china" ]; then  DOMAIN=".file.core.chinacloudapi.cn"  
else  DOMAIN=".file.core.windows.net"  
fi# 拼接完整的源和目标URL  
SOURCE_URL="https://$SOURCE_ACCOUNT$DOMAIN/$SOURCE_SHARE"  
DESTINATION_URL="https://$DESTINATION_ACCOUNT$DOMAIN/$DESTINATION_SHARE"if [ -n "$SOURCE_PATH" ]; then  SOURCE_URL="$SOURCE_URL/$SOURCE_PATH"  
fi  
SOURCE_URL="$SOURCE_URL?$SOURCE_SAS"if [ -n "$DESTINATION_PATH" ]; then  DESTINATION_URL="$DESTINATION_URL/$DESTINATION_PATH"  
fi  
DESTINATION_URL="$DESTINATION_URL?$DESTINATION_SAS"# 打印URL以供调试  
echo "Source URL: $SOURCE_URL"  
echo "Destination URL: $DESTINATION_URL"# 日志文件路径  
LOG_DIR="/var/log/azcopy"  
LOG_FILE="$LOG_DIR/azcopy_sync.log"# 只在初次运行时创建日志目录(如果不存在)  
if [ ! -d "$LOG_DIR" ]; then  mkdir -p "$LOG_DIR"  
fi# 设置 AzCopy 的日志位置  
export AZCOPY_LOG_LOCATION="$LOG_DIR"# 执行 azcopy sync 命令  
azcopy sync "$SOURCE_URL" "$DESTINATION_URL" \  --recursive=true \  --delete-destination=true \  --preserve-permissions=true \  --preserve-smb-info=true \  --log-level=INFO  
​  
# 检查 azcopy 命令的退出状态  
if [ $? -ne 0 ]; then  echo "Error: azcopy sync failed. Check the log file for details: $LOG_FILE"  exit 1  
fiecho "azcopy sync completed successfully."  


PowerShell 脚本(适用于 Windows)


# 定义变量  
$accountType = "international" # 国际版:international,国内版Azure: "china"  
$sourceAccount = "your_source_account" # 源存储账户名称  
$sourceShare = "your_source_share" # 源文件共享名称  
$sourcePath = "" # 源文件共享中的路径,选择根目录的话空着就好  
$sourceSas = "your_source_sas_token" # 源存储账户的SAS令牌  $destinationAccount = "your_destination_account" # 目标存储账户名称  
$destinationShare = "your_destination_share" # 目标文件共享名称  
$destinationPath = "" # 目标文件共享中的路径  
$destinationSas = "your_destination_sas_token" # 目标存储账户的SAS令牌  $enableLogging = $true # # 是否启用日志记录(设置为 $false 以禁用日志)  # 根据账号类型设置域名  
if ($accountType -eq "china") {  $sourceDomain = ".file.core.chinacloudapi.cn"  $destinationDomain = ".file.core.chinacloudapi.cn"  
} else {  $sourceDomain = ".file.core.windows.net"  $destinationDomain = ".file.core.windows.net"  
}# 拼接完整的源和目标URL  
$sourceUrl = "https://$($sourceAccount)$($sourceDomain)/$($sourceShare)/$($sourcePath)?$($sourceSas)"  
$destinationUrl = "https://$($destinationAccount)$($destinationDomain)/$($destinationShare)/$($destinationPath)?$($destinationSas)"# 打印URL以供调试  
Write-Output "Source URL: $sourceUrl"  
Write-Output "Destination URL: $destinationUrl"# 配置 AzCopy 命令  
$azCopyCommand = @(  "azcopy sync",  "`"$sourceUrl`"",  "`"$destinationUrl`"",  "--recursive=true",  "--delete-destination=true",  "--preserve-permissions=true",  "--preserve-smb-info=true"  
)if ($enableLogging) {  # 设置日志文件路径  $logDir = "C:\Logs\azcopy"  $logFile = "$logDir\azcopy_sync.log"  # 只在初次运行时创建日志目录(如果不存在)  if (-not (Test-Path $logDir)) {  New-Item -ItemType Directory -Path $logDir -Force  }# 设置 AzCopy 的日志位置  $env:AZCOPY_LOG_LOCATION = $logDir# 添加日志参数  $azCopyCommand += "--log-level=INFO"  
}# 输出命令以供调试  
Write-Output "Executing command: $($azCopyCommand -join ' ')"# 执行命令  
$azCopyOutput = Invoke-Expression -Command ($azCopyCommand -join ' ')# 打印命令输出  
Write-Output $azCopyOutput# 检查 azcopy 命令的退出状态  
if ($LASTEXITCODE -ne 0) {  if ($enableLogging) {  Write-Output "Error: azcopy sync failed. Check the log file for details: $logFile"  } else {  Write-Output "Error: azcopy sync failed."  }  exit 1  
}Write-Output "azcopy sync completed successfully."  



脚本说明

  • 变量定义:定义了源和目标存储账户、共享路径、SAS 令牌等信息。

  • 参数验证:检查必要的变量是否已设置。

  • URL 拼接:根据账号类型设置域名,并拼接完整的源和目标 URL。

  • 日志记录:创建日志目录,并将日志记录在本地指定路径。

  • 错误处理:检查 azcopy sync 命令的退出状态,并在失败时输出错误信息。

示例脚本:结合推荐和可选参数

下面是一个结合了推荐和可选参数的 PowerShell 脚本模板:

# 定义变量  
$accountType = "international" # 国际版:international,国内版Azure: "china"  
$sourceAccount = "fileshareabc" # 源存储账户名称  
$sourceShare = "fileshare2" # 源文件共享名称  
$sourcePath = "" # 源文件共享中的路径,选择根目录的话空着就好  
$sourceSas = "sv=2022-11-02&ss=bfqt&srt=sco&sp=rwdlacupiytfx&se=2024-07-17T14:26:48Z&st=2024-07-17T06:26:48Z&spr=https&sig=wN1cWMifSkjlormB%2FCkSUqHf8BBL%2Bsj2mDBWU0c11AM%3D" # 源存储账户的SAS令牌  $destinationAccount = "storg132" # 目标存储账户名称  
$destinationShare = "test" # 目标文件共享名称  
$destinationPath = "" # 目标文件共享中的路径  
$destinationSas = "sv=2022-11-02&ss=bfqt&srt=sco&sp=rwdlacupiytfx&se=2024-07-17T14:29:28Z&st=2024-07-17T06:29:28Z&spr=https&sig=zjK%2B4VvcIyeQsR1kVqMGNASZjO7RiiHLzV2DZsSlAdM%3D" # 目标存储账户的SAS令牌  $enableLogging = $true # 是否启用日志记录(设置为 $false 以禁用日志)  # 根据账号类型设置域名  
if ($accountType -eq "china") {  $sourceDomain = ".file.core.chinacloudapi.cn"  $destinationDomain = ".file.core.chinacloudapi.cn"  
} else {  $sourceDomain = ".file.core.windows.net"  $destinationDomain = ".file.core.windows.net"  
}  # 拼接完整的源和目标URL  
$sourceUrl = "https://$($sourceAccount)$($sourceDomain)/$($sourceShare)/$($sourcePath)?$($sourceSas)"  
$destinationUrl = "https://$($destinationAccount)$($destinationDomain)/$($destinationShare)/$($destinationPath)?$($destinationSas)"  # 打印URL以供调试  
Write-Output "Source URL: $sourceUrl"  
Write-Output "Destination URL: $destinationUrl"  # 配置 AzCopy 命令  
$azCopyCommand = @(  "azcopy sync",  "`"$sourceUrl`"",  "`"$destinationUrl`"",  "--recursive=true",  "--delete-destination=true",  "--preserve-permissions=true",  "--preserve-smb-info=true"  
)  if ($enableLogging) {  # 设置日志文件路径  $logDir = "C:\Logs\azcopy"  $logFile = "$logDir\azcopy_sync.log"  # 只在初次运行时创建日志目录(如果不存在)  if (-not (Test-Path $logDir)) {  New-Item -ItemType Directory -Path $logDir -Force  }  # 设置 AzCopy 的日志位置  $env:AZCOPY_LOG_LOCATION = $logDir  # 添加日志参数  $azCopyCommand += "--log-level=INFO"  
}  # 输出命令以供调试  
Write-Output "Executing command: $($azCopyCommand -join ' ')"  # 执行命令  
$azCopyOutput = Invoke-Expression -Command ($azCopyCommand -join ' ')  # 打印命令输出  
Write-Output $azCopyOutput  # 检查 azcopy 命令的退出状态  
if ($LASTEXITCODE -ne 0) {  if ($enableLogging) {  Write-Output "Error: azcopy sync failed. Check the log file for details: $logFile"  } else {  Write-Output "Error: azcopy sync failed."  }  exit 1  
}  Write-Output "azcopy sync completed successfully."

通过这些参数配置,可以优化同步过程,减少带宽占用,确保数据的一致性和完整性,并且更具针对性地同步必要的文件。


七、跨Vnet使用专用终结点同步的问题

如果两个存储帐户的私有终结点位于不同的虚拟网络(VNET)上,更有甚两个存储账户位于不同地区。运行azcopy sync命令的虚拟机也处于不同的VNET。这种配置差异可能导致数据同步403报错的问题

比如这个报错:

PS C:\Users\azureuser> azcopy sync "https://avdtestfile.file.core.windows.net/fslogix?sv=2022-11-02&ss=f&srt=sco&sp=rwdlc&se=2024-08-10T11:50:23Z&st=2024-07-17T03:50:23Z&spr=https&sig=Dc%2Fsb4ygl1jo%2F2zt7OM%2Fzd7Sy62QPeUhfAga1GYYnEs%3D" "https://avdfile2.file.core.windows.net/fslogix?sv=2022-11-02&ss=f&srt=sco&sp=rwdlc&se=2024-08-10T11:43:24Z&st=2024-07-17T03:43:24Z&spr=https&sig=IbJzsGwcA%2F0JBuqY1NZj8fIFuI%2BCunJOZWf40%2F%2FgZFE%3D" `  
>>   --recursive=true `  
>>   --delete-destination=true `  
>>   --preserve-permissions=true `  
>>   --preserve-smb-info=true  
INFO: Any empty folders will be processed, because source and destination both support folders. For the same reason, properties and permissions defined on folders will be processed  Job df0e0029-81af-b643-6b07-6cea874e155d has started  
Log file is located at: C:\Users\azureuser\.azcopy\df0e0029-81af-b643-6b07-6cea874e155d.log  INFO: Authentication failed, it is either not correct, or expired, or does not have the correct permission PUT https://avdfile2.file.core.windows.net/fslogix/tom_S-1-5-21-3585814000-3636403111-4157032647-1104/Profile_tom.VHDX.metadata  
--------------------------------------------------------------------------------  
RESPONSE 403: 403 This request is not authorized to perform this operation.  
ERROR CODE: CannotVerifyCopySource  
--------------------------------------------------------------------------------  
<?xml version="1.0" encoding="utf-8"?><Error><Code>CannotVerifyCopySource</Code><Message>This request is not authorized to perform this operation.  
RequestId:49481f1d-501a-0036-5a0c-d833f7000000  
Time:2024-07-17T05:45:04.3312926Z</Message></Error>  
--------------------------------------------------------------------------------  0.0 %, 1 Done, 0 Failed, 2 Pending, 3 Total, 2-sec Throughput (Mb/s): 0  Job df0e0029-81af-b643-6b07-6cea874e155d Summary  
Files Scanned at Source: 2  
Files Scanned at Destination: 0  
Elapsed Time (Minutes): 0.0668  
Number of Copy Transfers for Files: 2  
Number of Copy Transfers for Folder Properties: 1  
Total Number of Copy Transfers: 3  
Number of Copy Transfers Completed: 1  
Number of Copy Transfers Failed: 0  
Number of Deletions at Destination: 0  
Total Number of Bytes Transferred: 0  
Total Number of Bytes Enumerated: 171966736  
Final Job Status: Cancelled

针对这个问题,有两种可能的解决方案,(专用终结点的DNS解析要没问题):

  1. 合并私有终结点:第一种解决方案涉及将私有终结点移动到同一个子网。我们可以将目标存储帐户的私有终结点设置成源存储帐户的私有终结点所在的子网。

在这里插入图片描述

  1. VNET 对等连接和传输客户端:或者,你可以在这两个VNET之间建立VNET对等连接。此外,你可以在其中一个VNET内创建一个新的虚拟机(VM),作为传输客户端。

在这里插入图片描述

八、Azcopy Sync 配置和注意事项

1. 问题:azcopy sync 执行时客户端和存储账户之间的通信机制是怎样的?

  • azcopy sync 客户端在执行数据同步时,通过 HTTPS(端口 443)从源存储账户读取数据,并将数据写入目标存储账户。数据传输是通过客户端在源存储账户和目标存储账户之间进行的,中间没有直接的存储账户间通信。

2. 问题:在 azcopy sync 的操作中,执行命令的服务器是否相当于代理服务器?

  • azcopy sync 客户端可以视为一个“中介”角色,从源存储账户读取数据并将其写入目标存储账户。与传统的代理服务器不同,azcopy sync 客户端实际持有并处理数据,而不仅仅是转发请求和响应。

3. 问题:azcopy sync 客户端的硬件和网络配置需要什么?

硬件配置

  1. 处理器(CPU)

    • 多核处理器,建议使用多核处理器以并行处理多个数据传输任务。
  2. 内存(RAM)

    • 至少 4 GB 内存,对于大规模的数据传输,建议使用更高的内存配置。
  3. 存储(Disk)

    • 足够的临时存储空间,建议使用 SSD 提高读写速度。

网络配置

  1. 带宽

    • 高带宽网络连接,建议使用至少 100 Mbps 的网络连接。
  2. 网络稳定性

    • 稳定的网络连接,使用有线连接而非无线连接提高稳定性。
  3. 防火墙和端口

    • 开放端口 443,确保防火墙允许通过端口 443 的 HTTPS 流量。

    • 允许访问 Azure 存储终结点,在防火墙中配置允许 azcopy sync 客户端访问源和目标存储账户的终结点。

软件配置

  1. 操作系统

    • 支持的操作系统:Windows、Linux 和 macOS 均支持 AzCopy。
  2. AzCopy 安装

    • 安装最新版本的 AzCopy。
  3. 环境变量和代理配置(如果适用):

    • 配置环境变量 HTTP_PROXYHTTPS_PROXY(如果需要通过代理服务器访问网络)。

其他注意事项

  1. 时间同步

    • 确保服务器时间与实际时间同步,避免因时间不同步导致的 SAS 令牌验证失败。
  2. 权限管理

    • 确保运行 AzCopy 命令的用户具有足够的权限访问源和目标存储账户。
  3. 数据一致性检查

    • 在大规模数据传输后,进行数据一致性检查,确保所有文件都正确传输,没有遗漏或损坏。

4. 问题:azcopy sync 客户端和存储账户需要配置哪些网络设置?

客户端配置

  • 网络访问:客户端必须能够通过端口 443 访问源存储账户和目标存储账户。

  • 防火墙和代理设置:如果使用防火墙或代理服务器,确保允许 HTTPS 流量(端口 443)。

源存储账户配置

  • 防火墙规则:允许客户端的 IP 地址或 IP 范围访问源存储账户。

  • SAS 令牌:生成具有读取权限的 SAS 令牌。

目标存储账户配置

  • 防火墙规则:允许客户端的 IP 地址或 IP 范围访问目标存储账户。

  • SAS 令牌:生成具有写入和删除权限的 SAS 令牌。

5. 需要注意的配置和可能的阻碍

  1. 存储账户防火墙和虚拟网络配置

    • 防火墙规则:确保存储账户的防火墙规则允许来自 azcopy sync 客户端的IP地址或IP范围的访问。

    • 虚拟网络规则:如果存储账户配置了虚拟网络规则,确保 azcopy sync 客户端在允许的虚拟网络内。

  2. 网络连接

    • 网络带宽:确保有足够的网络带宽支持所需的数据传输量。较大的文件传输可能需要更高的带宽。

    • 网络延迟:较低的网络延迟有助于提高传输性能。

  3. 端口开放

    • 端口 443azcopy sync 客户端和存储账户之间的通信使用 HTTPS 协议,需要开放端口 443 以便进行安全的 HTTP 流量。
  4. 代理设置(如果适用):

    • 如果你的网络环境中使用了代理服务器,请确保 azcopy 配置正确的代理设置。可以设置环境变量 HTTP_PROXYHTTPS_PROXY
  5. Azure 存储账户SAS令牌权限

    • 权限范围:确保生成的 SAS 令牌具有足够的权限(如读取、写入、删除等),以执行 azcopy sync 命令所需的操作。

    • 有效期:确保 SAS 令牌在同步操作期间是有效的。

  6. 身份验证和授权

    • 如果使用 Azure AD 进行身份验证,请确保配置了正确的权限和角色,以允许访问和操作存储账户中的数据。
  7. 网络安全组(NSG)规则

    • 如果你的存储账户位于虚拟网络内,请确保配置正确的 NSG 规则,允许存储账户的入站和出站流量。

6. 可能的阻碍和解决方案

  1. 网络连接错误

    • 确认网络连接是否稳定,确保 azcopy sync 能够访问 Azure 存储服务。
  2. 权限错误

    • 确认 SAS 令牌或 Azure AD 令牌具有正确的权限。
  3. 带宽限制

    • 如果网络带宽受限,可能会导致传输速度变慢或失败。
  4. 防火墙或代理阻止

    • 确认防火墙规则和代理设置不会阻止 azcopy sync 访问 Azure 存储账户的终结点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/378591.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JVM实战篇】内存调优:内存泄露危害+内存监控工具介绍+内存泄露原因介绍

文章目录 内存调优内存溢出和内存泄漏内存泄露带来什么问题内存泄露案例演示内存泄漏的常见场景场景一场景二 解决内存溢出的方法常用内存监控工具Top命令优缺点 VisualVM软件、插件优缺点监控本地Java进程监控服务器的Java进程&#xff08;生产环境不推荐使用&#xff09; Art…

大气热力学(8)——热力学图的应用之一(气象要素求解)

本篇文章源自我在 2021 年暑假自学大气物理相关知识时手写的笔记&#xff0c;现转化为电子版本以作存档。相较于手写笔记&#xff0c;电子版的部分内容有补充和修改。笔记内容大部分为公式的推导过程。 文章目录 8.1 复习斜 T-lnP 图上的几种线8.1.1 等温线和等压线8.1.2 干绝热…

信创学习笔记(四),信创之数据库DB思维导图

创作不易 只因热爱!! 热衷分享&#xff0c;一起成长! “你的鼓励就是我努力付出的动力” 一. 信创学习回顾 1.信创内容 信创内容思维导图 2.信创之CPU芯片架构 信创之CPU芯片架构思维导图 3.信创之操作系统OS 信创之操作系统OS思维导图 二. 信创之国产数据库DB思维导图 …

Sentinel规则持久化Push模式两种实现方式

文章目录 sentinel持久化push推模式微服务端的实现具体实现源码分析读数据源写数据源的实现 微服务端解析读数据源流程 修改源码的实现官方demo修改源码实现配置类flowauthoritydegreadparamsystemgateway修改源码 测试补充 前置知识 pull模式 sentinel持久化push推模式 pull拉…

MySQL数据库慢查询日志、SQL分析、数据库诊断

1 数据库调优维度 业务需求&#xff1a;勇敢地对不合理的需求说不系统架构&#xff1a;做架构设计的时候&#xff0c;应充分考虑业务的实际情况&#xff0c;考虑好数据库的各种选择(读写分离?高可用?实例个数?分库分表?用什么数据库?)SQL及索引&#xff1a;根据需求编写良…

【深度学习】PyTorch框架(4):初始网络、残差网络 和密集连接网络

1、引言 在本篇文章中&#xff0c;我们将深入探讨并实现一些现代卷积神经网络&#xff08;CNN&#xff09;架构的变体。近年来&#xff0c;学界提出了众多新颖的网络架构。其中一些最具影响力&#xff0c;并且至今仍然具有重要地位的架构包括&#xff1a;GoogleNet/Inception架…

【2024_CUMCM】时间序列1

目录 概念 时间序列数据 时期和时点时间序列 数值变换规律 长期趋势T 季节趋势S 循环变动C 不规则变动I 叠加和乘积模型 叠加模型 相互独立 乘积模型 相互影响 注 spss缺失值填补 简单填补 五种填补方法 填补原则 1.随机缺失 2.完全随机缺失 3.非随机缺失…

【日常记录】【插件】excel.js 的使用

文章目录 1. 引言2. excel.js2.1 创建工作簿和工作表2.2 excel文件的导出2.3 excel文件的导入2.4 列2.5 行2.6 添加行2.7 单元格2.8 给总价列设置自动计算(除表头行) 3. 总结参考链接 1. 引言 前端导出excel文件常用库一般是 excel.js 和 xlsx.js xlsx.js 导出数据确实方便&…

超时导致SparkContext构造失败的问题探究

文章目录 1.前言2. 基于事故现场对问题进行分析2.1 日志分析2.2 单独测试Topology代码试图重现问题 3. 源码解析3.1 Client模式和Cluster模式下客户端的提交和启动过程客户端提交时在两种模式下的处理逻辑ApplicationMaster启动时在两种模式下的处理逻辑 3.2 两种模式下的下层角…

Python和C++骨髓细胞进化解析数学模型

&#x1f3af;要点 &#x1f3af; 数学模型邻接矩阵及其相关的转移概率 | &#x1f3af;蒙特卡罗模拟进化动力学 | &#x1f3af;细胞进化交叉图族概率 | &#x1f3af;进化图模型及其数学因子 | &#x1f3af;混合图模式对进化概率的影响 | &#x1f3af;造血干细胞群体的空间…

7.13实训日志

上午 学习网络安全的过程中&#xff0c;我们深入了解了网络的不同层面和技术&#xff0c;从表层网络到深网再到暗网&#xff0c;以及涉及的产业分类和技术工具。这些知识不仅帮助我们理解网络的复杂性&#xff0c;还揭示了如何应对和防范各种网络威胁。 首先&#xff0c;我们…

Qt Style Sheets-入门

Qt 样式表是一种强大的机制&#xff0c;允许您自定义小部件的外观&#xff0c;这是在通过子类化QStyle已经可行的基础上的补充。Qt 样式表的概念、术语和语法在很大程度上受到 HTML级联样式表 (CSS)的启发&#xff0c;但适用于小部件的世界。 概述 样式表是文本规范&#xff0…

【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow

一、项目介绍 眼疾识别系统&#xff0c;使用Python作为主要编程语言进行开发&#xff0c;基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法&#xff0c;通过对眼疾图片4种数据集进行训练&#xff08;‘白内障’, ‘糖尿病性视网膜病变’, ‘青光眼’, ‘正常’&…

C++动态内存的管理

今天来分享C动态内存管理相关知识&#xff0c;闲言勿谈&#xff0c;直接上干货。 1. 动态内存的开辟和销毁(new和delete) (1)前置知识&#xff1a;我们知道c语言有malloc和calloc和realloc三个函数可以进行动态的开辟内存&#xff0c;那么它们有什么区别呢&#xff1f;首先是…

IntelliJ IDEA 2024.1 最新变化 附问卷调查 AI

IntelliJ IDEA 2024.1 最新变化 问卷调查项目在线AI IntelliJ IDEA 2024.1 最新变化关键亮点全行代码补全 Ultimate对 Java 22 功能的支持新终端 Beta编辑器中的粘性行 AI AssistantAI Assistant 改进 UltimateAI Assistant 中针对 Java 和 Kotlin 的改进代码高亮显示 Ultimate…

【STM32嵌入式系统设计与开发---拓展】——1_9_1上拉输入和下拉输入

在使用GPIO引脚时&#xff0c;上拉输入和下拉输入的选择取决于外部电路的特性和应用需求。以下是它们各自的应用场景&#xff1a; 1、上拉输入&#xff08;Pull-up Input&#xff09; 用途: 当默认状态需要为高电平时。 避免引脚悬空&#xff08;floating&#xff09;导致的…

安卓onNewIntent 什么时候执行

一.详细介绍 onNewIntent 方法 onNewIntent 是 Android 中 Activity 生命周期的一部分。它在特定情况下被调用&#xff0c;主要用于处理新的 Intent&#xff0c;而不是创建新的 Activity 实例。详细介绍如下&#xff1a; 使用场景 singleTop 启动模式&#xff1a; 如果一个 Ac…

《云原生安全攻防》-- 容器攻击案例:Docker容器逃逸

当攻击者获得一个容器环境的shell权限时&#xff0c;攻击者往往会尝试进行容器逃逸&#xff0c;利用容器环境中的错误配置或是漏洞问题&#xff0c;从容器成功逃逸到宿主机&#xff0c;从而获取到更高的访问权限。 在本节课程中&#xff0c;我们将详细介绍一些常见的容器逃逸方…

构建实时银行应用程序:英国金融机构 Nationwide 为何选择 MongoDB Atlas

Nationwide Building Society 超过135年的互助合作 Nationwide Building Society&#xff08;以下简称“Nationwide”&#xff09; 是一家英国金融服务提供商&#xff0c;拥有超过 1500 万名会员&#xff0c;是全球最大的建房互助会。 Nationwide 的故事可以追溯到 1884 年&am…

论文翻译:Large Language Models for Education: A Survey

目录 大型语言模型在教育领域的应用&#xff1a;一项综述摘要1 引言2. 教育中的LLM特征2.1. LLMs的特征2.2 教育的特征2.2.1 教育发展过程 低进入门槛。2.2.2. 对教师的影响2.2.3 教育挑战 2.3 LLMEdu的特征2.3.1 "LLMs 教育"的具体体现2.3.2 "LLMs 教育"…