2017年2月15日 星期三

Samba就是捨不得我離開 Oplock break failed

電腦教室是無碟的環境,所以學生在存檔繳交作業時,我都會另外叫他們存在Samba主機,但是這個學期卻出現了一個奇怪的現象,那就是學生把檔案存到Samba後,儘管學生機都關機了,Samba內的檔案卻無法正常剪下或刪除。出現的錯誤訊息,指向有程式正開啟這些檔案,導致他們無法正常被刪除,而出現問題的學生機,又很隨機,很難對點查詢。

而這樣的狀況要隔一段時間(通常都到下一節課),就自動緩解。感覺起來,這些被綁住的檔案,隔一段時間後自動被釋放了。

而這過程中,其實只要手動將Samba服務停止後再重啟,就可以解決,但是這實在不是解決的辦法,總不可能每次要存取Samba檔案,都要再連到Samba主機下指令吧!!只好痛下決心,努力找尋答案。最初,歷經過重新設定Samba,也重新安裝過Ubuntu系統主機,病症仍未獲緩解,之後只好伸入判讀samba的log紀錄。

Samba的log紀錄被存放在/etc/log/samba/log.電腦名稱中,錯誤訊息內容類似

[2017/02/14 11:15:25.941469,  0] ../source3/smbd/oplock.c:335(oplock_timeout_handler)
  Oplock break failed for file 50109劉晧辰.svg -- replying anyway


"Oplock break failed" 指的是檔案被打開中且被某人隨機使用使用中,並且系統主機無法強制這個用戶端釋放Oplock寫回快取。
假如檔案真的被開啟了,這樣的錯誤訊息就會發生,但假如檔案確實關閉甚至電腦都關機了,卻仍出現這樣的錯誤訊息,那就可能是Samba主機某程式拒絕發出斷開(break)的訊息,或是等候不到用戶關的回覆(Replay)訊息。然後就傻傻的等待著,等等等......等到session被丟棄時,才認為對方已經完成工作沒回應,這應該算是Samba的小bug。而這樣的情形也可以解釋著為何總是要到下一堂課,原本無法刪除的檔案,都可以刪除了。


解決辦法,在/etc/samba/smb.conf中
[sharefolder]

oplocks = no    //不要鎖定oplocks

就可以解決了

事後又看到有人如下這麼寫,一併補上
locking = no
strict locking = no


設定範例:
[SAMBA]
   comment = samba共用資料
   path = /tmp/samba
   public = yes
   guest ok = yes
   writable = yes
   browseable = yes
   only guest = yes
   oplocks = no
   locking = no
   strict locking = no



ps.上面的設定式安全性最低的設定方法,沒有經過帳號認証,其實是不太建議喔!!


參考網頁: