门店门面设计效果图/江北关键词优化排名seo
文章目录
- 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 工具中的一个命令,用于在两个存储位置之间进行增量同步。它会比较源位置和目标位置的文件,仅复制源位置中新创建或修改的文件,并删除目标位置中不再存在于源位置中的文件,以确保两者的一致性。
假设你有一个源文件共享和一个目标文件共享,初次同步后,只会复制源文件共享中所有的文件。第二次同步时,只有源文件共享中新添加或修改的文件会被复制到目标文件共享,并且目标文件共享中不在源文件共享中的文件会被删除。
一、工作原理
-
比较源和目标:
azcopy sync
会比较源和目标位置的文件,根据文件的修改时间和大小来决定哪些文件需要复制、更新或删除。
-
增量复制:
- 只有在源位置中新创建或修改的文件才会被复制到目标位置。
-
删除目标中的多余文件:
- 如果在目标位置中发现有不在源位置中的文件,
azcopy sync
会根据设置删除这些文件,以保持源和目标的一致性。
- 如果在目标位置中发现有不在源位置中的文件,
二、安装 AzCopy
在 Windows 上
-
下载 AzCopy:
-
访问 AzCopy 下载页面。
-
下载适用于 Windows 的 AzCopy ZIP 文件。
-
-
安装 AzCopy:
-
解压下载的 ZIP 文件。
-
将
azcopy.exe
复制到一个常用目录,例如C:\Program Files (x86)\AzCopy
。
-
-
添加到系统路径:
-
打开“系统属性”对话框。
-
点击“高级系统设置”。
-
点击“环境变量”按钮。
-
在“系统变量”部分,找到
Path
变量,并点击“编辑”。 -
点击“新建”,并添加 AzCopy 安装目录的路径(例如
C:\Program Files (x86)\AzCopy
)。 -
点击“确定”保存更改。
-
-
验证安装:
-
打开命令提示符或 PowerShell。
-
运行
azcopy
命令,确保显示 AzCopy 的帮助信息。
-
在 Linux 上
- 下载 AzCopy:
wget https://aka.ms/downloadazcopy-v10-linux -O azcopy_linux.tar.gz
- 安装 AzCopy:
tar -xvf azcopy_linux.tar.gz sudo mv azcopy_linux_amd64_10.25.1/azcopy /usr/local/bin/
- 验证安装:
azcopy --version
三、资源准备
1. 创建源和目标 Azure 存储账户
2. 创建源和目标文件共享
3. 确定路径
确定你要同步的文件和目录路径:
-
源路径:指向源文件共享中的具体目录或文件。
-
目标路径:指向目标文件共享中的具体目录。
4. 生成源和目的存储账户的共享访问签名(SAS)令牌
共享访问签名 (SAS) 令牌是一个 URI,可以授予有限时间内对 Azure 存储资源的访问权限。SAS 令牌为你提供了一种安全的方式来授予客户端对存储资源的细粒度访问,而无需共享存储帐户密钥。通过使用 SAS 令牌,你可以控制客户端对资源的访问权限,包括允许的操作、资源的类型、访问的开始时间和到期时间等。
生成 SAS 令牌以提供对存储资源的访问权限:
-
导航到存储账户:
- 在 Azure 门户中,选择你创建的存储账户。
-
生成 SAS 令牌:
- 在存储账户页面的左侧菜单中选择“共享访问签名”。
配置权限
-
选择服务:
- 选择
文件
服务,因为azcopy sync
是用于 Azure 文件共享的同步操作。
- 选择
-
选择资源类型:
- 勾选
服务
,容器
和对象
。这确保你可以访问文件共享中的所有资源。
- 勾选
-
选择权限:
-
勾选以下权限:
-
读 (
读
) -
写 (
写
) -
删除 (
删除
) -
列表 (
列出
)
-
-
这些权限确保
azcopy sync
命令可以读取、写入、删除和列出文件共享中的文件。
-
-
设置有效期:
-
配置
开始日期/时间
和结束日期/时间
。 -
例如,设置开始时间为当前时间,结束时间为你希望的有效期结束时间。
-
-
设置 IP 地址(可选):
- 你可以指定允许访问的 IP 地址范围。如果不需要限制特定 IP,可以留空。
-
选择协议:
- 选择
HTTPS
或HTTPS 和 HTTP
。为了安全性,建议选择HTTPS
。
- 选择
-
生成 SAS 令牌:
- 配置完成后,点击页面底部的
生成 SAS 和连接字符串
按钮。
- 配置完成后,点击页面底部的
-
获取 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]"
必须开启的参数
-
–recursive=true:
- 递归地同步所有子目录和文件。这是默认行为,但明确指定有助于确保所有子目录和文件都被包含在同步操作中。
-
–delete-destination=true:
- 删除目标位置中不在源位置中的文件,以确保源和目标的一致性。
-
–preserve-permissions=true:
- 保留文件和目录的权限信息。这在需要保持文件权限设置的环境中尤为重要。
-
–preserve-smb-info=true:
- 保留 SMB 信息(如时间戳、属性等),以确保文件和目录的元数据在同步后保持一致。
推荐开启的参数
--log-level=INFO
- 设置日志级别为 INFO,以便详细记录同步过程中的信息,便于调试和监控。
可选择开启的参数
-
--overwrite=ifSourceNewer
- 仅在源文件比目标文件更新时才覆盖目标文件。这有助于减少不必要的数据传输。
- 确保源和目标存储账户的时间戳准确。如果服务器时间不同步,可能会导致不必要的文件传输或漏传文件
-
--check-md5
- 在比较文件时检查 MD5 哈希值。这可以确保文件内容的完全一致性,传输后的文件与源文件完全一致,防止数据损坏
- 计算 MD5 哈希值会增加 CPU 和时间开销,特别是对于大文件或大量文件的同步操作。
-
--put-md5
- 在上传时为文件计算 MD5 哈希值,并将其作为文件的 Content-MD5 属性保存。适用于确保数据传输完整性的场景。
-
--cap-mbps=<rate>
- 限制传输速率,指定传输速率的上限(以 Mbps 为单位)。适用于需要控制带宽使用的场景。
-
--exclude-path=<path1;path2>
- 排除指定的路径,在同步过程中忽略这些路径。适用于需要排除特定目录的场景。
-
--include-pattern=<pattern1;pattern2>
- 仅包含符合指定模式的文件进行同步。适用于需要同步特定类型文件的场景。
-
--exclude-pattern=<pattern1;pattern2>
- 排除符合指定模式的文件。在同步过程中忽略这些文件。
-
--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"
fi
SOURCE_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
fi
echo "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解析要没问题):
- 合并私有终结点:第一种解决方案涉及将私有终结点移动到同一个子网。我们可以将目标存储帐户的私有终结点设置成源存储帐户的私有终结点所在的子网。
- VNET 对等连接和传输客户端:或者,你可以在这两个VNET之间建立VNET对等连接。此外,你可以在其中一个VNET内创建一个新的虚拟机(VM),作为传输客户端。
八、Azcopy Sync 配置和注意事项
1. 问题:azcopy sync
执行时客户端和存储账户之间的通信机制是怎样的?
azcopy sync
客户端在执行数据同步时,通过 HTTPS(端口 443)从源存储账户读取数据,并将数据写入目标存储账户。数据传输是通过客户端在源存储账户和目标存储账户之间进行的,中间没有直接的存储账户间通信。
2. 问题:在 azcopy sync
的操作中,执行命令的服务器是否相当于代理服务器?
azcopy sync
客户端可以视为一个“中介”角色,从源存储账户读取数据并将其写入目标存储账户。与传统的代理服务器不同,azcopy sync
客户端实际持有并处理数据,而不仅仅是转发请求和响应。
3. 问题:azcopy sync
客户端的硬件和网络配置需要什么?
硬件配置:
-
处理器(CPU):
- 多核处理器,建议使用多核处理器以并行处理多个数据传输任务。
-
内存(RAM):
- 至少 4 GB 内存,对于大规模的数据传输,建议使用更高的内存配置。
-
存储(Disk):
- 足够的临时存储空间,建议使用 SSD 提高读写速度。
网络配置:
-
带宽:
- 高带宽网络连接,建议使用至少 100 Mbps 的网络连接。
-
网络稳定性:
- 稳定的网络连接,使用有线连接而非无线连接提高稳定性。
-
防火墙和端口:
-
开放端口 443,确保防火墙允许通过端口 443 的 HTTPS 流量。
-
允许访问 Azure 存储终结点,在防火墙中配置允许
azcopy sync
客户端访问源和目标存储账户的终结点。
-
软件配置:
-
操作系统:
- 支持的操作系统:Windows、Linux 和 macOS 均支持 AzCopy。
-
AzCopy 安装:
- 安装最新版本的 AzCopy。
-
环境变量和代理配置(如果适用):
- 配置环境变量
HTTP_PROXY
和HTTPS_PROXY
(如果需要通过代理服务器访问网络)。
- 配置环境变量
其他注意事项:
-
时间同步:
- 确保服务器时间与实际时间同步,避免因时间不同步导致的 SAS 令牌验证失败。
-
权限管理:
- 确保运行 AzCopy 命令的用户具有足够的权限访问源和目标存储账户。
-
数据一致性检查:
- 在大规模数据传输后,进行数据一致性检查,确保所有文件都正确传输,没有遗漏或损坏。
4. 问题:azcopy sync
客户端和存储账户需要配置哪些网络设置?
客户端配置:
-
网络访问:客户端必须能够通过端口 443 访问源存储账户和目标存储账户。
-
防火墙和代理设置:如果使用防火墙或代理服务器,确保允许 HTTPS 流量(端口 443)。
源存储账户配置:
-
防火墙规则:允许客户端的 IP 地址或 IP 范围访问源存储账户。
-
SAS 令牌:生成具有读取权限的 SAS 令牌。
目标存储账户配置:
-
防火墙规则:允许客户端的 IP 地址或 IP 范围访问目标存储账户。
-
SAS 令牌:生成具有写入和删除权限的 SAS 令牌。
5. 需要注意的配置和可能的阻碍
-
存储账户防火墙和虚拟网络配置:
-
防火墙规则:确保存储账户的防火墙规则允许来自
azcopy sync
客户端的IP地址或IP范围的访问。 -
虚拟网络规则:如果存储账户配置了虚拟网络规则,确保
azcopy sync
客户端在允许的虚拟网络内。
-
-
网络连接:
-
网络带宽:确保有足够的网络带宽支持所需的数据传输量。较大的文件传输可能需要更高的带宽。
-
网络延迟:较低的网络延迟有助于提高传输性能。
-
-
端口开放:
- 端口 443:
azcopy sync
客户端和存储账户之间的通信使用 HTTPS 协议,需要开放端口 443 以便进行安全的 HTTP 流量。
- 端口 443:
-
代理设置(如果适用):
- 如果你的网络环境中使用了代理服务器,请确保
azcopy
配置正确的代理设置。可以设置环境变量HTTP_PROXY
和HTTPS_PROXY
。
- 如果你的网络环境中使用了代理服务器,请确保
-
Azure 存储账户SAS令牌权限:
-
权限范围:确保生成的 SAS 令牌具有足够的权限(如读取、写入、删除等),以执行
azcopy sync
命令所需的操作。 -
有效期:确保 SAS 令牌在同步操作期间是有效的。
-
-
身份验证和授权:
- 如果使用 Azure AD 进行身份验证,请确保配置了正确的权限和角色,以允许访问和操作存储账户中的数据。
-
网络安全组(NSG)规则:
- 如果你的存储账户位于虚拟网络内,请确保配置正确的 NSG 规则,允许存储账户的入站和出站流量。
6. 可能的阻碍和解决方案
-
网络连接错误:
- 确认网络连接是否稳定,确保
azcopy sync
能够访问 Azure 存储服务。
- 确认网络连接是否稳定,确保
-
权限错误:
- 确认 SAS 令牌或 Azure AD 令牌具有正确的权限。
-
带宽限制:
- 如果网络带宽受限,可能会导致传输速度变慢或失败。
-
防火墙或代理阻止:
- 确认防火墙规则和代理设置不会阻止
azcopy sync
访问 Azure 存储账户的终结点。
- 确认防火墙规则和代理设置不会阻止
相关文章:

Azcopy Sync同步Azure文件共享
文章目录 Azcopy Sync同步文件共享一、工作原理二、安装 AzCopy在 Windows 上在 Linux 上 三、资源准备1. 创建源和目标 Azure 存储账户2. 创建源和目标文件共享3. 确定路径4. 生成源和目的存储账户的共享访问签名(SAS)令牌配置权限示例生成的 URL 四、A…...

单例模式 饿汉式和懒汉式的区别
单例模式(Singleton Pattern)是设计模式中最简单、最常见、最容易实现的一种模式。它确保一个类仅有一个实例,并提供一个全局访问点。单例模式主要有两种实现方式:饿汉式(Eager Initialization)和懒汉式&am…...

Python中的模块和包的定义以及如何在Python中导入和使用它们
在Python中,模块(Module)和包(Package)是组织代码以便重用和共享的基本单元。它们使得Python代码更加模块化,易于管理和维护。 模块(Module) 模块是一个包含Python代码的文件&…...

设计模式使用场景实现示例及优缺点(结构型模式——组合模式)
结构型模式 组合模式(Composite Pattern) 组合模式使得用户对单个对象和组合对象的使用具有一致性。 有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元…...

《系统架构设计师教程(第2版)》第11章-未来信息综合技术-06-云计算(Cloud Computing) 技术概述
文章目录 1. 相关概念2. 云计算的服务方式2.1 软件即服务 (SaaS)2.2 平台即服务 (PaaS)2.3 基础设施即服务 (IaaS)2.4 三种服务方式的分析2.4.1 在灵活性2.4.2 方便性方 3. 云计算的部署模式3.1 公有云3.2 社区云3.3 私有云3.4 混合云 4. 云计算的发展历程4.1 虚拟化技术4.2 分…...

