50Gb फ़ाइलों के साथ बाहरी संग्रहण ड्राइव (USB- कनेक्टेड, fuseblk) पर rm धीमा क्यों है?


21

मैं बैकअप बनाने के लिए rsnapshot का उपयोग करने की कोशिश कर रहा हूं, लेकिन मैं इसे अनुपयोगी पा रहा हूं। हालांकि यह एक निर्देशिका (50 जीबी) को अलग करने में सक्षम है और कुछ ही मिनटों में इसे (हर फाइल को हार्डलिंकिंग) डुप्लिकेट करता है, और मैं लगभग आधे घंटे में पूरी निर्देशिका को सीपी कर सकता हूं, इसे हटाने के लिए एक घंटे से अधिक समय लगता है। यहां तक ​​कि सीधे उपयोग करते हुए rm -rfv, मुझे लगता है कि किसी एक फ़ाइल को आरएम करने के लिए आधा सेकंड तक का समय लग सकता है, जबकि cpऔर linkकमांड तुरंत पूरा हो जाता है।

Rm इतना धीमा क्यों है? क्या हार्डलिंक को फिर से हटाने का कोई तेज़ तरीका है? मुझे इससे कोई मतलब नहीं है कि किसी फाइल को कॉपी करने से उसे हटाने में कम समय लगना चाहिए।

मैं जिस फाइलसिस्टम पर काम कर रहा हूं, वह एक बाहरी स्टोरेज ड्राइव है, जो usb और टाइप fuseblk (जो मुझे लगता है कि इसका मतलब है ntfs है) के माध्यम से जुड़ा हुआ है। मेरा कंप्यूटर ubuntu linux चला रहा है।

ऊपर से आउटपुट:

Cpu(s):  3.0%us,  1.5%sy,  0.0%ni, 54.8%id, 40.6%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   8063700k total,  3602416k used,  4461284k free,   557604k buffers

1
माउंट होने का fuseblkमतलब यह नहीं है कि ड्राइव NTFS है, इसका मतलब यह है कि यह FUSE ब्लॉक डिवाइस के रूप में माउंट किया गया है। यह लगभग कुछ भी हो सकता है।
क्रिस डाउन

1
@ChrisDown सच है, लेकिन मुझे पता है कि यह या तो NTFS या ext3 है, और मुझे पूरा यकीन है कि अगर यह ext3 होता तो इसे ऐसे ही माउंट किया जाता जैसे बिना किसी तर्क के माउंट किया जाता है।
बेनुबर्ड

1
यह निर्भर करता है कि निर्देशिका में कितनी फाइलें हैं (आपने यह नहीं बताया कि कितने हैं), और विशेष रूप से NTFS निर्देशिका में केवल> 3K फाइलों के साथ धीमा हो जाता है। बहुत ज्यादा हर दूसरे फाइलसिस्टम बहुत अधिक प्रदर्शन करने वाले होते हैं। फ़ाइल सिस्टम प्रदर्शन पर फ़ाइलों की संख्या के प्रभाव के बारे में SO / SE पर सभी अन्य कई पोस्ट देखें।
smci

जवाबों:


28

अंततः, चाहे आप कुछ भी करें, आपको हर एक फ़ाइल rmको चलाना होगा unlinkजिसे आप हटाना चाहते हैं (भले ही आप rm -rमूल निर्देशिका पर कॉल करें )। यदि हटाने के लिए बहुत सारी फाइलें हैं, तो इसमें लंबा समय लग सकता है।

जब आप चलते हैं तो दो विशेष रूप से समय लेने वाली प्रक्रियाएं होती हैं rm -r:

  1. readdir, के बाद,
  2. के लिए कई कॉल unlink

सभी फ़ाइलों को ढूँढना, और फिर इसे हटाने के लिए हर एक फ़ाइल के माध्यम से जाना, वास्तव में, वास्तव में लंबा समय ले सकता है।

