共用方式為


在 Linux 上使用 AzCopy v7 傳輸數據

AzCopy 是一種命令行公用程式,其設計目的是使用專為最佳效能而設計的簡單命令,將數據複製到 azure Blob 和檔案記憶體Microsoft。 您可以在檔案系統和儲存體帳戶之間,或者儲存體帳戶之間複製資料。

重要

本文主要介紹舊版 AzCopy。 若要安裝最新版本的 AzCopy,請參閱 AzCopy v10

注意

從 AzCopy 7.2 版開始,.NET Core 相依性會與 AzCopy 套件一起封裝。 如果您使用 7.2 版或更新版本,就不再需要將 .NET Core 安裝為必要條件。

下載並安裝 AzCopy

在 Linux 上安裝

注意

視您的發行版而定,您可能需要安裝此 .NET Core 必要條件一文 中醒目提示的 .NET Core 2.1 相依性。

針對 RHEL 7 散發套件,安裝 ICU 和 libunwind 相依性: yum install -y libunwind icu

在Linux上安裝 AzCopy (v7.2 或更新版本)就像擷取 tar 套件並執行安裝腳本一樣簡單。

RHEL 6 型散發套件下載連結

wget -O azcopy.tar.gz https://aka.ms/downloadazcopylinuxrhel6
tar -xf azcopy.tar.gz
sudo ./install.sh

所有其他 Linux 發行版下載連結

wget -O azcopy.tar.gz https://aka.ms/downloadazcopylinux64
tar -xf azcopy.tar.gz
sudo ./install.sh

安裝 Linux 上的 AzCopy 之後,您可以移除解壓縮的檔案。 或者,如果您沒有超級用戶許可權,您也可以使用解壓縮資料夾中的殼層腳本 azcopy 來執行 azcopy

Ubuntu 上的替代安裝

Ubuntu 14.04

新增 Microsoft Linux 產品存放庫的 apt 來源,並安裝 AzCopy:

sudo echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod/ trusty main" > azure.list
sudo cp ./azure.list /etc/apt/sources.list.d/
sudo apt-key adv --keyserver packages.microsoft.com --recv-keys EB3E94ADBE1229CF
sudo apt-get update
sudo apt-get install azcopy

Ubuntu 16.04

新增 Microsoft Linux 產品存放庫的 apt 來源,並安裝 AzCopy:

echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod/ xenial main" > azure.list
sudo cp ./azure.list /etc/apt/sources.list.d/
sudo apt-key adv --keyserver packages.microsoft.com --recv-keys EB3E94ADBE1229CF
sudo apt-get update
sudo apt-get install azcopy

撰寫您的第一個 AzCopy 命令

AzCopy 命令的基本語法為:

azcopy --source <source> --destination <destination> [Options]

下列範例示範從 azure Blob 和檔案Microsoft複製數據的各種案例。 如需 azcopy --help 每個範例中所使用參數的詳細說明,請參閱功能表。

Blob:下載

下載單一 Blob

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer/abc.txt \
    --destination /mnt/myfiles/abc.txt \
    --source-key <key> 

如果資料夾 /mnt/myfiles 不存在,AzCopy 會建立資料夾並下載 abc.txt 到新的資料夾。

從次要區域下載單一 Blob

azcopy \
    --source https://myaccount-secondary.blob.core.windows.net/mynewcontainer/abc.txt \
    --destination /mnt/myfiles/abc.txt \
    --source-key <key>

請注意,您必須啟用讀取許可權異地備援記憶體。

下載所有 Blob

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer \
    --destination /mnt/myfiles \
    --source-key <key> \
    --recursive

假設下列 Blob 位於指定的容器中:

abc.txt
abc1.txt
abc2.txt
vd1/a.txt
vd1/abcd.txt

下載作業之後,目錄 /mnt/myfiles 會包含下列檔案:

/mnt/myfiles/abc.txt
/mnt/myfiles/abc1.txt
/mnt/myfiles/abc2.txt
/mnt/myfiles/vd1/a.txt
/mnt/myfiles/vd1/abcd.txt

如果您未指定 選項 --recursive,將不會下載任何 Blob。

下載具有指定前置詞的 Blob

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer \
    --destination /mnt/myfiles \
    --source-key <key> \
    --include "a" \
    --recursive

假設下列 Blob 位於指定的容器中。 所有開頭為前置詞 a 的 Blob 都會下載。

abc.txt
abc1.txt
abc2.txt
xyz.txt
vd1\a.txt
vd1\abcd.txt

