2021-05-12 14:32:11
Azure 入門基礎:File Storage
Azure Storage 是微軟 Azure 雲提供的雲端儲存解決方案,當前支援的儲存型別有 Blob、Queue、File 和 Table。
筆者在前文中介紹了 Blob Storage 的基本用法,本文將介紹 File Storage 的主要使用方法。
File Storage 是什麼?
Azure File Storage 是一個通過 Server Message Block (SMB) 協定提供雲端檔案共用的服務。通過 File Storage 共用的檔案能夠被載入為雲端或本地主機的磁碟,應用程式可以通過檔案 API 像存取本地檔案一樣存取這些檔案。
下面是 File Storage 典型的應用場景:
1. 輕鬆遷移那些有磁碟讀寫操作的應用到雲端。不用修改程式,只要通過 File Storage 載入相應的檔案即可。
2. 存放共用的應用程式組態檔。
3. 存放紀錄檔等應用程式診斷資料。
4. 存放管理員的常用工具。
Azure File Storage的結構
下圖描述了 File Storage 的基本組織結構:
Azure Storage Account:
Storage Account 是用來管理 Azure Storage 的一個名稱空間,主要用來控制儲存資料的存取許可權和計費。對 Blob、Queue、File 和 Table 這些 Azure 提供的儲存服務的存取控制都是通過 Storage Account 來進行的,所以要想使用 File Storage,需要先建立你的 Storage Account。
Share:
Share 是管理共用檔案的單位,任何要共用的檔案和目錄都必須屬於某個 Share。一個 Storage Account 下的 Share 數量是不受限制的,每個 Share 中可以存放任何數量的檔案。但是每個 Share 中最多能存放 5TB 的資料。
Directory:
與 Blob Storage 不同,File Storage 支援真正的檔案目錄。你可以根據需要來建立目錄。
File:
File 是真正被共用的檔案,每個檔案最大 1TB。
URL format:
與 Blob Storage 相似,File Storage 中的每個檔案都可以通過 URL 來存取。URL 的詳細格式為:
https://<storage account>.file.core.windows.net/<share>/<directory/directories>/<filename>
下面是個更真實的例子:
https://nickdemo.file.core.windows.net/demofiles/temp.txt
如果您還不熟悉 Azure Storage Account 的使用,以及如何通過 WindowsAzure.Storage 庫存取 Azure Storage,請參考前文《Azure Table storage 基本用法》中的介紹,這裡就不重複了。
為了方便檢視 C# 程式碼執行的結果,本文使用了 MS 發布的一個 Azure Storage 用戶端工具:Microsoft Azure Storage Explorer,文中簡稱為 Storage Explorer。下面是 File Storage 的一個截圖:
接下來我們通過 C# 程式碼來介紹如何操作 File Storage。
建立 File Share
第一步我們先建立名為 "mylogs" 的 Share:
// CloudStorageAccount 類表示一個 Azure Storage Account,我們需要先建立它的範例,才能存取屬於它的資源。 // 注意連線字串中的xxx和yyy,分別對應Access keys中的Storage account name 和 key。 CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=yyy"); // CloudFileClient 類是 Windows Azure File Service 用戶端的邏輯表示,我們需要使用它來設定和執行對 File Storage 的操作。 CloudFileClient fileClient = storageAccount.CreateCloudFileClient(); // CloudFileShare 表示一個 File Share 物件。 CloudFileShare share = fileClient.GetShareReference(shareName); // 如果不存在就建立 File Share。 share.CreateIfNotExists();
執行上面的程式碼,然後開啟 Storage Explorer,看到名為 "mylogs" 的 Share 已經建立了:
上傳檔案
File Storage 支援真正的檔案目錄。所以在上傳檔案前需要確定要把檔案上傳到哪個目錄下。每一個 File Share 都有一個根目錄,我們可以先取到這個根目錄,然後再建立子目錄或是直接上傳檔案。下面的程式碼會在根目錄下建立一個叫 "web" 的子目錄,然後上傳檔案 web.log 到 web 目錄中:
// 獲得根目錄的參照。 CloudFileDirectory rootDir = share.GetRootDirectoryReference(); // 建立子目錄 "web" 的參照。 CloudFileDirectory webDir = rootDir.GetDirectoryReference("web"); // 建立子目錄 "web"。 webDir.CreateIfNotExists(); // 建立檔案 "web.log" 的參照。 CloudFile cloudFile = webDir.GetFileReference("web.log"); string localFile = @"F:tempweb.log"; using (var fileStream = System.IO.File.OpenRead(localFile)) { //上傳檔案。 cloudFile.UploadFromStream(fileStream); }
在 Storage Explorer 中檢查下結果:
複製檔案
Azure Storage 支援在 Blob Storage 和 File Storage 之間相互複製檔案,但這樣的操作涉及的存取許可權管理相對複雜一些。本文僅介紹檔案在同一個 File Storage 中的複製操作。下面的程式碼複製 web.log 檔案並建立 web.copy.log 檔案:
CloudFileShare share = GetFileShare(_currentShareName); CloudFileDirectory rootDir = share.GetRootDirectoryReference(); CloudFileDirectory webDir = rootDir.GetDirectoryReference("web"); CloudFile cloudFile = webDir.GetFileReference("web.log"); if (cloudFile.Exists()) { //由 web.log 檔案建立 web.copy.log 檔案。 CloudFile copyFile = webDir.GetFileReference("web.copy.log"); copyFile.StartCopy(cloudFile); }
檢視複製操作的結果:
設定 Share 的最大容量
前面我們提到每個 Share 中最多能存放 5TB 的資料。但有時可能需要限制一下它的最大值,比如最多只能存放 1TB 的資料:
// 指定最大容量為 1024, 單位是 GB。 share.Properties.Quota = 1024; share.SetProperties();
程式碼很簡單,如果想要檢視 Share 的最大容量是多少,直接取 share.Properties.Quota 屬性的值就可以了。
現在我們在雲端有一個 1TB 大小的共用目錄,如何利用一下呢?
把 Share 對映為本地機器的網路硬碟
用管理員許可權啟動 cmd.exe,執行下面的命令:
cmdkey /add:<storage-account-name>.file.core.windows.net /user:<storage-account-name> /pass:<storage-account-key> net use z: <storage-account-name>.file.core.windows.netmylogs
注意,請把上面命令中的 < storage-account-name > 和 < storage-account-key >進行替換。
再用非管理員許可權啟動 cmd.exe,再執行一次net use 命令:
net use z: <storage-account-name>.file.core.windows.netmylogs
如果不第二次執行 net use 命令,資源管理器中是看不到驅動器碟符的:
注意:一定要在防火牆 Outbound 規則中放行 SMB 協定使用的 TCP 445 埠。
這就搞定了!乍一看還是蠻有逼格的,至於能不能玩的爽就看您的網速給不給力了。
總結
雖然我們看到 File Storage 和前文中介紹的 Blob Storage 存在著很多相似的地方,但本質上它們是不一樣的。Blob Storage 本質上是一個個網路上的檔案,而 File Storage 則是通過 SMB 協定實現的網路共用檔案,能夠被作業系統對映成原生的磁碟是其最大特徵。也只有這一點才能讓應用程式通過檔案操作 API 完成對遠端檔案的存取。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-05/144143.htm
相關文章