网络安全工作者如何解决网络拥堵
网络如同现代社会的血管,承载着信息的血液流动。然而,随着数据流量的激增,网络拥堵已成为不容忽视的问题,它像是一场数字世界的交通堵塞,减缓了信息传递的速度,扰乱了网络空间的秩序。作为网络安全的守护者…...

电脑显示mfc140u.dll丢失的修复方法,总结7种有效的方法
mfc140u.dll是什么?为什么电脑会出现mfc140u.dll丢失?那么mfc140u.dll丢失会给电脑带来什么影响?mfc140u.dll丢失怎么办?今天详细给大家一一探讨一下mfc140u.dll文件与mfc140u.dll丢失的多种不同解决方法分享! 一、mfc…...

ospf的MGRE实验
第一步:配IP [R1-GigabitEthernet0/0/0]ip address 12.0.0.1 24 [R1-GigabitEthernet0/0/1]ip address 21.0.0.1 24 [R1-LoopBack0]ip address 192.168.1.1 24 [ISP-GigabitEthernet0/0/0]ip address 12.0.0.2 24 [ISP-GigabitEthernet0/0/1]ip address 21.0.0.2 24…...

开发指南047-前端模块版本
平台前端框架内置了一个文件version.vue <template> <div> <br> 应用名称: {{name}} <br> 当前版本:{{version}} <br> 服务网关: {{gateway}} </div> </template> <scrip…...