下載作業之後,資料夾 /mnt/myfiles 會包含下列檔案:

/mnt/myfiles/abc.txt
/mnt/myfiles/abc1.txt
/mnt/myfiles/abc2.txt

前置詞會套用至虛擬目錄,此目錄會形成 Blob 名稱的第一個部分。 在上述範例中,虛擬目錄不符合指定的前置詞,因此不會下載任何 Blob。 此外,如果未指定 選項 --recursive ,AzCopy 不會下載任何 Blob。

將匯出檔案的上次修改時間設定為與來源 Blob 相同

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer \
    --destination "/mnt/myfiles" \
    --source-key <key> \
    --preserve-last-modified-time

您也可以根據 Blob 上次修改的時間,從下載作業中排除 Blob。 例如,如果您想要排除上次修改時間與目的地檔案相同或更新的 Blob,請新增 --exclude-newer 選項:

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer \
    --destination /mnt/myfiles \
    --source-key <key> \
    --preserve-last-modified-time \
    --exclude-newer

或者,如果您想要排除上次修改時間與目的地檔案相同或更早的 Blob,請新增 --exclude-older 選項:

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer \
    --destination /mnt/myfiles \
    --source-key <key> \
    --preserve-last-modified-time \
    --exclude-older

Blob:上傳

上傳單一檔案

azcopy \
    --source /mnt/myfiles/abc.txt \
    --destination https://myaccount.blob.core.windows.net/mycontainer/abc.txt \
    --dest-key <key>

如果指定的目的地容器不存在,則 AzCopy 會建立此容器並將檔案上傳至該容器中。

將單一檔案上傳至虛擬目錄

azcopy \
    --source /mnt/myfiles/abc.txt \
    --destination https://myaccount.blob.core.windows.net/mycontainer/vd/abc.txt \
    --dest-key <key>

如果指定的虛擬目錄不存在,AzCopy 會上傳檔案,以將虛擬目錄包含在 Blob 名稱中(例如vd/abc.txt,在上述範例中)。

從 stdin 重新導向

gzip myarchive.tar -c | azcopy \
    --destination https://myaccount.blob.core.windows.net/mycontainer/mydir/myarchive.tar.gz \
    --dest-key <key>

上傳所有檔案

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/mycontainer \
    --dest-key <key> \
    --recursive

指定選項 --recursive 會以遞歸方式將指定目錄的內容上傳至 Blob 記憶體,這表示也會上傳所有子資料夾及其檔案。 例如,假設下列檔案位於 資料夾中 /mnt/myfiles

/mnt/myfiles/abc.txt
/mnt/myfiles/abc1.txt
/mnt/myfiles/abc2.txt
/mnt/myfiles/subfolder/a.txt
/mnt/myfiles/subfolder/abcd.txt

上傳作業之後,容器會包含下列檔案:

abc.txt
abc1.txt
abc2.txt
subfolder/a.txt
subfolder/abcd.txt

未指定 選項 --recursive 時,只會上傳下列三個檔案:

abc.txt
abc1.txt
abc2.txt

上傳符合指定模式的檔案

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/mycontainer \
    --dest-key <key> \
    --include "a*" \
    --recursive

假設下列檔案位於資料夾中 /mnt/myfiles

/mnt/myfiles/abc.txt
/mnt/myfiles/abc1.txt
/mnt/myfiles/abc2.txt
/mnt/myfiles/xyz.txt
/mnt/myfiles/subfolder/a.txt
/mnt/myfiles/subfolder/abcd.txt

上傳作業之後,容器會包含下列檔案:

abc.txt
abc1.txt
abc2.txt
subfolder/a.txt
subfolder/abcd.txt

未指定選項 --recursive 時,AzCopy 會略過子目錄中的檔案:

abc.txt
abc1.txt
abc2.txt

指定目的地 Blob 的 MIME 內容類型

根據預設,AzCopy 會將目的地 Blob 的內容類型設定為 application/octet-stream。 不過,您可以透過 選項 --set-content-type [content-type]明確指定內容類型。 此語法會設定上傳作業中所有 Blob 的內容類型。

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/myContainer/ \
    --dest-key <key> \
    --include "ab" \
    --set-content-type "video/mp4"

如果未指定 選項 --set-content-type ,則 AzCopy 會根據其擴展名來設定每個 Blob 或檔案的內容類型。

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/myContainer/ \
    --dest-key <key> \
    --include "ab" \
    --set-content-type

自訂MIME內容類型對應

AzCopy 使用組態檔,其中包含擴展名與內容類型的對應。 您可以自定義此對應,並視需要新增配對。 對應位於 /usr/lib/azcopy/AzCopyConfig.json

Blob:複製

複製記憶體帳戶內的單一 Blob

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer1/abc.txt \
    --destination https://myaccount.blob.core.windows.net/mycontainer2/abc.txt \
    --source-key <key> \
    --dest-key <key>

當您複製不含 --sync-copy 選項的 Blob 時, 會執行伺服器端複製 作業。

跨記憶體帳戶複製單一 Blob

azcopy \
    --source https://sourceaccount.blob.core.windows.net/mycontainer1/abc.txt \
    --destination https://destaccount.blob.core.windows.net/mycontainer2/abc.txt \
    --source-key <key1> \
    --dest-key <key2>

當您複製不含 --sync-copy 選項的 Blob 時, 會執行伺服器端複製 作業。

將單一 Blob 從次要區域複製到主要區域

azcopy \
    --source https://myaccount1-secondary.blob.core.windows.net/mynewcontainer1/abc.txt \
    --destination https://myaccount2.blob.core.windows.net/mynewcontainer2/abc.txt \
    --source-key <key1> \
    --dest-key <key2>

請注意,您必須啟用讀取許可權異地備援記憶體。

跨記憶體帳戶複製單一 Blob 及其快照集

azcopy \
    --source https://sourceaccount.blob.core.windows.net/mycontainer1/ \
    --destination https://destaccount.blob.core.windows.net/mycontainer2/ \
    --source-key <key1> \
    --dest-key <key2> \
    --include "abc.txt" \
    --include-snapshot

複製作業之後,目標容器會包含 Blob 及其快照集。 容器包含下列 Blob 及其快照集:

abc.txt
abc (2013-02-25 080757).txt
abc (2014-02-21 150331).txt

跨記憶體帳戶同步複製 Blob

AzCopy 預設會以異步方式在兩個記憶體端點之間複製數據。 因此,複製作業會使用沒有 SLA 的備用頻寬容量,在複製 Blob 的速度方面,在背景執行。

選項 --sync-copy 可確保複製作業的速度一致。 AzCopy 會下載 Blob 以從指定的來源複製到本機記憶體,然後將其上傳至 Blob 記憶體目的地,以執行同步複製。

azcopy \
    --source https://myaccount1.blob.core.windows.net/myContainer/ \
    --destination https://myaccount2.blob.core.windows.net/myContainer/ \
    --source-key <key1> \
    --dest-key <key2> \
    --include "ab" \
    --sync-copy

--sync-copy 相較於異步複製,可能會產生額外的輸出成本。 建議的方法是在與來源記憶體帳戶位於相同區域中的 Azure VM 中使用此選項,以避免輸出成本。

檔案:下載

下載單一檔案

azcopy \
    --source https://myaccount.file.core.windows.net/myfileshare/myfolder1/abc.txt \
    --destination /mnt/myfiles/abc.txt \
    --source-key <key>

如果指定的來源是 Azure 檔案共用,則您必須指定確切的檔名,例如 abc.txt,以下載單一檔案,或指定選項--recursive以遞歸方式下載共用中的所有檔案。 嘗試同時指定檔案模式和選項 --recursive 會導致錯誤。

下載所有檔案

azcopy \
    --source https://myaccount.file.core.windows.net/myfileshare/ \
    --destination /mnt/myfiles \
    --source-key <key> \
    --recursive

請注意,不會下載任何空的資料夾。

檔案:上傳

上傳單一檔案

azcopy \
    --source /mnt/myfiles/abc.txt \
    --destination https://myaccount.file.core.windows.net/myfileshare/abc.txt \
    --dest-key <key>

上傳所有檔案

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.file.core.windows.net/myfileshare/ \
    --dest-key <key> \
    --recursive

請注意,不會上傳任何空白的資料夾。

上傳符合指定模式的檔案

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.file.core.windows.net/myfileshare/ \
    --dest-key <key> \
    --include "ab*" \
    --recursive

檔案:複製

跨檔案共享複製

azcopy \
    --source https://myaccount1.file.core.windows.net/myfileshare1/ \
    --destination https://myaccount2.file.core.windows.net/myfileshare2/ \
    --source-key <key1> \
    --dest-key <key2> \
    --recursive

當您跨檔案共享複製檔案時, 會執行伺服器端複製 作業。

從檔案共享複製到 Blob

azcopy \ 
    --source https://myaccount1.file.core.windows.net/myfileshare/ \
    --destination https://myaccount2.blob.core.windows.net/mycontainer/ \
    --source-key <key1> \
    --dest-key <key2> \
    --recursive

