एक बड़े पैमाने पर निर्देशिका पेड़ पर एक आरएम -आरएफ करने में घंटों लगते हैं


20

हम बैकअप के लिए rsnapshot का उपयोग कर रहे हैं। यह बैकअप की गई फ़ाइल के बहुत सारे स्नैपशॉट रखता है, लेकिन यह पुराने को हटा देता है। यह अच्छा है। हालांकि rm -rfएक विशाल निर्देशिका पेड़ पर ऐसा करने में लगभग 7 घंटे लग रहे हैं । फाइलसिस्टम XFS है। मुझे यकीन नहीं है कि कितनी फाइलें हैं, लेकिन शायद लाखों में यह संख्या है।

वहाँ वैसे भी यह गति है? क्या कोई ऐसा आदेश है जो उसी तरह rm -rfकरता है और घंटे और घंटे नहीं लेता है?


1
मैंने उपयोग किया find . -delete -name directoryऔर यह बहुत अधिक तेज है rm -rf
पाओलो

जवाबों:


38

नहीं।

rm -rfunlink()हर फ़ाइल पर कॉल करते हुए, आपके फ़ाइल सिस्टम की पुनरावर्ती गहराई-पहला ट्रैवर्सल करता है। प्रक्रिया के धीरे-धीरे चलने के दो कारण opendir()/ readdir()और हैं unlink()opendir()और readdir()निर्देशिका में फ़ाइलों की संख्या पर निर्भर हैं। unlink()हटाए जा रहे फ़ाइल के आकार पर निर्भर है। इसे जल्दी पूरा करने का एकमात्र तरीका फाइलों के आकार और संख्या को कम करना है (जो मुझे संदेह नहीं है कि संभावना है) या उन कार्यों के लिए बेहतर विशेषताओं के साथ फाइल सिस्टम को एक में बदल दें। मेरा मानना ​​है कि XFS बड़ी फाइल पर अनलिंक () के लिए अच्छा है, लेकिन बड़ी निर्देशिका संरचनाओं के लिए इतना अच्छा नहीं है। आपको लग सकता है कि ext3 + dirindex या reiserfs तेज है। मुझे यकीन नहीं है कि जेएफएस कितना अच्छा है, लेकिन मुझे यकीन है कि विभिन्न फ़ाइल सिस्टम प्रदर्शन के बहुत सारे मानक हैं।

संपादित करें: ऐसा लगता है कि XFS पेड़ों को हटाने में भयानक है , इसलिए निश्चित रूप से अपने फाइल सिस्टम को बदलें।


1
कुछ साल पहले मैंने इसी तरह के उपयोग के मामले में reiserfs का उपयोग करते हुए भयानक प्रदर्शन देखा।
क्लेविस

1
अद्भुत पोस्ट!
wzzrd

2
यह लगभग सिर्फ "नहीं" :)
डेविड पशले

2
मैं आपके कथन के अलावा यहाँ सब कुछ से सहमत हूँ जो फ़ाइल के आकार पर निर्भर होने वाली गति को अनलिंक करता है। अनलिंक बस फ़ाइल के लिंक को हटा देता है और वास्तविक सामग्री के लिए कुछ भी नहीं करता है। विभिन्न आकार की फ़ाइलों के बीच कोई अंतर नहीं होना चाहिए (आप इसे स्वयं परीक्षण कर सकते हैं)।
कामिल किसिल

@KamilKisiel आप सही कह रहे हैं unlinkकि वास्तविक सामग्री के अलावा कुछ भी नहीं है, लेकिन unlinkसिस्टम कॉल करने के लिए , फ़ाइल सिस्टम कोड फिर भी अधिक काम करने के लिए है यदि हटाए गए लिंक फ़ाइल के लिए अंतिम है और यदि यह वर्तमान में खुला नहीं है। यह निश्चित रूप से फाइल सिस्टम पर निर्भर है, लेकिन तब बहुत ही अलग अंतर हो सकता है जब हटाए गए फ़ाइल बहुत बड़ा हो।
jlliagre

22

एक विकल्प के रूप में, निर्देशिका को एक तरफ ले जाएं, इसे उसी नाम, अनुमतियों और स्वामित्व के साथ पुन: बनाएँ और उस निर्देशिका के बारे में परवाह करने वाले किसी भी एप्लिकेशन / सेवाओं को पुनः आरंभ करें।

फिर आप एक विस्तारित आउटेज के बारे में चिंता किए बिना पृष्ठभूमि में मूल निर्देशिका को "अच्छा आरएम" कर सकते हैं।


यह काम कर सकता है, क्योंकि एक एमवी बहुत जल्दी है।
रोरी

