在 Linux VM 掛載 Azure File Share:從零到穩定上線

  • Post by
  • May 21, 2025
post-thumb

你可能會問:「如果我在 Azure VM 上跑的是 Linux,然後又有個超方便的 Azure File Share 想掛上來怎麼辦?」沒錯,這篇文章就是為了你而寫的。

今天我們就來一起學習:如何在 Ubuntu(或其他 Linux 發行版)中,把 Azure File Share 掛載到本地,並且讓它像本地磁碟一樣穩定運作。

本文會用輕鬆但專業的語氣,帶你手把手完成設定,也會補上自動掛載設定、錯誤排除提示、還有最終 bonus:如何 bind mount 子目錄到指定資料夾!

Buy Me a Coffee

🧱 前置條件 Checklist

項目說明
已有 Azure 儲存帳號建議使用 Standard File Storage
已建立 File Share例如:myfileshare
有一台 Linux VMUbuntu 最佳,相容性高
有 sudo 權限非 root 的帳號要有 sudo

☁️ 什麼是 Azure File Share?

Azure File Share 是 Azure Storage 的一種服務,它讓你可以像 Windows 網芳一樣,把雲端的資料夾掛載成 VM 上的磁碟。

它支援:

  • SMB 3.0 協定(支援加密)
  • 跨平台(Windows / Linux)
  • 可做 備份、同步、資料交換 等等

🔧 安裝必要工具(在 Ubuntu 上)

首先,我們需要安裝 CIFS 工具,它能讓 Linux 系統與 SMB/CIFS 檔案系統互動:

sudo apt update
sudo apt install cifs-utils

這行指令會安裝 SMB 掛載所需的工具。其他 Linux 發行版也有類似的安裝方式:

  • RHEL/CentOS/Fedorasudo dnf install cifs-utilssudo yum install cifs-utils
  • SUSE/openSUSEsudo zypper install cifs-utils
  • Arch Linuxsudo pacman -S cifs-utils

🪪 建立掛載認證檔案

我們不要把帳號密碼寫死在 fstab 裡,太危險了!建議你用 credentials file 方式來保護你的儲存帳號資訊。

sudo mkdir -p /etc/smbcredentials
sudo nano /etc/smbcredentials/mystorageaccount.cred

mystorageaccount.cred檔案中寫入以下內容(請換成你的 Storage Account 名稱和 Key):

username=mystorageaccount
password=XXXXXXXXXXXXXXXXXXXXXXXXXX

💡 提示:Storage Account 的 Key 可以在 Azure Portal 中找到。導航到你的 Storage Account > 「存取金鑰」(Access Keys) > 複製其中一個金鑰。

儲存後,設定適當的權限限制,確保只有 root 用戶可以讀取此敏感資訊:

sudo chmod 600 /etc/smbcredentials/mystorageaccount.cred

📂 建立掛載目錄

接下來,我們需要建立一個資料夾來作為掛載點,這是我們要把 Azure File Share 掛到的目標位置:

sudo mkdir -p /mnt/azurefiles/myshare

你也可以選別的路徑,這裡以 myshare 資料夾為例。按照慣例,外部掛載的檔案系統通常放在 /mnt/media 目錄下。

🔁 寫入 fstab 讓掛載永久生效

要讓掛載在系統重新啟動後仍然有效,我們需要編輯 /etc/fstab 檔案:

sudo nano /etc/fstab

加上以下這行(根據你的環境修改參數):

//mystorageaccount.file.core.windows.net/myfileshare /mnt/azurefiles/myshare cifs nofail,vers=3.0,credentials=/etc/smbcredentials/mystorageaccount.cred,dir_mode=0777,file_mode=0777,serverino 0 0

參數說明

  • nofail:如果掛載失敗,系統仍會繼續啟動(對雲端 VM 很重要)
  • vers=3.0:指定 SMB 協定版本,Azure 目前支援 SMB 3.0
  • credentials:指向認證檔案的路徑
  • dir_mode=0777,file_mode=0777:設定檔案與目錄的權限
  • serverino:使用伺服器的 inode 值,提高相容性
  • 最後的 0 0:分別代表 dump 和 fsck 的設定(對網路檔案系統設為 0)

注意: SMB 版本要用 vers=3.0,Azure 目前只支援此版本。

存檔後執行以下命令立即掛載,無需重新啟動:

sudo mount -a

確認沒有錯誤訊息,你可以透過 df -hmount | grep cifs 確認掛載成功。

🔗 將子目錄 bind 到其他資料夾(例如應用程式用的資料夾)

這是今天的 Bonus 技巧:你有可能不想直接用 Azure mount 出來的 /mnt/... 路徑,而是想讓它出現在像 /app/data/shared 這樣的地方。

你可以使用 Linux 的 bind mount 功能,這允許你將已掛載的檔案系統掛載到另一個位置,特別適合當你的應用程式需要固定路徑時。

🛠️ 建立本地資料夾

首先創建目標資料夾:

sudo mkdir -p /app/data/shared

🔁 修改 fstab

一樣是編輯 fstab 檔案:

sudo nano /etc/fstab

加上以下這行(bind mount 設定):

/mnt/azurefiles/myshare/data /app/data/shared none bind 0 0

💡 說明:這行指令將 /mnt/azurefiles/myshare/data(Azure File Share 中的子目錄)綁定到 /app/data/shared,使應用程式可以直接存取這個路徑。

然後執行以下命令應用設定:

sudo mount -a

現在你的應用程式可以通過 /app/data/shared 路徑存取 Azure File Share 中的資料,而不需要知道它實際上是一個網路存儲。

📈 掛載流程總覽

Azure Storage Account
Azure File Share: myfileshare
子目錄: data/
mount 到 VM: /mnt/azurefiles/myshare
bind 到: /app/data/shared

🚧 常見錯誤排除

掛載 Azure File Share 時可能會遇到一些常見問題,以下是解決方案:

錯誤訊息原因解法
mount error(115): Operation now in progressport 445 被防火牆擋掉請開通 port 445 出站 TCP 連接。在 Azure VM 中,確認網路安全群組允許此連接。
mount error(13): Permission denied認證錯誤檢查 credentials 檔中的帳號名稱和金鑰是否正確,並確認檔案權限為 600。
mount: wrong fs type忘了安裝 cifs-utils運行 sudo apt install cifs-utils 或相應發行版的安裝指令。
mount error(112): Host is down網路問題或 DNS 解析錯誤確認 VM 可以連接到 Azure File Share 端點,可能需要檢查 DNS 設定或虛擬網路配置。
mount error(101): Network is unreachable網路配置問題檢查 VM 的網路設定,確保可以訪問 Azure 服務。

若持續遇到問題,你也可以試著使用 sudo mount -v 命令以獲取更詳細的錯誤訊息,這對於除錯很有幫助。

🧹 自動化建議與安全性提升

除了基本的掛載設定之外,以下是一些提升可靠性和安全性的方法:

使用 systemd 掛載單元

除了使用 /etc/fstab,你也可以創建 systemd 掛載單元,它提供更好的錯誤處理和依賴管理:

sudo nano /etc/systemd/system/mnt-azurefiles-myshare.mount

內容如下:

[Unit]
Description=Mount Azure File Share
After=network-online.target
Wants=network-online.target

[Mount]
What=//mystorageaccount.file.core.windows.net/myfileshare
Where=/mnt/azurefiles/myshare
Type=cifs
Options=nofail,vers=3.0,credentials=/etc/smbcredentials/mystorageaccount.cred,dir_mode=0777,file_mode=0777,serverino

[Install]
WantedBy=multi-user.target

啟用並啟動服務:

sudo systemctl enable mnt-azurefiles-myshare.mount
sudo systemctl start mnt-azurefiles-myshare.mount

自動更新金鑰腳本

若你定期輪替 Storage Account 金鑰(這是個好習慣),可以建立自動更新腳本:

#!/bin/bash

NEW_KEY="your_new_key_here"
CRED_FILE="/etc/smbcredentials/mystorageaccount.cred"

cat > /tmp/new_cred << EOF
username=mystorageaccount
password=$NEW_KEY
EOF

sudo mv /tmp/new_cred $CRED_FILE
sudo chmod 600 $CRED_FILE

sudo mount -a

使用 Azure AD 認證(更安全的替代方案)

在較新的 Ubuntu 版本(18.04+)中,你可以使用 Azure AD 而非儲存帳號金鑰來掛載,這更安全:

//mystorageaccount.file.core.windows.net/myfileshare /mnt/azurefiles/myshare cifs nofail,vers=3.0,credentials=/etc/smbcredentials/mystorageaccount.cred,dir_mode=0777,file_mode=0777,serverino,sec=krb5 0 0

請注意,設置 Azure AD 認證需要額外的 Kerberos 配置,詳情可參考 Azure 官方文檔。

🏁 結語

現在你應該已經成功把 Azure File Share 掛載到 Linux VM,並且用 bind mount 讓它出現在你應用程式需要的地方。

這個方式特別適合以下場景:

  • 雲端批次處理:處理完的結果可直接保存到共享空間
  • 同步報表或匯出結果:例如讓多台 VM 可以存取同一份 PDF / PNG 等報表
  • 安全地與其他服務交換資料:無需透過公開網路傳輸檔案
  • 跨 VM 數據共享:讓不同虛擬機都能訪問相同資料
  • 部署流程中的檔案分發:從 CI/CD 到多台機器的檔案分發

效能最佳化提示

如果你在大量檔案操作中發現效能問題,可以嘗試以下參數:

  • 添加 cache=strict 選項以增強讀取效能
  • 調整 rsize=1048576,wsize=1048576 以提升大檔案傳輸速度
  • 如果是高 IO 工作負載,請考慮使用 Premium 檔案共享

祝你在雲端的 Linux 開發路上,一路穩如老狗 🐾

有任何疑問或進一步想整合 CI/CD、systemd 服務、或 Azure AD 認證掛載方式,歡迎留言或私訊我。

LATEST POST
TAG