使用 Azure Stack Hub 儲存體中的資料轉送工具

Azure Stack Hub 提供磁碟、Blob、資料表、佇列和帳戶管理功能適用的一組儲存體服務。 如果您要管理資料、將資料移動至 Azure Stack Hub 儲存體,或從 Azure Stack Hub 儲存體移動資料,即可使用 Azure 儲存體工具。 本文提供可用工具的概觀。

您的需求會決定下列哪個工具最適合您:

  • AzCopy

    可下載的儲存體專用命令列公用程式,能夠從儲存體帳戶內或是在儲存體帳戶之間,從一個物件複製資料到另一個物件。

  • Azure PowerShell

    工作型的命令列 Shell 與指令碼語言,專為系統管理所設計。

  • Azure CLI

    開放原始碼、跨平台的工具,可提供一組運用在 Azure 和 Azure Stack Hub 平台上的命令。

  • Microsoft Azure 儲存體總管

    具有使用者介面且易於使用的獨立應用程式。

  • Blobfuse

    Azure Blob 儲存體的虛擬檔案系統驅動程式,能讓您透過 Linux 檔案系統存取儲存體帳戶中現有的區塊 Blob 資料。

由於 Azure 和 Azure Stack Hub 的儲存體服務有所不同,因此下列各節所述的各項工具可能會有一些特定的需求。 如需 Azure Stack Hub 儲存體和 Azure 儲存體之間的比較,請參閱 Azure Stack Hub 儲存體:差異與注意事項

AzCopy

AzCopy 是一個命令列公用程式,可以使用簡單命令高效率地將資料複製到和複製自 Microsoft Azure Blob 和資料表儲存體。 您可以從儲存體帳戶內或是在儲存體帳戶之間,從一個物件複製資料到另一個物件。

下載並安裝 AzCopy

下載 AzCopy V10+

AzCopy 10.1 的組態和限制

AzCopy 10.1 現在可以設定為使用舊版 API。 這可讓 Azure Stack Hub 獲得 (有限) 支援。 若要設定讓 AzCopy 能夠支援 Azure Stack Hub 的 API 版本,請將 AZCOPY_DEFAULT_SERVICE_API_VERSION 環境變數設定為 2017-11-09

作業系統 Command
Windows 在命令提示字元中,請使用:set AZCOPY_DEFAULT_SERVICE_API_VERSION=2017-11-09
在 PowerShell 中,請使用:$env:AZCOPY_DEFAULT_SERVICE_API_VERSION="2017-11-09"
Linux export AZCOPY_DEFAULT_SERVICE_API_VERSION=2017-11-09
MacOS export AZCOPY_DEFAULT_SERVICE_API_VERSION=2017-11-09

在 AzCopy 10.1 中,Azure Stack Hub 可支援下列功能:

功能 支援的動作
管理容器 建立容器
列出容器的內容
管理作業 顯示作業
繼續作業
移除 Blob 移除單一 Blob
移除整個或部分虛擬目錄
上傳檔案 上傳檔案
上傳目錄
上傳目錄的內容
下載檔案 下載檔案
下載目錄
下載目錄的內容
同步處理檔案 將容器同步處理至本機檔案系統
將本機檔案系統同步處理至容器

注意

  • Azure Stack Hub 不支援使用 Microsoft Entra 識別碼將授權認證提供給 AzCopy。 您必須使用共用存取簽章 (SAS) 權杖來存取 Azure Stack Hub 上的儲存體物件。
  • Azure Stack Hub 不支援在兩個 Azure Stack Hub Blob 位置之間以及在 Azure 儲存體和 Azure Stack Hub 之間同步傳輸資料。 您無法使用 "azcopy cp" 直接以 AzCopy 10.1 將資料從 Azure Stack Hub 移至 Azure 儲存體 (或反向移動)。

資料傳輸適用的 AzCopy 命令範例

下列範例會遵循將資料複製至 Azure Stack Hub Blob 以及從 Azure Stack Hub Blob 複製資料的典型案例。 若要深入了解,請參閱開始使用 AzCopy

將所有 Blob 下載至本機磁碟

azcopy cp "https://[account].blob.core.windows.net/[container]/[path/to/directory]?[SAS]" "/path/to/dir" --recursive=true

上傳單一檔案到虛擬目錄

