लिनक्स में 'बासी फ़ाइल हैंडल' का क्या मतलब है?


100

मान लें कि मेरे पास एक टर्मिनल खुला है, और उस टर्मिनल के माध्यम से मेरे पास cdकुछ डायरेक्टरी है। एक अन्य टर्मिनल के माध्यम से, मैं उस निर्देशिका को हटा देता हूं और उसे एक समान बैकअप से वापस पुनर्स्थापित करता हूं। जब मैं vimपहले टर्मिनल से उसी निर्देशिका में एक फ़ाइल की कोशिश करता हूं, तो मुझे बासी फ़ाइल हैंडल के बारे में त्रुटि क्यों मिलती है? इसका क्या मतलब है? (एक साइड नोट पर, मैंने पाया है कि इस मुद्दे को दरकिनार करना संभव है cd $(pwd)।)


यदि आप NFS को होस्ट A से होस्ट B तक एक निर्देशिका (नाम एडीर) माउंट करते हैं, तो होस्ट A पर एडीर के लिए डिलीट-एंड-रिस्टोर चीज़ करें, होस्ट पर एक्सेस करने पर आपको त्रुटि "बासी फ़ाइल हैंडल" भी मिल सकती है B. touchमेजबान A पर आदेश का उपयोग करें यह सामान्य कर सकता है।
rustyhu

जवाबों:


83

जब निर्देशिका हटा दी जाती है, inode कि निर्देशिका के लिए (और उसकी सामग्री के लिए inodes) पुनर्नवीनीकरण रहे हैं। पॉइंटर आपके शेल में उस डायरेक्टरी के इनोड (और इसकी सामग्री के इनोड्स) हैं जो अब मान्य नहीं हैं। जब निर्देशिका को बैकअप से पुनर्स्थापित किया जाता है, तो पुराने इनोड्स (आवश्यक रूप से) पुन: उपयोग नहीं किए जाते हैं; निर्देशिका और इसकी सामग्री यादृच्छिक आयतों पर संग्रहीत की जाती है। केवल एक चीज जो रहती है वह यह है कि मूल निर्देशिका पुनर्स्थापना निर्देशिका के लिए एक ही नाम का उपयोग करती है (क्योंकि आपने इसे बताया था)।

अब यदि आप उस निर्देशिका की सामग्री तक पहुँचने का प्रयास करते हैं जो आपका मूल शेल अभी भी इंगित कर रहा है, तो यह संचारित करता है कि फ़ाइल सिस्टम से मूल इनोड के लिए अनुरोध के रूप में अनुरोध किया गया है, जिसे तब से पुनर्नवीनीकरण किया गया है (और कुछ के लिए उपयोग में भी हो सकता है। अब पूरी तरह से अलग)। इसलिए आपको एक stale file handleसंदेश मिलता है क्योंकि आपने कुछ भी नहीं के लिए डेटा मांगा था।

जब आप एक cdऑपरेशन करते हैं, तो शेल आपको जो भी गंतव्य देता है, उसके इनोड स्थान को पुन: निर्धारित करता है। अब जब आपका शेल डायरेक्टरी के लिए नया इनकोड जानता है (और इसकी सामग्री के लिए नए इनोड्स), तो इसकी सामग्री के लिए भविष्य के अनुरोध मान्य होंगे।


आह, तो यह अमान्य / अशक्त इनोड पॉइंटर्स के इलाज का सिर्फ सिस्टम का तरीका है?
IDDQD

हाँ। मुझे यह जानने के लिए विवरणों के बारे में पर्याप्त नहीं पता है कि क्या होगा यदि, उदाहरण के लिए, आपने एक एनोड को संदर्भित करने का प्रयास किया जो पहले से ही कुछ और बिंदु पर पुनर्नवीनीकरण किया गया था। क्या आपको अभी भी बासी फाइल हैंडल मिलेगा? या आपको अप्रत्याशित डेटा मिलेगा?
dg99

1
मुझे नहीं लगता कि सिस्टम इसका फिर से उपयोग करेगा क्योंकि कोई वास्तव में उस I- नोड को वर्तमान निर्देशिका के रूप में उपयोग कर रहा है।
शमूएल Samसलंद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.