क्लाइंट डिस्कनेक्ट के बाद सांबा को फ़ाइल लॉक रखने से कैसे रोकें?


11

यहां मेरे पास एक सांबा सर्वर (डेबियन 5.0) है, जिसे विंडोज एक्सपी प्रोफाइल की मेजबानी के लिए कॉन्फ़िगर किया गया है।

ग्राहक इस सर्वर से जुड़ते हैं और अपने प्रोफाइल पर सीधे सांबा शेयर पर काम करते हैं (प्रोफ़ाइल को स्थानीय रूप से कॉपी नहीं किया जाता है)।

हर अब और फिर, एक क्लाइंट ठीक से बंद नहीं हो सकता है और इस तरह विंडोज फ़ाइल लॉक को मुक्त नहीं करता है। जब सांबा लॉकिंग टेबल को देखते हैं, तो हम देख सकते हैं कि कई फाइलें अभी भी लॉक हैं, हालांकि क्लाइंट अब भी कनेक्ट नहीं है। हमारे मामले में, यह मोज़िला थंडरबर्ड और फ़ायरफ़ॉक्स द्वारा बनाई गई लॉकफाइल्स के साथ होता है। यहाँ सांबा लॉकिंग टेबल का एक उदाहरण दिया गया है:

# smbstatus -L | grep DENY_ALL | head -n5
Pid          Uid        DenyMode   Access      R/W        Oplock           SharePath   Name   Time
--------------------------------------------------------------------------------------------------
15494        10345      DENY_ALL   0x3019f     RDWR       EXCLUSIVE+BATCH  /home/CORP/user1   app.profile/user1.thunderbird/parent.lock   Mon Nov 22 07:12:45 2010
18040        10454      DENY_ALL   0x3019f     RDWR       EXCLUSIVE+BATCH  /home/CORP/user2   app.profile/user2.thunderbird/parent.lock   Mon Nov 22 11:20:45 2010
26466        10056      DENY_ALL   0x3019f     RDWR       EXCLUSIVE+BATCH  /home/CORP/user3   app.profile/user3.firefox/parent.lock   Mon Nov 22 08:48:23 2010

हम देख सकते हैं कि फाइलें विंडोज द्वारा खोली गईं और DENY_ALL लॉक लगाया गया।

अब जब एक ग्राहक इस शेयर को फिर से देखता है और उन फाइलों को खोलने की कोशिश करता है, तो सांबा का कहना है कि वे बंद हैं और पहुंच से इनकार करते हैं।

क्या इस स्थिति के आसपास काम करने का कोई तरीका है या मैं कुछ याद कर रहा हूं?

संपादित करें: हम सांबा सर्वर पर फ़ाइल लॉक को अक्षम करने से बचना चाहेंगे क्योंकि सक्षम होने के अच्छे कारण हैं

जवाबों:


11

नीचे दिए गए चरणों ने मुझे इस सटीक मुद्दे को कई अवसरों पर हल करने में मदद की है:

  1. सांबा सर्वर पर लॉगिन करें।
  2. एक "smbstatus" चलाएं।
  3. आउटपुट के तीसरे खंड में फ़ाइल पर लॉक की प्रक्रिया की पीडा खोजें।
  4. सत्यापित करें कि यह smbstatus आउटपुट के पहले और दूसरे खंड में अपेक्षित उपयोगकर्ता और hostname से मेल खाता है।
  5. "Ps -ef" चलाएं और देखें कि उस पिड के साथ smbd कितने समय से चल रहा है।
  6. यदि यह कंप्यूटर को पिछली बार रिबूट होने से पहले से चला आ रहा है, तो यह बाईं ओर smbd है। मार डालो बस एक smbd। (और सुनिश्चित करें कि आपको सही मिल रहा है - यह ऐसा होना चाहिए जिसमें एक माता-पिता हो, जो 1 के बराबर न हो।)

