
你可能會問:「如果我在 Azure VM 上跑的是 Linux,然後又有個超方便的 Azure File Share 想掛上來怎麼辦?」沒錯,這篇文章就是為了你而寫的。
今天我們就來一起學習:如何在 Ubuntu(或其他 Linux 發行版)中,把 Azure File Share 掛載到本地,並且讓它像本地磁碟一樣穩定運作。
本文會用輕鬆但專業的語氣,帶你手把手完成設定,也會補上自動掛載設定、錯誤排除提示、還有最終 bonus:如何 bind mount 子目錄到指定資料夾!
🧱 前置條件 Checklist
項目 | 說明 |
---|---|
已有 Azure 儲存帳號 | 建議使用 Standard File Storage |
已建立 File Share | 例如:myfileshare |
有一台 Linux VM | Ubuntu 最佳,相容性高 |
有 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/Fedora:
sudo dnf install cifs-utils
或sudo yum install cifs-utils
- SUSE/openSUSE:
sudo zypper install cifs-utils
- Arch Linux:
sudo 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.0credentials
:指向認證檔案的路徑dir_mode=0777,file_mode=0777
:設定檔案與目錄的權限serverino
:使用伺服器的 inode 值,提高相容性- 最後的
0 0
:分別代表 dump 和 fsck 的設定(對網路檔案系統設為 0)
✅ 注意: SMB 版本要用 vers=3.0
,Azure 目前只支援此版本。
存檔後執行以下命令立即掛載,無需重新啟動:
sudo mount -a
確認沒有錯誤訊息,你可以透過 df -h
或 mount | 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 File Share 時可能會遇到一些常見問題,以下是解決方案:
錯誤訊息 | 原因 | 解法 |
---|---|---|
mount error(115): Operation now in progress | port 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 認證掛載方式,歡迎留言或私訊我。