azcopy cp "/path/to/file.txt" "https://[account].blob.core.windows.net/[container]/[path/to/blob]?[SAS]"

AzCopy 的已知問題

  • 檔案儲存體還無法在 Azure Stack Hub 中使用,因此檔案存儲存體沒有任何可用的 AzCopy 作業。
  • 如果您想要使用 AzCopy 10.1 在兩個 Azure Stack Hub Blob 位置之間或是在 Azure Stack Hub 和 Azure 儲存體之間傳輸資料,則必須先將資料下載至本機位置,再將資料重新上傳至 Azure Stack Hub 或 Azure 儲存體上的目標目錄。 或者,您也可以使用 AzCopy 7.1,並指定以 /SyncCopy 選項複製資料來進行傳輸。
  • Linux 版本的 AzCopy 僅支援 1802 更新或更新版本,且不支援表格服務。
  • 如果您想要將資料複製到 Azure 資料表儲存體服務 (或反向操作),則請安裝 AzCopy 7.3.0 版

Azure PowerShell

Azure PowerShell 是一個模組,可提供管理 Azure 和 Azure Stack Hub 上服務的 Cmdlet。 此模組為工作型的命令列 Shell 與指令碼語言,專為系統管理所設計。

安裝及設定用於 Azure Stack Hub 的 PowerShell

您需要與 Azure Stack Hub 相容的 Azure PowerShell 模組,才能搭配 Azure Stack Hub 使用。 如需詳細資訊,請參閱安裝適用於 Azure Stack Hub 的 PowerShell設定 Azure Stack Hub 使用者的 PowerShell 環境

適用於 Azure Stack Hub 的 PowerShell 範例指令碼

此範例假設您已成功安裝適用於 Azure Stack Hub 的 PowerShell。 此指令碼將協助您完成設定,並要求您的 Azure Stack Hub 租用戶認證,以便將帳戶新增至本機 PowerShell 環境。 接著,指令碼將設定預設的 Azure 訂用帳戶、在 Azure 中建立新的儲存體帳戶、在這個新的儲存體帳戶中建立新容器,並將現有的映像檔案 (Blob) 上傳至該容器。 指令碼列出該容器中的所有 Blob 之後,它會在本機電腦上建立新的目的地目錄並下載映像檔。

  1. 安裝 Azure Stack Hub 相容的 Azure PowerShell 模組
  2. 下載處理 Azure Stack Hub 所需的工具
  3. 開啟 [Windows PowerShell ISE] 和 [以系統管理員​​身分執行],然後按一下 [檔案][新增],以建立新的指令碼檔案。
  4. 複製下列指令碼並貼到新的指令碼檔案中。
  5. 根據您的組態設定,更新指令碼變數。

    注意

    此指令碼必須在 AzureStack_Tools 的根目錄上執行。

# begin

$ARMEvnName = "AzureStackUser" # set AzureStackUser as your Azure Stack Hub environment name
$ARMEndPoint = "https://management.local.azurestack.external" 
$GraphAudience = "https://graph.windows.net/" 
$AADTenantName = "<myDirectoryTenantName>.onmicrosoft.com" 

$SubscriptionName = "basic" # Update with the name of your subscription.
$ResourceGroupName = "myTestRG" # Give a name to your new resource group.
$StorageAccountName = "azsblobcontainer" # Give a name to your new storage account. It must be lowercase.
$Location = "Local" # Choose "Local" as an example.
$ContainerName = "photo" # Give a name to your new container.
$ImageToUpload = "C:\temp\Hello.jpg" # Prepare an image file and a source directory in your local computer.
$DestinationFolder = "C:\temp\download" # A destination directory in your local computer.

# Import the Connect PowerShell module"
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
Import-Module .\Connect\AzureStack.Connect.psm1

# Configure the PowerShell environment
# Register an Az environment that targets your Azure Stack Hub instance
Add-AzEnvironment -Name $ARMEvnName -ARMEndpoint $ARMEndPoint 

# Login
$TenantID = Get-AzsDirectoryTenantId -AADTenantName $AADTenantName -EnvironmentName $ARMEvnName
Connect-AzAccount -EnvironmentName $ARMEvnName -TenantId $TenantID 

# Set a default Azure subscription.
Select-AzSubscription -SubscriptionName $SubscriptionName

