AzCopy 是一個命令列工具,專為最佳效能而設計,使用簡單命令將資料複製到/從 Microsoft Azure Blob 和檔案儲存體。 您可以在檔案系統和儲存體帳戶之間,或者儲存體帳戶之間複製資料。
重要
本文主要介紹舊版 AzCopy。 若要安裝最新版本的 AzCopy,請參閱 AzCopy v10。
注意
從 AzCopy 7.2 版開始,.NET Core 相依性會與 AzCopy 套件一起封裝。 如果您使用 7.2 版或更新版本,就不再需要將 .NET Core 安裝為必要條件。
下載並安裝 AzCopy
在Ubuntu上安裝
注意
視您的發行版而定,您可能需要安裝此 .NET Core 必要條件一文 中醒目提示的 .NET Core 2.1 相依性。
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]
下列範例示範了從 Microsoft Azure Blob 和檔案複製數據的各種情境。 如需azcopy --help中每個範例所使用參數的詳細說明,請參閱選單。
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,請新增 --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 或檔案,請記住,當作業完成時,複製的資源可能無法再與來源資源完全符合。
執行多個 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 儲存體簡介
- 建立儲存體帳戶
- 利用 儲存體管理器 管理 Blob 存儲
- 使用 Azure CLI 搭配 Azure 儲存體
- 如何使用來自C++的 Blob 記憶體
- 如何使用 Java 中的 Blob 記憶體
- 如何使用來自Node.js的 Blob 記憶體
- 如何使用來自 Python 的 Blob 記憶體