निर्देशिका आकार को सिकोड़ें / रीसेट करें?


11

क्या निर्देशिका प्रविष्टि को सिकोड़ने का कोई तरीका है?

मेरी dovecot maildir निर्देशिकाओं का आकार डिफ़ॉल्ट रूप से 4096 से कई megs तक बढ़ गया है , और यह डिस्क कोटा के साथ खिलवाड़ है।

एकमात्र तरीका जो मैंने पाया है, निर्देशिका को हटाना और पुनः बनाना है। मुझे उम्मीद है कि कहीं एक जादुई समारोह है - मैं कुछ भी करने के लिए खुला हूं, सिवाय हाथ-कोडित कोडांतरक के।

संपादित करें: पदावनति के लिए, dirents> 4096 खोजने के लिए:

 find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr

इसके अलावा stackoverflow.com/questions/4303008/…
oliver

जवाबों:


6

लाखों फ़ाइलों के साथ एक डायरेक्टरी पर rm भी देखें ; मूर्त रूप से संबंधित है, लेकिन हम वहां इस पर चर्चा करते हैं।

जहाँ तक मुझे पता है, कम से कम ext2 / 3 पर, नहीं, उन्हें डिलीट + रीक्रिएट से कम करने का कोई (ऑनलाइन) तरीका नहीं है। अनमाउंट किया गया, कई स्रोत सुझाव दे e2fsck -Dसकते हैं, हालांकि मैं उस विकल्प के साथ व्यक्तिगत अनुभव का दावा नहीं कर सकता।

आगे पढ़ने के लिए कुछ संदर्भ:


1
पहला लिंक विशेष रूप से उपयोगी था: इसने मेरी समस्या को विशेष रूप से संबोधित किया (मेल सर्वर), और यह तथ्य कि टेड टोस का वजन संवाद पर बहुत अच्छा है;)
mikewaters

3

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

चूँकि हमें अपने रखरखाव विंडो के दौरान इस ऑपरेशन को करने के लिए डाउनटाइम लेने की आवश्यकता थी, इसलिए पुनर्निर्माण निर्देशिका को जल्द से जल्द उपलब्ध कराना हमारे लिए महत्वपूर्ण था। यदि सादगी आपके लिए अधिक महत्वपूर्ण है, तो पहली चाल कमांड को स्रोत निर्देशिका पर 'rm -rf' में बदलें, और दूसरे 'rm -rf' कमांड को छोड़ दें।

मैंने इन आदेशों को एक बड़ी प्रक्रिया से निकाला, और निर्देशिका नामों को अलग कर दिया है, इसलिए यदि मैंने उस अनुवाद में कोई गलती की है तो क्षमा करें।

mkdir /tmp/holding_dir/
rsync -ai --delete --link-dest=/path/to/source_dir/ /path/to/source_dir/ /tmp/holding_dir/
mv /path/to/source_dir/ /tmp/deleteme/
mv /tmp/holding_dir/ /path/to/source_dir/

फिर बाद में, हम निर्देशिका को हटा देते हैं। आकार के आधार पर, आपको ऐसा करने के लिए अधिक परिष्कृत तकनीक का उपयोग करने की आवश्यकता हो सकती है। उदाहरण के लिए, इस निर्देशिका में रिक्त निर्देशिका को सिंक करने के लिए --delete ध्वज के साथ rsync का उपयोग करना अधिक कुशल हो सकता है।

rm -rf /tmp/deleteme/

2

मैं इसे इस तरह से करूँगा।

cp -aloldir newdir पुराने && mvडेडपनाम newdir && mvपुराने डेड && rm -rटेंपनाम

जहां olddir निर्देशिका है आप हटना चाहता हूँ newdir और tempname अस्थायी फ़ाइल नाम हैं

cp -alnewdir में olddir की सामग्री के लिए लिंक बनाता है और अगले तीन आदेशों को newdir के साथ स्वैप और साफ़ करता है।


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