इसके अलावा, आप पा सकते हैं कि कुछ smbd pids कुछ घंटों से चल रहे हैं और उन्होंने जो फाइलें लॉक की हैं, वे आपकी जरूरत हैं। ऊपर के रूप में, बस इन प्रक्रियाओं को मारें और आपको ठीक होना चाहिए। यदि आप अनजाने में मुख्य smbd प्रक्रिया को मार देते हैं, तो आप इसे इस कमांड से पुनः आरंभ कर सकते हैं: sudo /etc/init.d/smbd पुनरारंभ
Socceroos

5

अच्छी तरह से देखिए:

reset on zero vc = yes / no

और देखें कि क्या यह आपकी समस्या को ठीक करेगा या नहीं।

से smb.confआदमी पेज:

यह बूलियन विकल्प नियंत्रित करता है कि क्या आने वाले सत्र सेटअप को उसी आईपी से आने वाले अन्य कनेक्शनों को मारना चाहिए। यह डिफ़ॉल्ट विंडोज 2003 व्यवहार से मेल खाता है। इस पैरामीटर को हां में सेट करना तब आवश्यक हो जाता है जब आपके पास एक परतदार नेटवर्क होता है और खिड़कियां फिर से कनेक्ट करने का फैसला करती हैं जबकि पुराने कनेक्शन में अभी भी फाइल मोड के साथ फाइलें खुली हैं। नए कनेक्शन पर ये फाइलें अप्राप्य हो जाती हैं। क्लाइंट नए कनेक्शन पर एक शून्य कुलपति भेजता है, और विंडोज 2003 एक ही आईपी से आने वाले अन्य सभी कनेक्शनों को मारता है। इस तरह बंद फाइलें फिर से सुलभ हैं। कृपया ध्यान रखें कि इस विकल्प को सक्षम करने से एक मस्कारिंग राउटर के पीछे कनेक्शन मारे जाएंगे।

संपादित करें :
मैंने अभी एक और संभावित समाधान पर सोचा था। आप प्रश्न में शेयर पर ऐसा कुछ कर सकते हैं।

