使用 AzCopy 來與 Azure Blob 儲存體同步

您可以使用 AzCopy v10 命令列公用程式,將本機儲存體與 Azure Blob 儲存體同步。

您可以將本機檔案系統的內容與 Blob 容器同步。 您也可以讓容器和虛擬目錄彼此同步。 同步是單向的。 換句話說,您可以在這兩個端點中選擇哪一個是來源,哪一個是目的地。 同步也會使用伺服器對伺服器 API。 此節中提供的範例也適用於具有階層命名空間的帳戶。

注意

目前的 AzCopy 版本不會在其他來源和目的地之間進行同步 (例如:檔案儲存體或 Amazon Web Services (AWS) S3 貯體)。

若要查看其他工作類型的範例 (例如,上傳檔案、下載 Blob,或在帳戶之間複製 Blob),請參閱此文章的後續步驟 (部分機器翻譯) 一節中所提供的連結。

開始使用

請參閱開始使用 AzCopy (部分機器翻譯) 一文來下載 AzCopy,並了解如何提供授權認證給儲存體服務。

注意

本文中的範例假設您已使用 Microsoft Entra ID 提供授權認證。

如果您想改為使用 SAS 權杖來授權存取 Blob 資料,則可將該權杖附加至每個 AzCopy 命令中的資源 URL。 例如: 'https://<storage-account-name>.blob.core.windows.net/<container-name><SAS-token>'

指導方針

根據預設,Sync 命令會比較檔案名稱和上次修改的時間戳記。 您可以使用 --compare-hash 旗標來覆寫該行為,以使用 MD5 雜湊,而不是上次修改的時間戳。 將 --delete-destination 選擇性旗標設定為 trueprompt 的值,以在檔案不再存在來源目錄中時,在目的地目錄中刪除那些檔案。

  • 如果將 --delete-destination 旗標設定為 true,AzCopy 就會在不提供提示的情況下刪除檔案。 如果想要在 AzCopy 刪除檔案之前顯示提示,可將 --delete-destination 旗標設定為 prompt

  • 如果您打算將 --delete-destination 旗標設定為 promptfalse,請考慮使用 copy 命令,而不是 sync 命令,並將 --overwrite 參數設定為 ifSourceNewerCopy 命令所耗用的記憶體比較少,因而產生的帳單成本比較少,因為複製作業不需要在移動檔案之前,先為來源或目的地編製索引。

  • 如果您不打算使用 --compare-hash 旗標,則執行 sync 命令所在的機器應該具有正確的系統時鐘,因為上次修改時間對於判斷是否應傳送檔案而言很重要。 如果您的系統有顯著的時鐘誤差,請避免在太接近您打算執行 sync 命令的時間修改目的地檔案。

  • AzCopy 使用伺服器對伺服器 API 來同步處理儲存體帳戶之間的資料。 這表示資料會直接在儲存體伺服器之間複製。 不過,AzCopy 會設定和監視每個傳輸,以及針對較大的儲存體帳戶 (例如,包含數百萬個 Blob 的帳戶),AzCopy 可能需要大量的計算資源來完成這些工作。 因此,如果您是從虛擬機器 (VM) 執行 AzCopy,請確定 VM 有足夠的核心/儲存體來處理負載。

  • 若要防止意外刪除,請務必先啟用虛刪除 (部分機器翻譯) 功能,然後再使用 --delete-destination=prompt|true 旗標。

使用對本機檔案系統所做的變更來更新容器

在此情況下,容器是目的地,而本機檔案系統則是來源。

提示

此範例會以單引號 ('') 括住路徑引數。 除了 Windows 命令殼層 (cmd.exe) 以外,在所有命令殼層中使用單引號。 如果您使用 Windows 命令殼層 (cmd.exe),請使用雙引號 ("") 括住路徑引數,而非單引號 ('')。

語法

azcopy sync '<local-directory-path>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>' --recursive

範例

azcopy sync 'C:\myDirectory' 'https://mystorageaccount.blob.core.windows.net/mycontainer' --recursive

將有變更的本機檔案系統上傳至容器

在此情況下,本機檔案系統是目的地,而容器是來源。

提示

此範例會以單引號 ('') 括住路徑引數。 除了 Windows 命令殼層 (cmd.exe) 以外,在所有命令殼層中使用單引號。 如果您使用 Windows 命令殼層 (cmd.exe),請使用雙引號 ("") 括住路徑引數,而非單引號 ('')。

語法

azcopy sync 'https://<storage-account-name>.blob.core.windows.net/<container-name>' 'C:\myDirectory' --recursive

範例

azcopy sync 'https://mystorageaccount.blob.core.windows.net/mycontainer' 'C:\myDirectory' --recursive

使用另一個容器中的變更來更新容器

此命令中出現的第一個容器為來源。 第二個則是目的地。

如果您使用 Microsoft Entra ID 提供授權認證,請確定您已在來源和目的地帳戶中設定適當的角色。 請參閱 選項 1:使用 Microsoft Entra ID

提示

此範例會以單引號 ('') 括住路徑引數。 除了 Windows 命令殼層 (cmd.exe) 以外,在所有命令殼層中使用單引號。 如果您使用 Windows 命令殼層 (cmd.exe),請使用雙引號 ("") 括住路徑引數,而非單引號 ('')。

語法

azcopy sync 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>' --recursive

範例

azcopy sync 'https://mysourceaccount.blob.core.windows.net/mycontainer?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-07-04T05:30:08Z&st=2019-07-03T21:30:08Z&spr=https&sig=CAfhgnc9gdGktvB=ska7bAiqIddM845yiyFwdMH481QA8%3D' 'https://mydestinationaccount.blob.core.windows.net/mycontainer' --recursive

使用對另一個容器中目錄所做的變更來更新目錄

此命令中出現的第一個目錄為來源。 第二個則是目的地。

如果您使用 Microsoft Entra ID 提供授權認證,請確定您已在來源和目的地帳戶中設定適當的角色。 請參閱 選項 1:使用 Microsoft Entra ID

提示

此範例會以單引號 ('') 括住路徑引數。 除了 Windows 命令殼層 (cmd.exe) 以外,在所有命令殼層中使用單引號。 如果您使用 Windows 命令殼層 (cmd.exe),請使用雙引號 ("") 括住路徑引數,而非單引號 ('')。

語法

azcopy sync 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>/<SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive

範例

azcopy sync 'https://mysourceaccount.blob.core.windows.net/<container-name>/myDirectory?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-07-04T05:30:08Z&st=2019-07-03T21:30:08Z&spr=https&sig=CAfhgnc9gdGktvB=ska7bAiqIddM845yiyFwdMH481QA8%3D' 'https://mydestinationaccount.blob.core.windows.net/mycontainer/myDirectory' --recursive

使用選擇性旗標進行同步

您可以使用選擇性旗標來調整同步作業。 以下提供數個範例。

案例 旗標
指定下載時應驗證 MD5 雜湊的嚴格程度。 --check-md5=[NoCheck|LogOnly|FailIfDifferent|FailIfDifferentOrMissing]
根據模式排除檔案。 --exclude-path
指定您希望同步相關記錄項目的詳細程度。 --log-level=[WARNING|ERROR|INFO|NONE]

如需完整的旗標清單,請參閱選項

注意

--recursive 旗標預設會設定為 true--exclude-pattern--include-pattern 旗標只會套用到檔案名稱,而不會套用到檔案路徑的其他部分。

下一步

如需更多範例,請參閱以下文章:

請參閱下列文章,以進行設定、將效能最佳化,以及針對問題進行疑難排解: