जवाबों:
बेशक ssh बेहतर है।
Nfs विभिन्न दूरस्थ प्रक्रिया कॉल और डेटा सिंक्रनाइज़ेशन प्रतीक्षा समय के साथ एक जटिल नेटवर्क प्रोटोकॉल का उपयोग करता है। Ssh के मामले में, ये लागू नहीं होते हैं।
इसके अलावा, कई ताले हैं। Nfs में फ़ाइल विलोपन इस तरह से काम करता है:
rm
आदेश unlink()
syscall देता हैunlink()
कॉल में परिवर्तित करता हैunlink()
रिमोट कॉल पर इस कॉल को अंजाम देता हैunlink()
आपके मूल के कॉल के एक्जिट कोड 0 पर वापस करता हैrm
rm
अगली फ़ाइल को iterates, गोटो 1अब, महत्वपूर्ण बात यह है: 2-7 के बीच, rm
इंतजार करना होगा। यह अगली unlink()
कॉल को एसिंक्रोनस रूप से भेज सकता है , लेकिन यह एक एकल-थ्रेडेड है, न कि ईवेंट-ओरिएंटेड टूल। यहां तक कि अगर यह कर सकता है, तब भी यह मुश्किल nfs माउंट झंडे की आवश्यकता होगी। जब तक इसका परिणाम नहीं मिलता, तब तक यह इंतजार करता है।
एनएफएस - और किसी भी नेटवर्क फाइलसिस्टम - हमेशा बहुत धीमी है।
कई मामलों में, आप एक चाल के साथ पुनरावर्ती विलोपन अर्ध-अनंत गति कर सकते हैं:
mv -vf oldfilms oldfilms-
)rm -rf oldfilms- &
)कई (लेकिन सभी नहीं) पहलुओं से, इस निर्देशिका को हटाने से ऐसा लगेगा जैसे यह व्यावहारिक रूप से शून्य समय में हुआ था।
विस्तार: जैसा कि @ el.pascado ने अपनी उत्कृष्ट टिप्पणी में उल्लेख किया है, वास्तव में 2-7 को किसी भी फाइल के लिए 3x चलाना है :
lstat()
syscall के साथ ),unlink()
, निर्देशिकाओं के मामले में opendir()
, सभी फ़ाइलों / निर्देशिकाओं को पुनरावर्ती रूप से हटा देना, फिर closedir()
, अंत में rmdir()
।readdir()
कॉल के साथ अगली निर्देशिका प्रविष्टि के लिए पुनरावृति ।इसके लिए, इसमें फ़ाइलों के लिए 3 nfs RPC कमांड और निर्देशिकाओं के लिए अतिरिक्त 3 की आवश्यकता होती है।
हाँ। शायद हो सकता है। निर्भर करता है। फ़ाइलों और निर्देशिकाओं की एक छोटी संख्या के लिए, यह बहुत अंतर नहीं करेगा।
एनएफएस माउंटेड डायरेक्टरी पर बल्क में फाइल का संचालन धीमा है। यदि आपके पास स्वयं एनएफएस सर्वर में प्रवेश करने और उन्हें वास्तविक निर्देशिका पर करने का अवसर है, तो यह जल्दी होगा।
आइए, मैं ओपनबीएसडी पोर्ट्स कलेक्शन को हटाकर इसका परीक्षण करता हूं जिसे मैंने सीवीएस से चेक किया है और एनएफएस पर आरोहित किया है:
एनएफएस सर्वर पर:
$ cd /export/shared/ports
$ du -hs .
2.6G .
$ find . | wc -l
179688
$ time rm -rf /export/shared/ports/*
0m20.87s real 0m00.12s user 0m04.62s system
क्लाइंट पर (बैकअप से मूल फ़ाइलों को पुनर्स्थापित करने के बाद):
$ time rm -rf /usr/ports/*
6m49.73s real 0m01.55s user 1m08.96s system
-r
ध्वज का उल्लेख है ,rm
पहले यह देखना होगा कि क्या फ़ाइल एक निर्देशिका है (lstat
एनएफ़एस के माध्यम से), इसे खोलें (opendir
एनएफ़एस के माध्यम से), इसकी सामग्री पढ़ें (readdir
एनएफ़एस के माध्यम से), और उसके बाद ही वास्तविक विलोपन करें जैसा कि अंदर मिली प्रत्येक फ़ाइल पर उत्तर में वर्णित है और उपनिर्देशिका, निकट निर्देशिका (closedir
nfs के माध्यम से) में शाप देना, और फिर हर पाया dir के लिए दोहराएँ।