लिनक्स सर्वर अंतरिक्ष से बाहर


31

मुझे लगातार दो साक्षात्कारों में यह सवाल पूछा गया है, लेकिन कुछ सिस्टम प्रशासकों के साथ कुछ शोध और जाँच के बाद मुझे अच्छा जवाब नहीं मिला है। मैं सोच रहा हूं कि क्या कोई मेरी मदद कर सकता है।

एक सर्वर डिस्क स्थान से बाहर है। आप एक बहुत बड़ी लॉग फ़ाइल को देखते हैं और यह निर्धारित करते हैं कि इसे निकालना सुरक्षित है। आप फ़ाइल को हटा देते हैं लेकिन डिस्क अभी भी दिखाता है कि यह भरा हुआ है। यह क्या कारण होगा और आप इसे कैसे मापेंगे? और आपको कैसे पता चलेगा कि कौन सी प्रक्रिया इस विशाल लॉग फ़ाइल को लिख रही है?


3
आपको बेहतर सिस्टम प्रशासकों से बात करने की जरूरत है। यह तुच्छ सामान है।
Womble

2
तुच्छ, लेकिन स्थिति और सवाल अक्सर पर्याप्त होता है ...
2

क्या ओपी इसे स्वीकार कर पाएंगे?
इविहित

5
तुच्छ या नहीं, जो किसी के लिए नहीं बोलते हैं * निक्स धाराप्रवाह (उदाहरण के लिए एक मुख्य रूप से विंडोज व्यवस्थापक) यह सीखने के लिए अच्छा सामान है।
जॉन गार्डनियर्स

जवाबों:


56

यह एक सामान्य साक्षात्कार प्रश्न और एक स्थिति है जो विभिन्न प्रकार के उत्पादन वातावरण में आती है।

फ़ाइल की निर्देशिका प्रविष्टियाँ हटा दी गई हैं, लेकिन लॉगिंग प्रक्रिया अभी भी चल रही है। जब तक सभी फ़ाइल हैंडल बंद नहीं हो जाते, तब तक ऑपरेटिंग सिस्टम द्वारा अंतरिक्ष को पुनः प्राप्त नहीं किया जाएगा (जैसे, प्रक्रिया को मार दिया गया है) और सभी निर्देशिका प्रविष्टियों को हटा दिया गया है। फ़ाइल में प्रक्रिया लेखन को खोजने के लिए, आपको lsofकमांड का उपयोग करना होगा ।

प्रश्न का दूसरा हिस्सा कभी-कभी "कैसे आप एक फ़ाइल को साफ़ कर सकते हैं जो प्रक्रिया को मारने के बिना लिखा जा रहा है?" आदर्श रूप से, आप फ़ाइल: > /var/log/logfile को हटाने के बजाय लॉग फ़ाइल को "शून्य" या "ट्रंकट" करेंगे


1
... या fuser
स्टीवन मंडे

1
थोड़ा विस्तार करना: जब तक डिस्क पर किसी फ़ाइल के सभी संदर्भ गायब नहीं हो जाते, तब तक उस स्थान का उपयोग किसी और चीज़ के द्वारा नहीं किया जा सकता है। जिसमें फ़ाइल हैंडल शामिल है। यह भी इस ट्रिक को काम करने देता है: serverfault.com/questions/45237/link-to-a-specific-inode
Jeff Ferland

1
यदि आपने no-clobberसेट किया है, तो प्रयास करें:>| /var/log/logfile
बेलमिन फर्नांडीज

2
मैं हर साक्षात्कार पर इस सवाल का एक संस्करण पूछता हूं: "आपको डिस्क पूर्ण संदेश मिल रहे हैं। dfआपका अंतरिक्ष से बाहर होना duकहते हैं , आप किसी भी तरह का उपयोग कर रहे हैं। यह क्या कारण है, और दो उपकरण सहमत क्यों नहीं हैं?"
voretaq7

> /var/log/file100% पर डिस्क पर जगह के बाद भी क्या करें? लॉग फ़ाइल खाली लगती है ... लेकिन इस लॉग फ़ाइल पर लिखने वाले प्रोग्राम को पुनर्प्राप्त करने के बाद ही स्थान पुनर्प्राप्त होता है। क्या प्रोग्राम को पुनरारंभ किए बिना डिस्क स्थान को पुनर्प्राप्त करने का एक तरीका है?
अलेमानी

