AzCopy – 上传/下载 Windows Azure Blob 文件
在我們收到的請求中,有一個頻繁出現的請求是提供一種能在 Windows Azure Blob 存儲與其本地文件系統之間輕松上傳或下載文件的方法。一年半前, 我們很高興地發布了 AzCopy, Windows Azure 存儲客戶借助這款命令行實用程序就可以實現上述操作。該實用程序旨在簡化數據傳輸任務,使您可以輕松將數據傳入或傳出 Windows Azure 存儲帳戶。客戶可以將其作為獨立工具使用,也可以把它添加到現有應用程序中。您可以隨時從 aka.ms/AzCopy 下載最新版本。
此命令與您可能已經很熟悉的 robocopy 等其他 Microsoft 文件復制實用程序類似。以下是命令的語法:
AzCopy <Source> <Destination> [filepattern] [Options]
在本文中,我們將重點介紹 AzCopy 的功能,暫不討論實施細節。幫助命令 (AzCopy /?) 列出了所有可用的系統命令和參數,并對其進行了簡要說明。
主要功能:
- 有效性和靈活性:借助 AzCopy,用戶可以選擇性地復制數據。使用遞歸模式時,客戶可以復制文件的嵌套目錄。用戶可以指定文件模式(在 Windows 文件系統中使用通配符,在 Blob 存儲中使用前綴)來識別等待復制的源文件。此外,用戶也可以設置選項以復制設置了“存檔”屬性的文件。復制大量文件時,如果其中某個文件由于網絡問題或其他問題而無法復制,重試選項可以從中斷處(尚未復制的文件處)繼續執行復制過程。使用重試模式,您無需再重新復制先前已成功復制的文件。
- 支持 Windows Azure 存儲數據類型:AzCopy 提供了相應的選項,可以讓客戶把存儲帳戶中的目標數據指定為 Block Blob 或 Page Blob。默認設置為 Block Blob,因為它幾乎適用于所有文件。使用 Page Blob 選項時,會向 Blob 添加零,使其成為 512 個字節的邊界。
- 命名規則:URI 格式(http 或 https)用于指定 Blob 存儲路徑,而 NTFS Windows 文件文件夾路徑則用于 Windows 文件系統。由于一些 Blob 名稱無法直接轉換到 Windows 文件系統, AzCopy 使用其自身的規則將其轉換為 Windows 文件系統名稱。下面介紹了一些在命名轉換過程中遵循的規則:
- 使用以下規則對與特殊 Windows 文件名稱沖突的 Blob 進行重命名:“.” =>“dot”;“..”=>“dotdot”;“/” => “slash”等。與其他沖突解決方案規則一樣,如果這些名稱發生沖突,則向發生沖突的文件或 Blob 名稱添加字符串“(n)”以解決沖突。
- Windows 文件系統命名空間不區分大小寫(但是會保留大小寫),Windows Azure Blob 命名空間區分大小寫,以下規則適用:
- § Blob 命名空間中的 Blob 使用文件名的默認大小寫創建。
- § 文件使用 Blob 命名空間的默認大小寫創建。
- § 如果從 Blob 命名空間復制到文件命名空間時發生大小寫沖突,將向發生沖突的文件或 Blob 名稱添加字符串“(n)”。
- 日志記錄:用戶可以在日志模式 (verbose) 下運行 AzCopy,這將顯示經過處理的文件和目錄的列表,并顯示實用程序無法復制的文件的列表。在日志模式下運行時,AzCopy 還將在日志中顯示每個文件的進度指示。
示例:
示例 1:在遞歸模式中,將可從本地訪問的文件目錄復制到 Blob 存儲容器。
AzCopy C:\blob-data https://myaccount.blob.core.windows.net/mycontainer/ /destkey:key /S
上述命令將把“c:\blob-data”目錄和所有子目錄中的所有文件作為 Block Blob 復制到存儲帳戶“myaccount”中名為“mycontainer”的容器。“Blob-data”文件夾包含以下文件和一個名為“subfolder1”的子目錄;
C:\blob-data\car1.docx
C:\blob-data\car2.docx
C:\blob-data\car3.docx
C:\blob-data\train1.docx
C:\blob-data\subfolder1\car_sub1.docx
C:\blob-data\subfolder1\car_sub2.docx
完成復制操作后,Blob 容器“mycontainer”中將包含以下 Blob:
car1.docx
car2.docx
car3.docx
train1.docx
subfolder1/car_sub1.docx
subfolder1/car_sub2.docx
如果不使用遞歸模式(執行復制時不使用“/S”選項),Blob 容器“mycontainer”將僅包含“blob-data”文件夾下的以下文件,并將忽略“subfolder1”文件夾下的文件。
car1.docx
car2.docx
car3.docx
train1.docx
示例 2:如果同時啟用日志模式和遞歸模式,將從 Blob 存儲中把一組 Blob 以遞歸方式復制到可從本地訪問的目錄。
AzCopy https://myaccount.blob.core.windows.net/mycontainer c:\blob-data /sourceKey:key /S /V
此命令會在日志模式和遞歸模式中將帳戶“myaccount”的 Blob 容器“mycontainer”下的所有 Blob 復制到“c:\blob-data”目錄。
Blob 容器“mycontainer”包含以下文件:
car1.docx
car2.docx
car3.docx
train1.docx
subfolder1/car_sub1.docx
subfolder1/car_sub2.docx
由于我們正在使用日志模式,此工具將打印以下輸出到日志文件中,其中除了傳輸摘要外,還包含每個文件的文件傳輸狀態。默認情況下,此工具僅顯示傳輸摘要:
Finished Transfer: car1.docx
Finished Transfer: car2.docx
Finished Transfer: car3.docx
Finished Transfer: train1.docx
Finished Transfer: subfolder1/car_sub1.docx
Finished Transfer: subfolder1/car_sub2.docx
Transfer summary:
?-----------------
Total files transferred: 6
Transfer successfully: 6
Transfer failed: 0
After the copy operation,
c:\blob-data folder will contain the files listed below:
C:\blob-data\car1.docx
C:\blob-data\car2.docx
C:\blob-data\car3.docx
C:\blob-data\train1.docx
C:\blob-data\subfolder1\car_sub1.docx
C:\blob-data\subfolder1\car_sub2.docx
下面我們來稍微嘗試一下另一種略有不同的情況,即通過使用以下命令復制以“subfolder1\”開頭的 Blob:
AzCopy https://myaccount.blob.core.windows.net/mycontainer/subfolder1 c:\blob-data /sourceKey:key /S /V
上述命令僅復制以“subfolder1/”開頭的 Blob,因此工具僅將“subfolder1/car_sub1.docx”和“subfolder1/car_sub2.docx”Blob 復制到“c:\blob-data\”文件夾。執行復制操作后,“C:\blob-data”將包含以下文件:
C:\blob-data\car_sub1.docx
C:\blob-data\car_sub2.docx
示例 3:在重試模式中,將可從本地訪問的文件目錄復制到 Blob 帳戶
AzCopy c:\blob-data https://myaccount.blob.core.windows.net/mycontainer /destkey:key /Z:restart.log /S
Restart.log 是一個用于維護復制操作狀態并記錄在中斷時重新啟動操作的日志文件。如果沒有指定日志文件和重試模式參數,日志文件將默認為%localAppData%中的“azcopy.log”。
例如,“C:\blob-data”文件夾包含五個大文件,每個文件的大小均超過 100 MB。
C:\blob-data\car.docx
C:\blob-data\car1.docx
C:\blob-data\car2.docx
C:\blob-data\car3.docx
C:\blob-data\car4.docx
使用重試選項運行時,借助 AzCopy,可以在發生故障的情況下重新啟動復制過程。如果復制“car.docx”時發生故障,AzCopy 會從“car.docx”尚未復制的部分繼續復制。如果成功復制“car.docx”后發生故障,AzCopy 會從剩余四個文件中尚未復制的部分繼續復制操作。
示例 4:使用文件名匹配模式選擇存儲 Blob 容器中的文件數量,并將其復制到可從本地訪問的目錄。
AzCopy https://myaccount.blob.core.windows.net/mycontainer c:\blob-data car /sourceKey:key /Z /S
“mycontainer”包含以下文件:
car1.docx
car2.docx
car3.docx
train.docx
carfolder/car_sub1.docx
carfolder/train_sub2.docx
subfolder1/car_sub1.docx
subfolder1/car_sub2.docx
復制操作完成后,“c:\blob-data”將包含以下所列的文件。由于指定了前綴為“car”的文件名匹配模式,因此復制操作僅復制前綴為“car”的文件。請注意,如果此前綴直接位于“mycontainer”容器中,則其適用于 Blob,或者適用于子目錄名稱。
C:\blob-data\car1.docx
C:\blob-data\car2.docx
C:\blob-data\car3.docx
C:\blob-data\carfolder\car_sub1.docx
C:\blob-data\carfolder\train_sub2.docx
性能
在 Windows Azure 數據中心內(即位于同一數據中心內的計算實例和存儲帳戶之間),用戶使用特大計算實例上傳和下載大量數據的速度應該能夠達到 50MB/s。向 Windows Azure 數據中心傳入和傳出數據將受到 AzCopy 可用帶寬的限制。
已知問題
- 如果復制時不使用 /XN(排除新文件)和 /XO(排除舊文件),則此工具在復制前僅比較源文件和目標文件的名稱。因此,盡管源文件和目標文件完全相同,系統依舊會提示用戶是否覆蓋目標文件。
- 如果復制時使用 /XN 和 /XO,請注意您的本地系統時間和存儲服務中存儲的時間將略有出入。因此,如果差不多同時修改 Blob 和本地文件,比較時可能會做出不正確的篩選。
- 使用重啟恢復選項將文件復制到 Page Blob 時,如果復制操作在中途發生故障,則此工具將從文件的開始位置重新啟動復制過程。對于將文件復制到 Block Blob,這一問題則不存在。
- 如果存儲容器下有兩個分別名為“a”和“a/b”的 Blob,則無法在該容器下使用 /S 復制這兩個 Blob。Windows 不允許在同一文件夾下同時創建名稱均為“a”的文件夾和文件。
?Aung Oo
Matthew Hendel
Windows Azure 存儲團隊
本文翻譯自:
http://blogs.msdn.com/b/windowsazurestorage/archive/2012/12/03/azcopy-uploading-downloading-files-for-windows-azure-blobs.aspx
轉載于:https://www.cnblogs.com/sesexxoo/p/6191005.html
總結
以上是生活随笔為你收集整理的AzCopy – 上传/下载 Windows Azure Blob 文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop依赖包处理方式
- 下一篇: jQuery DOM 节点操作