समस्या का कारण
समस्या यह पता लगाती है कि 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
। या आप पहले कुछ एजी की जांच कर सकते हैं कि वे कौन से पूर्ण हैं, और फिर उन्हें साफ करें।
- पहले चार एजी में खाली जगह की जाँच:
ag में `seq 0 1 5` के लिए; $ $ एजी में इको फ्रीस्पेस करें; xfs_db -r -c "freesp -s-$ $ ag" / dev / CACHE / CACHE; grep "कुल मुक्त"; किया हुआ
यदि किसी समूह में कुल खाली स्थान 40 से कम है, तो आप उसमें नई फाइलें नहीं बना पाएंगे।
- उस 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 में बहुत सारी जगह होती है और नई फ़ाइलों को बनाना एक बार फिर संभव होता है।