# Create a new Resource Group 
New-AzResourceGroup -Name $ResourceGroupName -Location $Location

# Create a new storage account.
New-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageAccountName -Location $Location -Type Standard_LRS

# Set a default storage account.
Set-AzCurrentStorageAccount -StorageAccountName $StorageAccountName -ResourceGroupName $ResourceGroupName 

# Create a new container.
New-AzStorageContainer -Name $ContainerName -Permission Off

# Upload a blob into a container.
Set-AzStorageBlobContent -Container $ContainerName -File $ImageToUpload

# List all blobs in a container.
Get-AzStorageBlob -Container $ContainerName

# Download blobs from the container:
# Get a reference to a list of all blobs in a container.
$blobs = Get-AzStorageBlob -Container $ContainerName

# Create the destination directory.
New-Item -Path $DestinationFolder -ItemType Directory -Force  

# Download blobs into the local destination directory.
$blobs | Get-AzureStorageBlobContent -Destination $DestinationFolder

# end

PowerShell 的已知問題

Get-AzStorageAccountKey 差異

Azure Stack Hub 目前相容的 Azure PowerShell 模組版本是 1.2.11 (供使用者作業使用)。 此版本與最新版的 Azure PowerShell 不同。 此差異會以下列方式影響儲存體服務作業:

Get-AzStorageAccountKey 在 1.2.11 版的傳回值格式有兩個屬性:Key1Key2,而目前的 Azure 版本則會傳回包含所有帳戶金鑰的陣列。

# This command gets a specific key for a storage account, 
# and works for Azure PowerShell version 1.4, and later versions.
(Get-AzStorageAccountKey -ResourceGroupName "RG01" `
-AccountName "MyStorageAccount").Value[0]

# This command gets a specific key for a storage account, 
# and works for Azure PowerShell version 1.3.2, and previous versions.
(Get-AzStorageAccountKey -ResourceGroupName "RG01" `
-AccountName "MyStorageAccount").Key1

如需詳細資訊,請參閱 Get-AzureRMStorageAccountKey

在 Azure Stack Hub 叢集之間複製 Blob

您可以使用 Start-AzStorageBlobCopy 開始複製工作來移動 Blob。 當您將屬性 AbsoluteUri 設定為另一個 Azure Stack Hub 叢集上的 Blob URI 時,可使用此 Cmdlet 在兩個 Azure Stack Hub 叢集之間複製 Blob。 請確定來源和目的地 Azure Stack Hub 叢集都位於相同的更新版本。 Azure Stack Hub 目前不支援使用 Start-AzStorageBlobCopy 在已部署不同更新版本的兩個 Azure Stack Hub 叢集之間複製 Blob。

Azure CLI

Azure CLI 是管理 Azure 資源的 Azure 命令列體驗。 您可以將它安裝在 macOS、Linux 及 Windows 上,並從命令列來執行。

Azure CLI 已針對以下作業進行最佳化:從命令列管理 Azure 資源進行,以及建置可用於 Azure Resource Manager 的自動化指令碼。 它提供許多與 Azure Stack Hub 入口網站相同的功能,包括眾多資料存取功能。

Azure Stack Hub 需要有 Azure CLI 2.0 版或更新版本。 如需有關安裝和設定用於 Azure Stack Hub 的 Azure CLI 詳細資訊,請參閱安裝和設定 Azure Stack Hub CLI。 如需有關如何搭配 Azure Stack Hub 儲存體帳戶中的資源使用 Azure CLI 執行多種工作的詳細資訊,請參閱使用 Azure CLI 搭配 Azure 儲存體

適用於 Azure Stack Hub 的 Azure CLI 範例指令碼

完成 CLI 的安裝和設定之後,您就可以嘗試下列步驟,使用一個小殼層範例指令碼來與 Azure Stack Hub 儲存體資源進行互動。 此指令碼可完成下列動作:

  • 在儲存體帳戶中建立新的容器。
  • 將現有檔案 (以 blob 形式) 上傳至容器。
  • 列出容器中的所有 Blob。
  • 將此檔案下載至您指定的本機電腦上的目的地。