veto oplock files = /*.lock/

यह सिर्फ .lock फ़ाइलों पर oplocks को रोक देगा।


0

सांबा के कुछ बहुत चालाक लोगों ने इस विकल्प को हटाने का फैसला किया और इसके लिए कोई प्रतिस्थापन नहीं है।

अब तक एसएमबी कंपैटिबिलिटी के लिए, क्योंकि यह वास्तव में डिफ़ॉल्ट जीत व्यवहार है।

जब तक कोई उपयोगकर्ता linux कमांड लाइन में पारंगत नहीं होता है और खुली फ़ाइलों / प्रक्रियाओं को कैसे मारता है, आपको इसे साफ़ करने के लिए SMBD या सर्वर को स्वयं को पुनरारंभ करना होगा।

बहुत बढ़िया किया, Samba.org।


क्या आपके पास इसके लिए एक प्रशस्ति पत्र है?
BE77Y

आपको वहां पहुंचने के लिए कुछ देखना होगा, लेकिन: lists.samba.org/archive/samba-technical/2011-July/078621.html (विचार प्रक्रिया और इसे हटाने के लिए न करने की अपील करते हुए दिखाएं) सूचियां .samba.org / संग्रह / सांबा-तकनीकी / 2008-अक्टूबर /… (दिखाता है कि पैरामीटर 4.0 में हटा दिया गया है)
माइकल

2019 तक, डेबियन 9 - सांबा 4.5.12 में, reset on zero vcविकल्प अभी भी मैनुअल में सूचीबद्ध है, और इसके द्वारा भी प्रदर्शित किया गया है testparm। तो या तो यह वापस आ गया है, या यह वास्तव में हटाया नहीं गया था।
२19

0

मैं एक ऐसी ही समस्या में चल रहा था, एक क्लाइंट एक बड़ी फ़ाइल की नकल करते समय दुर्घटनाग्रस्त हो गया और रिबूट के बाद फाइल लॉक हो गई। सौभाग्य से यह बहुत बार नहीं होता है, लेकिन फिर भी सांबा प्रक्रिया को मारना काफी कष्टप्रद है। reset on zero vcलगता है कि यह केवल समाधान है, लेकिन माना जाता है कि इसे Samba4 से हटा दिया गया था, हालांकि फेडोरा (27) पर संस्करण 4.7.6 अभी भी है (संभवतः आरएच द्वारा पैच किया गया है)। यह वैसे भी बहुत मदद नहीं करेगा, जैसा कि मैन पेज अब कहता है, कि यह केवल SMB1 के साथ काम करता है (जिसे किसी भी अधिक उपयोग नहीं किया जाना चाहिए) और SMB2 और SMB3 कनेक्शन पर कुछ भी नहीं करता है, इसे संभालने का एकमात्र तरीका इसमें उल्लेख किया गया है माइकेल द्वारा जुड़ा धागा । मुझे हटाने के पीछे का औचित्य नहीं पता है और इसके बारे में क्या बुरा हैreset on zero vc, मैं एक हैक की तरह इस उद्देश्य के लिए टीसीपी टाइमआउट का उपयोग करने पर विचार करूंगा। वैसे भी कुछ उचित हो सकता है

socket options = TCP_NODELAY SO_KEEPALIVE TCP_KEEPIDLE=30 TCP_KEEPCNT=3 TCP_KEEPINTVL=3

यह अंतिम संचार के बाद लगभग 40 सेकंड (30 + 3 * 3) कनेक्शन को मार देगा, जो आमतौर पर क्रैश को नोटिस करने और रिबूट करने के लिए पर्याप्त से अधिक होता है (यह देखते हुए कि सर्वर का टीसीपी स्टैक स्मार्ट होता है जब व्यापारी कनेक्शन को बंद करने के लिए पर्याप्त होता है। रिबूट के बाद इसके रखवाले पैकेट को खारिज कर दिया)।

ध्यान दें कि यह आपके नेटवर्क पर लोड बढ़ाता है, लेकिन मुझे संदेह है कि यह बहुत सारे ग्राहकों के साथ भी ध्यान देने योग्य है।


क्या आप जानते हैं कि क्या यह विचित्र विंडोज 10 क्लाइंट "नो नॉग्रुप" ज़ोंबी थ्रेड समस्या के साथ मदद करता है? कई जगहों पर मेरे कई विंडोज 10 क्लाइंट ने ज़ोंबी थ्रेड्स के सैकड़ों (कभी-कभी हजारों) छोड़ने शुरू कर दिए हैं जो "हैंडलर प्रक्रिया / रिटायर होने तक सेवानिवृत्त होने तक" किसी को भी नहीं मिलते हैं। आम तौर पर सेटिंग deadtime = 10या तो यह स्पष्ट होगा, लेकिन फ़ाइल लॉक के साथ SMB3_11 कनेक्शन पर हमेशा के लिए बंद होने का कोई प्रभाव नहीं होता है, क्योंकि पीआईडी ​​के लिए फाइलल करते समय डेडटाइम की जांच नहीं की जाएगी। बहुत निराशा होती है।
zxq9

मैंने आपके द्वारा बताई गई समस्या के बारे में कभी नहीं सुना या अनुभव नहीं किया। deadtimeयदि आपके क्लाइंट के पास फाइलें नहीं हैं, तो कुछ भी नहीं है, इसलिए यह सवाल होगा कि वे कौन सी फाइलें खोलते हैं। लेकिन यह शायद यहाँ चर्चा की गई एक पूरी तरह से अलग मुद्दा है, इसलिए आपको इसके लिए एक नया प्रश्न खोलना चाहिए। मेरा socket optionsसुझाव केवल उन कनेक्शनों के साथ मदद करता है जो ठीक से बंद नहीं होते हैं (क्योंकि क्लाइंट क्रैश करते हैं, नेटवर्क आउटेज आदि), लेकिन शायद नहीं अगर आपका डब्ल्यूएक्स क्लाइंट बिना किसी और कार्रवाई के सर्वर से कनेक्ट होता है या किसी तरह के अनाम सत्र का उपयोग करता है (जो nobody.nogroupबताता है कि )।
जैकब

इस समस्या के बारे में एक प्रश्न प्रतीत होता है, लेकिन वास्तविक समाधान के बिना। ऐसा लगता है कि यह एक सांबा मुद्दा हो सकता है जिसे हाल के संस्करण में तय किया जा सकता है।
जैकब

मेलिंग सूची में इसके बारे में काफी कुछ उल्लेख हैं, कोई वास्तविक समाधान कहीं भी प्रस्तुत नहीं किया गया है, और मैंने कोई भी संस्करण (हर वर्तमान शाखा लेकिन 4.9) की कोशिश की समस्या को ठीक करता है। यह केवल विंडोज 10 ग्राहकों के साथ है। कोई नहीं: nogroup बात बहुत ही खराब है, क्योंकि अतिथि वैश्विक रूप से अक्षम होते हैं, कोई भी शेयर उन्हें स्वीकार नहीं करता है, और किसी भी प्रविष्टि की PID हमेशा एक मान्य उपयोगकर्ता नाम के साथ एकल मान्य प्रविष्टि के समान नहीं होती है। तो आप 12345 someuser somegroup...एक प्रविष्टि पर देखते हैं , फिर 800 12345 nobody nogroup ...प्रविष्टियां, लेकिन केवल एक मुट्ठी भर फ़ाइल ताले (800 नहीं)। बहुत अजीब। अब मेरे 3 ग्राहक साइटों को प्रभावित करता है।
zxq9

यह केवल उच्च गतिविधि वाली साइटों पर एक संसाधन बाधा बन जाता है, यही कारण है कि मुझे लगता है कि यह इतना कम ध्यान देता है। ज्यादातर समय कोई समस्या नहीं होती है, इसलिए लोग बस इसे नोटिस नहीं करते हैं और जब भी ग्राहक वास्तव में अपना कनेक्शन बंद करते हैं, तो यह थोड़े-थोड़े समय के लिए खुद को साफ कर देता है।
zxq9

0

आप निम्न के साथ प्रति-शेयर आधार पर oplocks को निष्क्रिय कर सकते हैं:

[acctdata]
oplocks = False
level2 oplocks = False

डिफ़ॉल्ट oplock प्रकार Level1 है। Level2 oplocks smb.conf फ़ाइल में प्रति-शेयर आधार पर सक्षम हैं। वैकल्पिक रूप से, आप प्रति-फ़ाइल के आधार पर oplocks को शेयर के भीतर अक्षम कर सकते हैं:

veto oplock files = /*.mdb/*.MDB/*.dbf/*.DBF/

यदि आप सांबा की लॉग प्रविष्टियों से स्पष्ट रूप से ओप्लॉक्स के साथ समस्याओं का सामना कर रहे हैं, तो आप इसे सुरक्षित रूप से खेलना और ऑप्लॉक्स और लेवल 2 ओप्लॉक्स को अक्षम करना चाहते हैं।

कर्नेल ऑप्‍लॉक को निष्क्रिय करना कर्नेल ऑप्‍लॉक एक smb.conf पैरामीटर है, जो सांबा को सूचित करता है (यदि UNIX कर्नेल में Windows क्लाइंट को ऑप्‍लॉक ब्रेक भेजने की क्षमता है) जब UNIX प्रक्रिया फ़ाइल को कैश करने का प्रयास करती है। यह पैरामीटर सांबा सर्वर पर सक्षम oplocks के साथ UNIX और Windows के बीच फ़ाइलों को साझा करने को संबोधित करता है: UNIX प्रक्रिया Windows क्लाइंट द्वारा Oplocked (कैश की गई) फ़ाइल को खोल सकती है और smbd प्रक्रिया एक ओपलॉक ब्रेक नहीं भेजेगी, जो फ़ाइल को उजागर करती है डेटा भ्रष्टाचार का खतरा। यदि UNIX कर्नेल में ओपल ब्रेक भेजने की क्षमता है, तो कर्नेल ऑप्‍लॉक पैरामीटर सांबा को ऑप्‍लॉक ब्रेक भेजने में सक्षम बनाता है। कर्नेल ऑप्‍लॉक smb.conf फ़ाइल में प्रति-सर्वर आधार पर सक्षम होते हैं।

kernel oplocks = yes

डिफ़ॉल्ट नहीं है।

स्रोत

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.