當您將檔案從檔案共享複製到 Blob 時, 會執行伺服器端複製 作業。

從 Blob 複製到檔案共用

azcopy \
    --source https://myaccount1.blob.core.windows.net/mycontainer/ \
    --destination https://myaccount2.file.core.windows.net/myfileshare/ \
    --source-key <key1> \
    --dest-key <key2> \
    --recursive

當您將檔案從 Blob 複製到檔案共享時, 會執行伺服器端複製 作業。

同步複製檔案

您可以指定選項 --sync-copy ,將資料從檔案記憶體複製到檔案記憶體、從檔案記憶體複製到 Blob 記憶體,以及從 Blob 記憶體同步複製到檔案記憶體。 AzCopy 會將源數據下載到本機記憶體,然後將它上傳至目的地,以執行這項作業。 在此情況下,會套用標準輸出成本。

azcopy \
    --source https://myaccount1.file.core.windows.net/myfileshare1/ \
    --destination https://myaccount2.file.core.windows.net/myfileshare2/ \
    --source-key <key1> \
    --dest-key <key2> \
    --recursive \
    --sync-copy

從檔案記憶體複製到 Blob 記憶體時,預設 Blob 類型為區塊 Blob,使用者可以指定變更目的地 Blob 類型的選項 --blob-type page 。 可用的類型為 page | block | append

請注意, --sync-copy 相較於異步複製,可能會產生額外的輸出成本。 建議的方法是在與來源記憶體帳戶位於相同區域中的 Azure VM 中使用此選項,以避免輸出成本。

其他 AzCopy 功能

只複製目的地中不存在的數據

--exclude-older--exclude-newer 參數可讓您分別排除較舊的或較新的來源資源,使其無法複製。 如果您只想複製目的地中不存在的來源資源,您可以在 AzCopy 命令中指定這兩個參數:

--source http://myaccount.blob.core.windows.net/mycontainer --destination /mnt/myfiles --source-key <sourcekey> --recursive --exclude-older --exclude-newer

--source /mnt/myfiles --destination http://myaccount.file.core.windows.net/myfileshare --dest-key <destkey> --recursive --exclude-older --exclude-newer

--source http://myaccount.blob.core.windows.net/mycontainer --destination http://myaccount.blob.core.windows.net/mycontainer1 --source-key <sourcekey> --dest-key <destkey> --recursive --exclude-older --exclude-newer

使用組態檔來指定命令行參數

azcopy --config-file "azcopy-config.ini"

您可以在組態檔中包含任何 AzCopy 命令行參數。 AzCopy 會處理檔案中的參數,就像已在命令行上指定一樣,使用檔案的內容執行直接替代。

假設名為 copyoperation的組態檔,其中包含下列幾行。 每個 AzCopy 參數都可以在單一行上指定。

--source http://myaccount.blob.core.windows.net/mycontainer --destination /mnt/myfiles --source-key <sourcekey> --recursive --quiet

或在個別行上:

--source http://myaccount.blob.core.windows.net/mycontainer
--destination /mnt/myfiles
--source-key<sourcekey>
--recursive
--quiet

如果您將參數分割成兩行,則 AzCopy 會失敗,如參數所示 --source-key

http://myaccount.blob.core.windows.net/mycontainer
/mnt/myfiles
--sourcekey
<sourcekey>
--recursive
--quiet

指定共享存取簽章 (SAS)

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer1/abc.txt \
    --destination https://myaccount.blob.core.windows.net/mycontainer2/abc.txt \
    --source-sas <SAS1> \
    --dest-sas <SAS2>

您也可以在容器 URI 上指定 SAS:

azcopy \
    --source https://myaccount.blob.core.windows.net/mycontainer1/?SourceSASToken \
    --destination /mnt/myfiles \
    --recursive

日誌檔案資料夾

每次向 AzCopy 發出命令時,它會檢查日誌檔案是否存在於預設資料夾中,或它是否存在於您透過此選項指定的資料夾中。 如果任一位置都沒有日誌檔案,AzCopy 會將作業視為新的,併產生新的日誌檔案。

如果日誌檔案確實存在,AzCopy 會檢查您輸入的命令行是否符合日誌檔案中的命令行。 如果這兩個命令行相符,AzCopy 會繼續不完整的作業。 如果他們不相符,AzCopy 會提示使用者覆寫日誌檔案以啟動新的作業,或取消目前的作業。

如果您要使用紀錄檔案的預設位置:

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/mycontainer \
    --dest-key <key> \
    --resume

