在某些開發環境中,我們會使用多台 Windows Server 提供網頁服務,並透過 DFS(Distributed File System) 同步網站程式碼,讓三台主機擁有一致的檔案內容。
平時,網頁工程師只需使用 Mac 電腦透過 SMB 協定 連上其中一台 Server,就可以部署程式,DFS 會自動同步到其他 Server。這種模式在舊款 MacBook(例如 2013 年版)上運作良好,但在 新款 MacBook(例如 M1、M2、M3、M4) 上,卻可能遇到「檔案更新延遲生效」的問題:
🧨 問題現象
當工程師使用 Finder 或 Terminal 把 PHP 檔案部署到 Server(例如:新增一個 1.php),雖然三台主機的檔案系統中都已經有這個檔案:
- 172.31.0.11(SMB 直接連線)
- 172.31.0.12(透過 DFS 同步)
- 172.31.0.13(透過 DFS 同步)
但只有直接連線的主機可以立刻正常顯示網頁,其他兩台會顯示 Not Found,大約 延遲 1 分鐘後 才正常顯示更新的內容。
這個問題可能與新版 macOS 預設使用較新版本的 SMB 協定(如 SMB 2 或 SMB 3)有關,導致 DFS 在某些情況下無法即時通知檔案變更。
✅ 解決方法:強制 SMB 使用舊版本協定(SMB 1)
只需修改 Mac 上的 SMB 設定,即可成功解決這個同步延遲問題。
步驟一:建立或編輯 SMB 設定檔
sudo vim /etc/nsmb.conf
如果此檔案不存在,會自動建立。
步驟二:加入以下設定內容
[default]
protocol_vers_map=1
這行設定代表強制使用 SMB 1.0 協定。
步驟三:使用 Finder 重新連線 SMB 網路磁碟
步驟四:確認目前連線使用的 SMB 協定版本
smbutil statshares -a
確認顯示為:
SMB_VERSION SMB_1
步驟五:再次進行程式維護測試
重新上傳或修改網站程式,這次你會發現:
- 所有 Server(含 DFS 同步的主機)都能即時顯示網頁更新
- 不再出現 Not Found 或延遲問題
🔚 小結
這個問題主要是因為新版 macOS 與 Windows Server + DFS 的互動機制在 SMB 2/3 中處理檔案通知的方式不同,導致 DFS 不會立刻更新快取。透過強制使用 SMB 1,可讓系統重新使用即時通知模式,避免更新延遲。
雖然 SMB 1 在安全性上不如新版本,但在封閉內網中(如公司內部開發環境),仍可作為暫時解法。
希望這篇文章能幫助同樣遇到這個問題的你少走冤枉路!
No comments:
Post a Comment