बड़े XFS फाइल सिस्टम पर फाइल बनाने में असमर्थ


24

हमारे पास 4 टीबी फाइल सिस्टम के साथ एक लिनक्स सर्वर है, जिसका उपयोग तोड़फोड़ करने वाले रिपॉजिटरी को स्टोर करने के लिए किया जाता है। कई रिपॉजिटरी हैं, जिनमें से कई कई वर्षों से उपयोग में हैं।

डिस्क मूल रूप से 1 टीबी के बारे में थी, लेकिन हमने अंतरिक्ष से बाहर निकलना शुरू कर दिया और लगभग एक साल पहले इसे बढ़ाकर 4 टीबी कर दिया। अब, लोग रिपोर्ट कर रहे हैं कि वे अपने रेपो में फाइलों की जांच करने में असमर्थ हैं। त्रुटि संदेश है No space left on device

डिस्क में लगभग 1,5 टीबी मुफ्त है, और यह भी मुफ्त इनोड होने की रिपोर्ट करता है - और फिर भी, इस पर एक नई फ़ाइल बनाना संभव नहीं है। अभी भी पुरानी फ़ाइलों को अपडेट करना संभव है, और अंत में कुछ रिपॉजिटरी को अपडेट किया जाएगा, लेकिन अगले प्रयास में वही रिपॉजिटरी विफल हो सकती है।

जवाबों:


44

समस्या का कारण

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

समाधान 1 - माउंट विकल्प बदलें

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

समाधान 2 - फ़ाइलों को स्थानांतरित करें

दूसरा समाधान यह है कि कुछ फाइलें वर्तमान में पहली टेराबाइट में संग्रहित हैं, और उन्हें फाइल सिस्टम के दूसरे क्षेत्र में ले जाएं।

उम्र के हिसाब से आगे बढ़ना

हमारे मामले में, यह आसान था - फ़ाइल सिस्टम वर्षों से उपयोग में था, इसलिए हम केवल सबसे पुरानी फ़ाइलों को ढूंढ सकते हैं और उन्हें फ़ाइल सिस्टम से दूर कर सकते हैं, और फिर उन्हें वापस ले जा सकते हैं। यह आसानी से खोज का उपयोग करके किया गया था:

find /extra -mindepth 3 -maxdepth 3 -type d -mtime +730 -exec du -sh {} \; > /tmp/olddirs.txt

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

आवंटन समूह द्वारा आगे बढ़ना

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

XFS के पास आवंटन समूह (उर्फ एजी एस) है, जिसकी शुरुआत 0. है। आप यह जानने के लिए कि कौन से समूह पहले टेराबाइट पर हैं, प्रत्येक ब्लॉक के ब्लॉक आकार और संख्या की जांच कर सकते हैं xfs_info /path/to/mountpoint। या आप पहले कुछ एजी की जांच कर सकते हैं कि वे कौन से पूर्ण हैं, और फिर उन्हें साफ करें।

  1. पहले चार एजी में खाली जगह की जाँच:
ag में `seq 0 1 5` के लिए; $ $ एजी में इको फ्रीस्पेस करें; xfs_db -r -c "freesp -s-$ $ ag" / dev / CACHE / CACHE; grep "कुल मुक्त"; किया हुआ

यदि किसी समूह में कुल खाली स्थान 40 से कम है, तो आप उसमें नई फाइलें नहीं बना पाएंगे।

  1. उस AG में फ़ाइलें खोजें

यह फाइल सिस्टम पर प्रत्येक फाइल के लिए मेटाडेटा की जाँच करता है। इसमें लंबा समय लगेगा ... यहाँ एक सुझाव है:

   find / extra -mindepth 3 -type f -exec xfs_bmap -v {} \; > /tmp/agfilelist.txt

फिर आप " 0 "0 पर सभी फ़ाइलों को खोजने के लिए (कि एक स्थान, एक शून्य और दूसरी जगह) के लिए grep " 1 "कर सकते हैं, 1 अक्टूबर को लोगों को खोजने के लिए grep , आदि ... एजी 0 से शुरू करें, सबसे बड़ी फ़ाइलों को दूर करें (उपयोग करके) mv, नहीं cp!) और फिर वापस फिर से। तब तक दोहराएं जब तक आपके पास पर्याप्त मात्रा में स्थान खाली न हो।

परिणाम

एक बार जब हम पर्याप्त फ़ाइलों को / अतिरिक्त से दूर ले जाते हैं और फिर वापस आ जाते हैं, तो AG 0 में बहुत सारी जगह होती है और नई फ़ाइलों को बनाना एक बार फिर संभव होता है।

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