c#中的字符串方法
Concat() String.Concat(字符串1 字符串n) 字符串拼接 Contains () 字符串1.Contains(字符串2) 字符串1是否包含字符串2返回布尔值 CopyTo() 字符串1.CopyTo(0,空数组,0,5); 从哪开始 复制到哪里 从哪开始存 存储的个数 tartsWith 字符串1.StartsWith("字符串") 以…...

成像光谱遥感技术中的AI革命:ChatGPT
遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力,ChatGPT在遥感中的应用,人工智能在…...

学习分布式事务遇到的小bug
一、介绍Seata 在处理分布式事务时我用到是Seata,Seata的事务管理中有三个重要的角色: TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器…...

ElasticSearch学习之路
前言 为什么学ElasticSearch? 数据一般有如下三种类型: 结构化数据,如:MySQL的表,一般通过索引提高查询效率非结构化数据,如:图片、音频等不能用表结构表示的数据,一般保存到mong…...

(C++二叉树02) 翻转二叉树 对称二叉树 二叉树的深度
226、翻转二叉树 递归法: 交换两个结点可以用swap()方法 class Solution { public:TreeNode* invertTree(TreeNode* root) {if(root NULL) return NULL;TreeNode* tem root->left;root->left root->right;root->right tem;invertTree(root->l…...

高阶面试-mongodb
mongodb的特点,为什么使用他 nosql数据库,前端到后端到数据库,都是json,无模式,数据模型发生变更,不需要强制更新表结构,可以快速实现需求迭代。 天生分布式,高可用,处…...

MySQL数据库慢查询日志、SQL分析、数据库诊断
1 数据库调优维度 业务需求:勇敢地对不合理的需求说不系统架构:做架构设计的时候,应充分考虑业务的实际情况,考虑好数据库的各种选择(读写分离?高可用?实例个数?分库分表?用什么数据库?)SQL及索引:根据需求编写良…...

[短笔记] Ubuntu配置环境变量的最佳实践
结论: 不确定是否要设为系统,则先针对当前用户设,写~/.profile确定为系统级,写/etc/environment,注意无需export不推荐写在~/.bashrc(Ubuntu不推荐,理由见references) References&…...

怎样在 PostgreSQL 中优化对多表关联的连接条件选择?
🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 怎样在 PostgreSQL 中优化对多表关联的连接条件选择一、理解多表关联的基本概念二、选择合适的连接条件…...

【Flowable | 第四篇】flowable工作流多任务实例节点实现会签/或签
文章目录 5.flowable工作流多任务实例节点实现会签/或签5.1会签/或签概念5.2多实例配置说明5.3会签例子5.3.1用户候选人配置5.3.2多实例配置5.3.3执行监听器配置5.3.5测试 5.flowable工作流多任务实例节点实现会签/或签 5.1会签/或签概念 我们在本篇中,将使用多任…...

解决C#读取US7ASCII字符集oracle数据库的中文乱码
👨 作者简介:大家好,我是Taro,全栈领域创作者 ✒️ 个人主页:唐璜Taro 🚀 支持我:点赞👍📝 评论 ⭐️收藏 文章目录 前言一、解决方法二、安装System.Data.OleDb连接库三…...

Linux驱动开发中设备节点、虚拟节点、逻辑节点之间的区别与关系
概述 在Linux DTS中我们可以看到各种各样的节点,每个节点都是对某一物理设备或功能抽象或具体的描述 设备节点 设备节点是对物理设备的一种具体的描述,它一般包含设备的寄存器地址、设备的类型、中断、时钟频率这些通用信息,除了这些通用信…...

【iOS】——ARC源码探究
一、ARC介绍 ARC的全称Auto Reference Counting. 也就是自动引用计数。使用MRC时开发者不得不花大量的时间在内存管理上,并且容易出现内存泄漏或者release一个已被释放的对象,导致crash。后来,Apple引入了ARC。使用ARC,开发者不再…...

ubuntu服务器安装labelimg报错记录
文章目录 报错提示查看报错原因安装报错 报错提示 按照步骤安装完labelimg后,在终端输入labelImg后,报错: (labelimg) rootinteractive59753:~# labelImg ………………Got keys from plugin meta data ("xcb") QFactoryLoader::Q…...

Transformer中Decoder的计算过程及各部分维度变化
在Transformer模型中,解码器的计算过程涉及多个步骤,主要包括自注意力机制、编码器-解码器注意力和前馈神经网络。以下是解码器的详细计算过程及数据维度变化: 1. 输入嵌入和位置编码 解码器的输入首先经过嵌入层和位置编码: I…...

QT实现滑动页面组件,多页面动态切换
这篇文章主要介绍了Qt实现界面滑动切换效果,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。 一、简述 一个基于Qt的动态滑动页面组件。 二、 设计思路 1、自定义StackWidget类,继承自QWidget,实现一个堆叠…...

使用Python-docx库创建Word文档
哈喽,大家好,我是木头左! 简介 Python-docx是一个用于处理Microsoft Word文档的Python库。它允许用户创建、修改和提取Word文档的内容。在本文中,将详细介绍如何使用Python-docx库创建一个新的Word文档。 安装Python-docx库 要使用Python-docx库,首先需要安装它。可以使…...

C# 设计一个可变长度的数据通信协议编码和解码代码。
设计一个可变长度的数据通信协议编码和解码代码。 要有本机ID字段,远端设备ID字段,指令类型字段,数据体字段,校验字段。其中一个要求是,每次固定收发八个字节,单个数据帧超过八个字节需要分包收发。对接收的…...

【MATLAB库函数系列】MATLAB库函数pwelch之功率谱估计的详解及实现
功率谱估计 由于实际信号通常是非定常的,我们只能假设其在10ms的时间段内是定常的,并在此基础上对短的定常信号求PSD或者能谱。 窗函数的作用就是将原始的信号分割成一段段可以计算PSD和能谱的短信号,并且保证了周期结构的连续性、避免了频谱泄漏。不同的窗函数具有不同的…...

科技出海|百分点科技智慧政务解决方案亮相非洲展会
近日,华为非洲全联接大会在南非约翰内斯堡举办,吸引政府官员行业专家、思想领袖、生态伙伴等2,000多人参会,百分点科技作为华为云生态合作伙伴,重点展示了智慧政务解决方案,发表《Enable a Smarter Government with Da…...

Prometheus 云原生 - Prometheus 数据模型、Metrics 指标类型、Exporter 相关
目录 开始 Prometheus 数据类型 简单理解 时序样本 格式 和 命名要求 Metrics 指标类型 Counter 计数器 Gauge Histogram Summary Exporter 相关 概述 Exporter 类型 Exporter 规范 开始 Prometheus 数据类型 简单理解 a)安装好 Prometheus 后会暴露…...