使用網路檔案系統 (NFS) 3.0 通訊協定來掛接 Blob 儲存體

警告

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

本文將提供相關指引,說明如何使用網路檔案系統 (NFS) 3.0 通訊協定,將容器從以 Linux 為基礎的 Azure 虛擬機器 (VM) 或在內部部署環境中執行的 Linux 系統掛接至 Azure Blob 儲存體中。 若要深入了解 Blob 儲存體中的 NFS 3.0 通訊協定支援,請參閱 Azure Blob 儲存體的網路檔案系統 (NFS) 3.0 通訊協定支援

步驟 1:建立 Azure 虛擬網路

您的儲存體帳戶必須包含在虛擬網路內。 虛擬網路可讓用戶端安全地連線至您的儲存體帳戶。 若要深入了解 Azure 虛擬網路以及如何建立虛擬網路,請參閱虛擬網路文件

注意

位於相同虛擬網路中的用戶端可在您的帳戶中掛接容器。 您也可以從執行於內部部署網路的用戶端掛接容器,但必須先將內部部署網路連線至您的虛擬網路。 請參閱支援的網路連線

步驟 2:設定網路安全性

目前,要保護儲存體帳戶中的資料,唯一的方式是使用虛擬網路和其他網路安全性設定。 請參閱 Blob 儲存體的網路安全性建議

任何其他用來保護資料的工具,包括帳戶金鑰授權、Microsoft Entra 安全性和存取控制清單 (ACL),都無法用來授權 NFS 3.0 要求。 事實上,如果將具名使用者或群組的項目新增至 blob 或目錄的 ACL,非根目錄使用者將無法在用戶端存取該檔案。 您必須移除該項目,才能還原用戶端上非根使用者的存取權。

重要

NFS 3.0 通訊協定使用連接埠 111 和 2048。 若要從內部部署網路連線,請確定您的用戶端允許透過這些連接埠進行傳出通訊。 如果您已授與特定 VNet 的存取權,請確定與這些 VNet 相關聯的任何網路安全性群組未包含封鎖透過這些連接埠進行傳入通訊的安全性規則。

步驟 3:建立和設定儲存體帳戶

若要使用 NFS 3.0 來掛接容器,必須建立儲存體帳戶。 您無法啟用現有的帳戶。

標準一般用途 v2 儲存體帳戶和進階區塊 Blob 儲存體帳戶均支援 NFS 3.0 通訊協定。 如需這些儲存體帳戶類型的詳細資訊,請參閱儲存體帳戶概觀

若要設定帳戶,請選擇下列值:

設定 進階效能 標準效能
Location 所有可用區域 所有可用區域
效能 進階 標準
帳戶種類 BlockBlobStorage 一般用途 V2
複寫 本地備援儲存體 (LRS)、區域備援儲存體 (ZRS) 本地備援儲存體 (LRS)、區域備援儲存體 (ZRS)
連線方法 公用端點 (選取的網路) 或私人端點 公用端點 (選取的網路) 或私人端點
階層式命名空間 啟用 啟用
NFS V3 啟用 啟用

所有其他設定均可使用預設值。

步驟 4 - 建立容器

使用下列任何工具或 SDK,在您的儲存體帳戶中建立容器:

工具 SDK
Azure 入口網站 .NET
AzCopy Java
PowerShell Python
Azure CLI JavaScript
REST

注意

根據預設,新容器的根壓縮選項為 [沒有根壓縮]。 但您可以將其變更為 [根壓縮] 或 [所有壓縮]。 如需這些壓縮選項的相關資訊,請參閱您的作業系統文件。

下圖顯示出現在 Azure 入口網站中的壓縮選項。

顯示 Azure 入口網站 中壁球選項的螢幕快照。

步驟 5:安裝 AZNFS 掛接協助程式套件

AZNFS 掛接協助程式套件可協助 Linux NFS 用戶端可靠地存取 Azure Blob NFS 共用,即使端點的 IP 位址變更也一樣。 此套件會執行名為 aznfswatchdog 的背景作業,其會監視已掛接共用之端點 IP 位址的變更。 如果偵測到變更,此背景作業會更新目的地網路位址轉譯 (DNAT) 規則。 若要深入了解,請參閱 AZNFS 掛接協助程式 (英文)。

  1. 判斷您的用戶端上是否已安裝 AZNFS 掛接協助程式套件。

    systemctl is-active --quiet aznfswatchdog && echo -e "\nAZNFS mounthelper is installed! \n"
    

    如果已安裝套件,則會出現訊息 AZNFS mounthelper is installed!

  2. 如果尚未安裝套件,請使用下列命令安裝。

    wget -O - -q https://github.com/Azure/AZNFS-mount/releases/latest/download/aznfs_install.sh | bash
    

    注意

    下列 Linux 發行版本支援 AZNFS:

    • Ubuntu (18.04 LTS、20.04 LTS、22.04 LTS)
    • Centos7、Centos8
    • RedHat7、RedHat8、RedHat9
    • Rocky8、Rocky9
    • SUSE (SLES 15)