युप - यह अच्छी तरह से काम करता है। मैंने इस तकनीक का उपयोग कई बार maildir- आधारित मेलबॉक्सों को "ठीक" करने के लिए किया है जहां एक ईमेल क्लाइंट ने इसे खो दिया है और डिस्क पर एक गड़बड़ छोड़ दी है। इस तरीके से मैंने जो सबसे बड़ी (एकल) निर्देशिका तय की है वह लगभग 1.5 या 2 मिलियन फाइलें IIRC के आसपास थी। अंतिम उपयोगकर्ता का कुल डाउनटाइम ~ 3 मिनट था, जिसमें से अधिकांश मेल क्लाइंट की प्रतीक्षा कर रहे थे और प्रक्रिया को मरने के लिए तैयार कर रहे थे।
ग्रेग वर्क

7

सुनिश्चित करें कि आपके पास XFS के लिए सही माउंट विकल्प हैं।

उपयोग करना -ologbufs = 8, XFS के साथ logbsize = 256k शायद आपके डिलीट प्रदर्शन को तीन गुना कर देगा।


2
इस टिप के लिए +1 ... किसी अन्य प्रदर्शन को बढ़ावा देने के लिए आलसी काउंटरों को भी सक्षम करना चाहिए।
हरिकिशन hur hur

1
इन सेटिंग्स पर कुछ स्पष्टीकरण भविष्य के पाठकों के लिए उपयोगी होगा।
एरॉन रोटेटेवेल

5

यदि आप फ़ाइल स्तर पर प्रभावी ढंग से आरएम कर रहे हैं तो इसमें लंबा समय लगेगा। यही कारण है कि ब्लॉक आधारित स्नैपशॉट बहुत अच्छे हैं :)।

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


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

हम्म। मैं शायद ऊपर के विपरीत के रूप में आया था। मूल पोस्टर लिनक्स का उपयोग करना चाहिए, और वास्तव में एक अच्छी तरह से सिद्ध लिनक्स फाइल सिस्टम नहीं है जो स्नैपशॉट करता है --- हालांकि btrfs और nilfs भविष्य के लिए दिलचस्प लगते हैं। इसलिए एक व्यावहारिक बात के रूप में, मैं मानता हूं --- ब्लॉक-आधारित स्नैपशॉट का उपयोग करना बेहतर है।
कीथ स्मिथ

+1 कार्यभार को विभाजित करने और समानांतर करने के लिए टिप के लिए: xfs समानांतर वर्कलोड पर अपनी ताकत निभाता है।
हरिकिशन hur hur

5

IO- गहन संचालन के लिए आयनिस का उपयोग करना अच्छा है, जैसे कि फाइलसिस्टम का उपयोग किए बिना।
मैं इस आदेश का सुझाव देता हूं:

आयनिस -n7 अच्छा आरएम -एफआर dir_name

यह भारी आईओ लोड के साथ सर्वर पर पृष्ठभूमि संचालन के लिए अच्छी तरह से खेलेंगे।


2

मुझे पता है कि यह पुराना है, लेकिन मैंने एक सुझाव में आईडी टॉस के बारे में सोचा। आप उन फ़ाइलों को क्रमिक रूप से हटा रहे हैं, समानांतर rm संचालन को निष्पादित करने से चीजों की गति बढ़ सकती है।

http://savannah.nongnu.org/projects/parallel/ समानांतर आमतौर पर xargs के स्थान पर उपयोग किया जा सकता है

इसलिए यदि आपके डिलीट की सभी फाइलें डिलीट हो गई हैं

find -t f deletedir | parallel -j 10 rm

यह आपको हटाने के लिए सिर्फ खाली निर्देशिका संरचनाओं के साथ छोड़ देगा।

नोट: आप संभवतः ऊपर बताए अनुसार फ़ाइल सिस्टम की सीमाओं से टकराएंगे।


Xargs के समानांतर उपयोग करने का क्या फायदा है?
रॉरी

1

क्या यहां एक वैकल्पिक विकल्प डेटा को इस तरह से अलग करना होगा कि आप rm करने के बजाय वास्तविक फाइल सिस्टम को रद्दी और पुनर्निर्माण कर सकते हैं?


3
मुझे लगता है कि rsnapshot हार्ड-लिंक का उपयोग रखरखाव-मल्टीपल-स्नैपशॉट-कुशलता सुविधा के हिस्से के रूप में करता है। इसलिए यदि प्रश्नकर्ता अलग फाइल सिस्टम का उपयोग करके उस सुविधा का उपयोग कर रहा है, तो आप काम नहीं करेंगे (जैसा कि आप फाइल सिस्टम सीमा पर हार्ड-लिंक नहीं कर सकते हैं)
डेविड स्पिललेट

0

कमांड की नज़दीकी कम करने के बारे में कैसे? पसंद:

nice -20 rm -rf /path/to/dir/

5
अड़चन शेड्यूलर नहीं है, यह फाइल सिस्टम है, मैं कहूंगा।
मैनुअल फैक्स

शेड्यूलर अड़चन है कि अप्रत्याशित घटना में, आप केवल I / O सबसिस्टम को और अधिक कठिन बना देंगे, जिससे rm के दौरान सर्वर और भी कम उपयोग योग्य हो जाएगा।
डेविड मैकिन्टोश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.