如何使用 Blobfuse v1 將 Azure Blob 儲存體裝載為檔案系統

警告

本文參考 CentOS,這是接近結束生命週期 (EOL) 狀態的 Linux 發行版本。 請據以考慮您的使用和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指引

重要

BlobFuse2 是最新版的 BlobFuse,而且對於本文討論的版本 BlobFuse v1 有許多重大改善。 若要了解 BlobFuse2 中改善的內容,請參閱 BlobFuse2 增強功能清單

BlobFuse 是 Azure Blob 儲存體的虛擬檔案系統驅動程式。 BlobFuse 可讓您透過 Linux 檔案系統存取您儲存體帳戶中現有的區塊 Blob 資料。 Blobfuse 會使用具有正斜線 '/' 的虛擬目錄配置作為分隔符號。

本指南示範如何使用 BlobFuse v1,以及如何在 Linux 上掛接 Blob 儲存體容器並存取資料。 若要深入了解 BlobFuse v1,請參閱讀我檔案 (英文) 和 Wiki (英文)。

警告

Blobfuse 不保證 100% 合乎 POSIX 的規範,因為其只是將要求轉譯成 Blob REST API。 例如,重新命名作業在 POSIX 中不可部分完成,不過在 Blobfuse 中並非如此。 如需原生檔案系統與 Blobfuse 之間差異的完整清單,請造訪 Blobfuse 原始程式碼存放庫

在 Linux 上安裝 BlobFuse v1

Microsoft 的 Linux 軟體存放庫可取得適用於 Ubuntu、Debian、SUSE、CentOS、Oracle Linux 和 RHEL 散發套件的 Blobfuse 二進位檔案。 若要在這些發行版本上安裝 Blobfuse,請設定清單中的任一個存放庫。 如果您的發行版本沒有可用的二進位檔,您也可以遵循 Azure 儲存體安裝步驟 \(英文\),從原始程式碼建置二進位檔。

Blobfuse 是在適用於 Ubuntu 版本的 Linux 存放庫中發佈:16.04、18.04 和 20.04、RHEL 版本:7.5、7.8、7.9、8.0、8.1、8.2、CentOS 版本:7.0、8.0、Debian 版本:9.0、10.0、SUSE 版本:15、OracleLinux 8.1。 執行此命令以確定您已部署其中一個版本:

cat /etc/*-release

設定 Microsoft 封裝存放庫

設定 Microsoft 產品的 Linux 封裝存放庫

以 Redhat Enterprise Linux 8 發行版為例:

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/8/packages-microsoft-prod.rpm

同樣地,將 URL 變更為 .../rhel/7/...,以指向 Redhat Enterprise Linux 7 發行版本。

安裝 BlobFuse v1

sudo yum install blobfuse

準備進行掛接

藉由要求檔案系統中的暫存路徑,Blobfuse 提供近似原生的效能,可緩衝及快取任何開啟的檔案。 對於暫存路徑,請選擇效能最高的磁碟,或使用 Ramdisk 來獲得最佳效能。

注意

Blobfuse 會將所有開啟的檔案內容存放在暫存路徑。 請確認磁碟空間足夠容納所有開啟的檔案。

(選擇性) 將 Ramdisk 當做暫存路徑

下列範例會建立 16 GB 的 Ramdisk 和 Blobfuse 的目錄。 請根據需求選擇大小。 Ramdisk 允許 Blobfuse 開啟大小達 16 GB 的檔案。

sudo mkdir /mnt/ramdisk
sudo mount -t tmpfs -o size=16g tmpfs /mnt/ramdisk
sudo mkdir /mnt/ramdisk/blobfusetmp
sudo chown <youruser> /mnt/ramdisk/blobfusetmp

使用 SSD 當做暫存路徑

在 Azure 中,您可以使用虛擬機器上的暫時磁碟 (SSD) 來當做低延遲的 Blobfuse 緩衝區。 取決於使用的佈建代理程式,暫時性磁碟將會掛接在 cloud-init 的 '/mnt',或 waagent VM 的 '/mnt/resource' 上。

請確認使用者擁有權存取暫存路徑:

sudo mkdir /mnt/resource/blobfusetmp -p
sudo chown <youruser> /mnt/resource/blobfusetmp

授與對您儲存體帳戶的存取權

您可以使用帳戶存取金鑰、共用存取簽章、受控識別或服務主體,來授與對您儲存體帳戶的存取權。 您可以在命令列、組態檔或環境變數中提供授權資訊。 如需詳細資訊,請參閱 Blobfuse 讀我檔案中的有效驗證設定

例如,假設您使用帳戶存取金鑰進行授權,並將其儲存在組態檔中。 組態檔應具有下列格式:

accountName myaccount
accountKey storageaccesskey
containerName mycontainer
authType Key

accountName 是您儲存體帳戶的名稱,而不是完整 URL。 您必須使用儲存體資訊更新 myaccountstorageaccesskeymycontainer

使用下列內容建立此檔案:

sudo touch /path/to/fuse_connection.cfg

建立和編輯檔案後,請務必限制該檔案的存取權限,以禁止其他使用者讀取。

sudo chmod 600 /path/to/fuse_connection.cfg

注意

如果您已在 Windows 上建立組態檔,請務必執行 dos2unix 來淨化並將檔案轉換成 Unix 格式。

建立空白的掛接目錄

sudo mkdir ~/mycontainer

掛接

注意

如需完整的掛接選項清單,請參閱 Blobfuse 存放庫

若要掛接 Blobfuse,請讓使用者執行以下命令。 該命令會將 '/path/to/fuse_connection.cfg' 指定的容器掛接到 '/mycontainer' 位置。

sudo blobfuse ~/mycontainer --tmp-path=/mnt/resource/blobfusetmp  --config-file=/path/to/fuse_connection.cfg -o attr_timeout=240 -o entry_timeout=240 -o negative_timeout=120

注意

如果您使用 ADLS 帳戶,則必須包含 --use-adls=true

您現在應該可以透過一般的檔案系統 API 存取區塊 Blob 了。 根據預設,掛接該目錄的使用者是唯一能存取它的人,這樣能保護對目錄的存取。 如果您想要允許所有使用者存取,請透過 -o allow_other 選項掛接。

sudo cd ~/mycontainer
sudo mkdir test
sudo echo "hello world" > test/blob.txt

保存掛接

若要了解如何保存掛接,請參閱 Blobfuse Wiki 中的保存

功能支援

啟用 Data Lake Storage Gen2、網路檔案系統 (NFS) 3.0 通訊協定,或 SSH 檔案傳輸通訊協定 (SFTP),可能會影響到此功能的支援。 如果您已啟用上述任何功能,請參閱 Azure 儲存體帳戶中的 Blob 儲存體功能支援,以評估此功能的支援。

下一步