यदि आपको यह "अनुपयोगी" लगता है, क्योंकि यह निर्देशिका को कुछ समय के लिए अनुपयोगी बनाता है, तो इसे हटाने से पहले मूल निर्देशिका को स्थानांतरित करने पर विचार करें। यह उस नाम को प्रोग्राम को फिर से उपयोग करने के लिए मुक्त कर देगा, बिना किसी असुविधा के बहुत अधिक समय तक।

यह मानते हुए कि फ़ाइल सिस्टम वास्तव में NTFS है (यह आपके प्रश्न से स्पष्ट नहीं है), NTFS आम तौर पर फ़ाइलों के बड़े swathes को हटाने में काफी धीमा है। आप अपने उद्देश्यों के लिए एक अधिक उपयुक्त फाइल सिस्टम का उपयोग करने पर विचार कर सकते हैं (यदि हाल ही में एक्सटेट किए गए फाइल सिस्टम का प्रदर्शन बहुत अच्छा है, यदि आपके पास कोई अन्य विशेष आवश्यकता नहीं है)। FUSE स्वयं भी विशेष रूप से तेज नहीं है, सामान्य रूप से। आप यह देखने पर विचार कर सकते हैं कि क्या आप किसी तरह से ऐसा कर सकते हैं जो FUSE का उपयोग नहीं करता है।


2
+1 वास्तव में बहुत कुछ सटीक फ़ाइल सिस्टम पर निर्भर करता है - कई लोग कुछ कार्यों के लिए वास्तव में अच्छा प्रदर्शन करते हैं, जबकि दूसरों के साथ सुस्त होते हैं (अक्सर यह फ़ाइल निर्माण बनाम हटाने बनाम डेटा एक्सेस के लिए होता है)।
11

15

Rm इतना धीमा क्यों है? मुझे पता नहीं है। लेकिन मैं एक तेज़ तरीका जानता हूँ:

mkdir blank
rsync -a --delete blank/ test/

अद्यतन: सर्वरफॉल्ट पर इस उत्तर में कुछ स्पष्टीकरण हैं। ऐसा लगता है कि rsync एक विशेष क्रम में फ़ाइलों को हटा रहा है जिसके कारण फ़ाइल सिस्टम ट्री संतुलित रहता है, और कभी भी पुन: संतुलन की आवश्यकता नहीं होती है। rm सिर्फ फाइलों को हटा देगा और हटाए जाने के कारण बहुत से पुनर्संतुलन का कारण बनेगा। यहाँ पुनर्संतुलन के बारे में कुछ जानकारी है


1
क्या आपने इसकी तुलना की है और इसकी तुलना की है rm -rf? rsyncअभी भी unlink()सभी फ़ाइलों में है test/, और शायद यही समय है।
मैटबियनको

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

लेकिन सबसे तेज़ तरीका unlink(2)डायरेक्टरी में होना चाहिए (और fsckबाद में याद रखना ) ...
मैटबिन्को

एक तथ्य एक तथ्य है। बस इसे समयबद्ध किया है, और यह लगभग दोगुना है। जीएनयू कोरुटिल्स आरएम कोड पढ़ने के बाद, यह मुझे आश्चर्यचकित नहीं करता है ...
डोमिनिक जॉर्ज

1

खैर, मुझे एक बार आपके साथ भी ऐसी ही समस्या हुई थी। मैंने पाया कि आपका "वा" उच्च है, आप उपयोग कर सकते हैं

iostat -x 1

यह जांचने के लिए कि क्या आपकी डिस्क का उपयोग अधिक है, यदि हां, तो इसका मतलब है कि आपकी डिस्क काफी व्यस्त है। जांचें कि क्या कुछ अन्य प्रक्रियाएं लगातार डिस्क पर लिख रही हैं।

उपदंश के लिए, उपयोग करें

vmstat 1

जांच करने के लिए है कि क्या उच्च या है आर < b । जो कुछ गलत होने का संकेत देता है। आपकी स्थिति में, मुझे लगता है कि डिस्क io मूल कारण है।

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