14

फ़ाइल के लिए अभी भी एक और लिंक है (या तो हार्ड लिंक या ओपन फ़ाइल हैंडल)। किसी फ़ाइल को हटाने से केवल निर्देशिका प्रविष्टि ही नष्ट हो जाती है; फ़ाइल डेटा और इनकोड चारों ओर लटका हुआ है जब तक कि इसका अंतिम संदर्भ नहीं हटा दिया गया है।

किसी सेवा के लिए अस्थायी फ़ाइल बनाना कुछ हद तक सामान्य बात है और फ़ाइल को खुला रखते हुए उसे तुरंत हटा देना चाहिए। यह डिस्क पर एक फ़ाइल बनाता है, लेकिन गारंटी देता है कि यदि प्रक्रिया असामान्य रूप से समाप्त हो जाती है, तो फ़ाइल को हटा दिया जाएगा, और फ़ाइल पर गलती से पेट भरने से अन्य प्रक्रियाएं भी रखता है। MySQL ऐसा करता है, उदाहरण के लिए, इसकी सभी ऑन-डिस्क अस्थायी तालिकाओं के लिए। मालवेयर अक्सर अपनी फ़ाइलों को छिपाने के लिए इसी तरह की रणनीति का उपयोग करता है।

लिनक्स के तहत, आप इन डिलीट की गई फाइलों को आसानी से एक्सेस कर सकते हैं /proc/<pid>/fd/<filenumber>


8

मैं एक sysadmin नहीं हूँ, लेकिन जो मैंने Unix.SE पर इकट्ठा किया है, उससे एक लिनक्स सिस्टम वास्तव में एक फ़ाइल को नहीं हटाएगा (खाली / पुन: प्रयोज्य के रूप में स्थान को चिह्नित करें) जब तक कि सभी फ़ाइल विवरणकर्ताओं ने उन्हें इंगित करने तक इसे अनलिंक कर दिया हो बंद कर दिया गया है। इसलिए पहले भाग का उत्तर देने के लिए, स्पेस अभी तक मुक्त नहीं है क्योंकि एक प्रक्रिया अभी भी इसे पढ़ रही है। दूसरे का जवाब देने के लिए, आप देख सकते हैं कि किस प्रक्रिया के साथ फाइल का उपयोग किया जा रहा है lsof


2

स्पष्ट हार्ड लिंक / ओपन फाइल उत्तर के अलावा एक वैकल्पिक उत्तर: वह फ़ाइल एक बहुत (बहुत) विरल फ़ाइल है जैसे /var/log/lastlogकि RHEL पर जो वास्तव में इतना सारा स्थान नहीं ले रही थी। इसे हटाने का बहुत कम प्रभाव पड़ा, इसलिए आपको अगली सबसे बड़ी फ़ाइल देखने की आवश्यकता है।


1

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

lsof आपको दिखा सकता है कि किस प्रक्रिया ने फ़ाइल को लॉक कर दिया है, एर्गो इसे लिख रहा है।


1
आप इस आरक्षित प्रतिशत को धुन 2 एफ का उपयोग करके भी समायोजित कर सकते हैं। डिस्क स्थान खाली करते समय सर्वर को चालू रखने की अनुमति देने का यह एक त्वरित तरीका हो सकता है।
sjbotha

1

फ़ाइल एक प्रक्रिया द्वारा खुली होने के अलावा, एक 2 मामला तब होता है जब आपके पास एक फ़ाइल सिस्टम होता है जो स्नैपशॉट का समर्थन करता है जैसे btrfsया ZFS

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

यह भी देखें:

एक 3 केस तब होता है जब आपके पास एक फाइल सिस्टम होता है जो ब्लॉक लेवल डे-डुप्लीकेशन को सपोर्ट करता है और ज्यादातर फाइल दूसरी फाइल के साथ समान होती है। जब तक आपके पास एक कंटेनर या वीएम नहीं है जो लॉग को एक सिसलॉग कंटेनर या वीएम में भेज रहा है, जो एक ही एफएस को साझा करता है ताकि लॉग सामग्री समान हो, तो मुझे यह उम्मीद नहीं है।

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