步驟 6:掛接容器

在 Linux 系統上建立目錄,然後將容器掛接在儲存體帳戶中。

  1. 在 Linux 系統上,建立目錄:

    mkdir -p /nfsdata
    
  2. 使用下列其中一種方法來掛接容器。 在這兩種方法中,將 <storage-account-name> 預留位置取代為儲存體帳戶的名稱,並將 <container-name> 取代為容器的名稱。

    • 若要在重新開機時將共用自動掛接:

      1. 藉由新增下列這一行,在 /etc/fstab 檔案中建立項目:

        <storage-account-name>.blob.core.windows.net:/<storage-account-name>/<container-name>  /nfsdata    aznfs defaults,sec=sys,vers=3,nolock,proto=tcp,nofail,_netdev    0 0
        
      2. 執行下列命令以立即處理 /etc/fstab 項目,並嘗試掛接上述路徑:

        mount /nfsdata
        
    • 對於在重新開機時不會持續存在的暫存掛接,請執行下列命令:

      mount -t aznfs -o sec=sys,vers=3,nolock,proto=tcp <storage-account-name>.blob.core.windows.net:/<storage-account-name>/<container-name>  /nfsdata
      

      提示

      使用 -t aznfs 掛接選項,可確保即使端點 IP 在掛接之後變更,NFS 用戶端仍一律會正確連線到儲存體端點。 如果端點的 IP 位址變更,則使用 -t nfs 掛階選項掛階的 NFS 共用可能會中斷與儲存體端點的連線。

      掛接命令提供其他選用參數。 這些參數主要會影響用戶端行為。 syssec 選項目前支援的唯一值。

      重要

      nconnect 掛接選項僅適用於具有「Azure nconnect 支援」的用戶端。 在不支援的用戶端上使用 nconnect 選項會降低輸送量,並導致命令逾時或無法正確運作。 若要深入了解如何確保您的用戶端具有 Azure nconnect 支援,請參閱增加 TCP 連線數目

解決常見錯誤

錯誤 原因/解決方法
Access denied by server while mounting 確定您的用戶端是在支援的子網路內執行。 請參閱支援的網路位置
No such file or directory 請務必直接在終端機中輸入掛接命令及其參數,而不要使用複製/貼上。 如果您將此命令的任何部分複製並貼到另一個應用程式的終端機中,則貼上資訊中的隱藏字元可能會導致此錯誤出現。 如果帳戶未啟用 NFS 3.0,也可能會出現此錯誤。
Permission denied 新建立之 NFS 3.0 容器的預設模式是 0750。 非根使用者沒有磁碟區的存取權。 如果需要非根使用者的存取權,根使用者必須將模式變更為 0755。 範例命令:sudo chmod 0755 /nfsdata
EINVAL ("Invalid argument") 此錯誤可能會在用戶端嘗試進行下列動作時出現:
  • 寫入從 Blob 端點建立的 Blob。
  • 刪除具有快照集的 Blob,或其所在的容器具有作用中 WORM (寫入一次、讀取多次) 原則的 Blob。
  • EROFS ("Read-only file system") 此錯誤可能會在用戶端嘗試進行下列動作時出現:
  • 寫入 Blob 或刪除具有作用中租用的 Blob。
  • 寫入 Blob,或刪除其所在的容器具有作用中 WORM 原則的 Blob。
  • NFS3ERR_IO/EIO ("Input/output error") 當用戶端嘗試對儲存於封存存取層中的 Blob 進行讀取、寫入或設定屬性時,就可能出現此錯誤。
    OperationNotSupportedOnSymLink 錯誤 此錯誤可能會在透過 Blob 儲存體或 Azure Data Lake Storage Gen2 API 執行寫入作業期間傳回。 不允許使用這些 API 來寫入或刪除使用 NFS 3.0 建立的符號連結。 請務必使用 NFS 3.0 端點來處理符號連結。
    mount: /nfsdata: bad option; 使用 sudo apt install nfs-common 安裝 NFS Helper 程式。
    Connection Timed Out 請確定用戶端允許透過連接埠 111 和 2048 的傳出通訊。 NFS 3.0 通訊協定會使用這些連接埠。 請務必使用 Blob 服務端點來掛接儲存體帳戶,而不是使用 Data Lake Storage 端點。

    AZNFS 掛接協助程式的限制和疑難排解

    請參閱 AZNFS 掛接協助程式 (英文)。

    另請參閱