﻿# 如何利用 AzCopy 同步本機磁碟與 Azure Blob Storage 檔案

最近在協助客戶將 [Amazon S3](http://aws.amazon.com/s3/) 上面的檔案遷移到 [Windows Azure Storage](https://learn.microsoft.com/en-us/azure/storage/) (Blob)，在我的[前一篇文章](/post/2014/07/21/Sync-folders-using-S3-Explorer-PowerShell-Snap-in.aspx "如何利用 Powershell 同步本機磁碟與 Amazon S3 的檔案")已經提到如何便利的從 Amazon S3 同步到本機磁碟，今天我將分享如何透過微軟提供的免費工具 [AzCopy](https://learn.microsoft.com/en-us/archive/blogs/windowsazurestorage/introducing-asynchronous-cross-account-copy-blob) 幫我們快速達成上傳、下載、同步等工作，也是一套兼具方便性與效能的檔案同步工具，同步檔案時，他一樣不會傳輸那些已經同步過且無異動的檔案，讓我們一起來看看如何使用吧！

> 新版 AzCopy v10 教學請見新版文章：[使用新版 AzCopy v10 的注意事項與使用教學](/post/2021/08/22/Using-AzCopy-v10)

當你安裝過 Windows Azure SDK 或命令列工具支援，就可以在程式集中找到 **Windows Azure Storage command line** 捷徑，透過這個捷徑可以開啟一個能讓你執行 AzCopy 指令的命令提示字元視窗。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e7b76592d6633f30374c-image_2513.png)

你可以利用 **where azcopy** 命令找到該執行檔所在實際位置，執行 **azcopy /?** 可以看到完整使用說明：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e7b77c03f1f95707b992-image_2514.png)

找到 AzCopy 執行檔之後，使用方式真的是簡單到不能再簡單，一個最基本的用法，就是直接指定**來源**與**目的**即可自動完成檔案同步工作。以下幾個使用情境與相對應的指令供各位參考：

1\. 將本地資料夾所有檔案(含子目錄)全部上傳到Azure Blob Storage，而且會判斷不要同步比 Azure Blob Storage 來舊的檔案，也就是如果 Azure Blob Storage 檔案有更新過時，不會複製檔案上去。

```
AzCopy G:\TEMP https://YOUR_URL/CONTAINER/vPath /DestKey:KEY /S /XO /Z
```

上述指令，藍字部份都是你要修改的，而 **/DestKey** 代表的是你目的端的 Storage Account 的存取金鑰。

-   /S  代表複製所有指定目錄與其所有子目錄的所有檔案
-   /XO 代表當你從來源複製到目的時，排除那些比目的端舊的檔案 ( Exclude Older )
-   /Z  讓你本次的同步工作進入所謂 Restartable mode，他會記錄同步檔案的過程，並寫入一個 AzCopy.log 暫存檔案中，當你同步過程發生網路問題，下次執行相同的指令會自動在上次執行到一半的地方開始同步檔案！

2\. 將 Azure Blob Stroage 上面的檔案全部下載回來

以下指令跟上述指令的差別，僅把來源與目的交換，然後把 /DestKey 換成 /SourceKey 而已。

```
AzCopy https://YOUR_URL/CONTAINER/vPath G:\TEMP /SourceKey:KEY /S /XO /Z
```

3\. 利用 AzCopy 在兩個不同的 Storage 儲存帳戶搬移檔案

這部分基本上還算簡單，就是你的來源與目的都是 BLOB\_URL 而已，但有些額外的參數可以了解，詳細資訊可參考 [AzCopy – Using Cross Account Copy Blob](https://technet2.github.io/Wiki/blogs/windowsazurestorage/azcopy-using-cross-account-copy-blob.html) 這篇文章。  
( 這部分建議在 Windows Azure 上的 VM 執行，以節省頻寬費用 )

**相關連結**

-   下載 AzCopy 工具：[http://aka.ms/AzCopy](http://aka.ms/AzCopy "http://aka.ms/AzCopy") ( Azure Storage Tools )
-   [AzCopy – Transfer data with re-startable mode and SAS Token](https://technet2.github.io/Wiki/blogs/windowsazurestorage/azcopy-transfer-data-with-re-startable-mode-and-sas-token.html)
-   [Understanding Windows Azure Storage Billing – Bandwidth, Transactions, and Capacity](https://technet2.github.io/Wiki/blogs/windowsazurestorage/understanding-windows-azure-storage-billing-bandwidth-transactions-and-capacity.html)
-   [Introducing Asynchronous Cross-Account Copy Blob](https://technet2.github.io/Wiki/blogs/windowsazurestorage/introducing-asynchronous-cross-account-copy-blob.html)
-   [Transfer data with the AzCopy Command-Line Utility](https://github.com/Huachao/azure-content/blob/master/articles/storage/storage-use-azcopy.md)