執行此指令碼之前,請確定您已成功連線並登入目標 Azure Stack Hub。

  1. 開啟您喜愛的文字編輯器,然後複製上述指令碼並貼入編輯器中。
  2. 更新指令碼的變數以反映您的組態設定。
  3. 在您更新必要變數之後,請儲存指令碼並結束編輯器。 後續步驟假設您已將指令碼命名為 my_storage_sample.sh
  4. 如有必要,請將指令碼標示為可執行檔︰chmod +x my_storage_sample.sh
  5. 執行指令碼。 例如,在 Bash 中:./my_storage_sample.sh
#!/bin/bash
# A simple Azure Stack Hub storage example script

export AZURESTACK_RESOURCE_GROUP=<resource_group_name>
export AZURESTACK_RG_LOCATION="local"
export AZURESTACK_STORAGE_ACCOUNT_NAME=<storage_account_name>
export AZURESTACK_STORAGE_CONTAINER_NAME=<container_name>
export AZURESTACK_STORAGE_BLOB_NAME=<blob_name>
export FILE_TO_UPLOAD=<file_to_upload>
export DESTINATION_FILE=<destination_file>

echo "Creating the resource group..."
az group create --name $AZURESTACK_RESOURCE_GROUP --location $AZURESTACK_RG_LOCATION

echo "Creating the storage account..."
az storage account create --name $AZURESTACK_STORAGE_ACCOUNT_NAME --resource-group $AZURESTACK_RESOURCE_GROUP --account-type Standard_LRS

echo "Creating the blob container..."
az storage container create --name $AZURESTACK_STORAGE_CONTAINER_NAME --account-name $AZURESTACK_STORAGE_ACCOUNT_NAME

echo "Uploading the file..."
az storage blob upload --container-name $AZURESTACK_STORAGE_CONTAINER_NAME --file $FILE_TO_UPLOAD --name $AZURESTACK_STORAGE_BLOB_NAME --account-name $AZURESTACK_STORAGE_ACCOUNT_NAME

echo "Listing the blobs..."
az storage blob list --container-name $AZURESTACK_STORAGE_CONTAINER_NAME --account-name $AZURESTACK_STORAGE_ACCOUNT_NAME --output table

echo "Downloading the file..."
az storage blob download --container-name $AZURESTACK_STORAGE_CONTAINER_NAME --account-name $AZURESTACK_STORAGE_ACCOUNT_NAME --name $AZURESTACK_STORAGE_BLOB_NAME --file $DESTINATION_FILE --output table

echo "Done"

Microsoft Azure 儲存體總管

Azure 儲存體總管是 Microsoft 提供的獨立應用程式。 此工具可讓您在 Windows、MacOS 和 Linux 電腦上輕鬆處理 Azure 儲存體和 Azure Stack Hub 儲存體的資料。 如果想要輕鬆地管理您的 Azure Stack Hub 儲存體資料,請考慮使用 Microsoft Azure 儲存體總管。

Blobfuse

Blobfuse 是 Azure Blob 儲存體的虛擬檔案系統驅動程式,能讓您透過 Linux 檔案系統存取儲存體帳戶中現有的區塊 Blob 資料。 Azure Blob 儲存體是物件儲存體服務,因此沒有階層命名空間。 透過使用虛擬目錄配置,再將正斜線 / 當做分隔符號,Blobfuse 遂能提供此種命名空間。 Blobfuse 可在 Azure 與 Azure Stack Hub 上運作。

若要深入了解如何使用 Blobfuse 在 Linux 上將 Blob 儲存體掛接為檔案系統,請參閱使用 Blobfuse 將 Blob 儲存體掛接為檔案系統

對於 Azure Stack Hub,在設定儲存體帳戶認證時,除了 accountName、accountKey/sasToken 和 containerName,還必須指定 blobEndpoint

在 Azure Stack 開發套件 (ASDK) 中,blobEndpoint 應該是 。 在 Azure Stack Hub 整合系統中,如果不確定您的端點,請連絡您的雲端系統管理員。

accountKey 和 sasToken 一次只能設定一個。 指定儲存體帳戶金鑰時,認證組態檔採用下列格式:

accountName myaccount 
accountKey myaccesskey== 
containerName mycontainer 
blobEndpoint myaccount.blob.local.azurestack.external

指定共用存取權杖時,認證組態檔採用下列格式:

accountName myaccount 
sasToken ?mysastoken 
containerName mycontainer 
blobEndpoint myaccount.blob.local.azurestack.external

後續步驟