如果您省略選項 --resume,或指定不含資料夾路徑的選項 --resume ,如上所示,AzCopy 會在預設位置建立日誌檔案,也就是 ~\Microsoft\Azure\AzCopy。 如果日誌檔案已經存在,則 AzCopy 會根據日誌檔案繼續作業。

如果您要指定紀錄檔案的自訂位置:

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/mycontainer \
    --dest-key key \
    --resume "/mnt/myjournal"

如果日誌檔案不存在,則此範例會建立日誌檔案。 如果確實存在,則 AzCopy 會根據日誌檔案繼續作業。

如果您想要繼續 AzCopy 作業,請重複相同的命令。 AzCopy on Linux 接著會提示確認:

Incomplete operation with same command line detected at the journal directory "/home/myaccount/Microsoft/Azure/AzCopy", do you want to resume the operation? Choose Yes to resume, choose No to overwrite the journal to start a new operation. (Yes/No)

輸出詳細信息記錄

azcopy \
    --source /mnt/myfiles \
    --destination https://myaccount.blob.core.windows.net/mycontainer \
    --dest-key <key> \
    --verbose

指定要啟動的並行作業數目

選項 --parallel-level 會指定並行複製作業的數目。 根據預設,AzCopy 會啟動特定數目的並行作業,以增加數據傳輸輸送量。 並行作業數目等於您擁有的處理器數目八倍。 如果您要跨低頻寬網路執行 AzCopy,您可以為 --parallel-level 指定較低的數位,以避免資源競爭所造成的失敗。

提示

若要檢視 AzCopy 參數的完整清單,請參閱 'azcopy --help' 功能表。

AzCopy 7.1 和舊版的安裝步驟

Linux 上的 AzCopy (僅限 v7.1 和更早版本)需要 .NET Core 架構。 .NET Core 安裝頁面上提供 安裝 指示。

例如,從在 Ubuntu 16.10 上安裝 .NET Core 開始。 如需最新的安裝指南,請流覽 Linux 安裝頁面上的 .NET Core。

sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ yakkety main" > /etc/apt/sources.list.d/dotnetdev.list' 
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 417A0893
sudo apt-get update
sudo apt-get install dotnet-sdk-2.0.0

安裝 .NET Core 之後,請下載並安裝 AzCopy。

wget -O azcopy.tar.gz https://aka.ms/downloadazcopyprlinux
tar -xf azcopy.tar.gz
sudo ./install.sh

安裝 Linux 上的 AzCopy 之後,您可以移除解壓縮的檔案。 或者,如果您沒有超級用戶許可權,您也可以使用解壓縮資料夾中的殼層腳本 azcopy 來執行 azcopy

已知問題和最佳做法

安裝 AzCopy 時發生錯誤

如果您遇到 AzCopy 安裝的問題,您可能會嘗試使用解壓縮 azcopy 資料夾中的 bash 腳本來執行 AzCopy。

cd azcopy
./azcopy

複製數據時限制並行寫入

當您使用 AzCopy 複製 Blob 或檔案時,請記住,當您複製 Blob 或檔案時,另一個應用程式可能會修改數據。 可能的話,請確定複製作業期間未修改您複製的數據。 例如,複製與 Azure 虛擬機相關聯的 VHD 時,請確定目前沒有任何其他應用程式寫入 VHD。 若要這樣做,最好是租用要複製的資源。 或者,您可以先建立 VHD 的快照集,然後複製快照集。

如果您無法防止其他應用程式在複製 Blob 或檔案時寫入 Blob 或檔案,請記住,在作業完成時,複製的資源可能不再與來源資源完全同位。

執行多個 AzCopy 進程

您可以在單一用戶端上執行多個 AzCopy 程式,以提供您使用不同的日誌資料夾。 不支援針對多個 AzCopy 進程使用單一日誌資料夾。

第一個程式:

azcopy \
    --source /mnt/myfiles1 \
    --destination https://myaccount.blob.core.windows.net/mycontainer/myfiles1 \
    --dest-key <key> \
    --resume "/mnt/myazcopyjournal1"

第二個程式:

azcopy \
    --source /mnt/myfiles2 \
    --destination https://myaccount.blob.core.windows.net/mycontainer/myfiles2 \
    --dest-key <key> \
    --resume "/mnt/myazcopyjournal2"

下一步

如需 Azure 儲存體 和 AzCopy 的詳細資訊,請參閱下列資源:

Azure 儲存體檔:

Azure 儲存體 部落格文章: