अधूरा स्रोत फ़ाइलों को हटाने से rsync रखें


169

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

$ rsync --remove-source-files speed:/var/crawldir .

लेकिन मुझे चिंता है कि rsync एक स्रोत फ़ाइल को अनलिंक कर देगा जिसने अभी तक डाउनलोड करना समाप्त नहीं किया है। (मैं स्रोत कोड को देखा और मैं इस के खिलाफ की रक्षा कुछ भी नहीं देखा।) किसी भी सुझाव?

जवाबों:


10

ऐसा लगता है कि समस्या पूरी होने से पहले एक फ़ाइल स्थानांतरित कर रही है, ऐसा नहीं है कि आप इसे हटा रहे हैं।

यदि यह लिनक्स है, तो फ़ाइल को प्रक्रिया ए द्वारा खोलना संभव है और प्रक्रिया बी फ़ाइल को अनलिंक कर सकती है। कोई त्रुटि नहीं है, लेकिन निश्चित रूप से ए अपना समय बर्बाद कर रहा है। इसलिए, तथ्य यह है कि rsync स्रोत फ़ाइल को हटा देता है कोई समस्या नहीं है।

समस्या rsync स्रोत फ़ाइल को कॉपी करने के बाद ही हटाती है, और यदि यह अभी भी डिस्क पर लिखी जा रही है तो आपके पास एक आंशिक फ़ाइल होगी।

इसके बारे में कैसे: massएक दूरस्थ फ़ाइल सिस्टम के रूप में माउंट (NFS काम करेगा) speed। फिर बस सीधे फाइलों को वेब-क्रॉल करें।


9

डाउनलोड प्रक्रिया पर आपका कितना नियंत्रण है? यदि आप अपना स्वयं का रोल करते हैं, तो आपके पास फ़ाइल को टेम्पर्ड डायरेक्टरी में जाने के लिए डाउनलोड किया जा सकता है या अस्थायी नाम हो सकता है, जब तक कि यह डाउनलोड न हो जाए, और तब इसे सही नाम पर mv कर दें। यदि आप तृतीय पक्ष सॉफ़्टवेयर का उपयोग कर रहे हैं, तो आपके पास उतना नियंत्रण नहीं है, लेकिन आप अभी भी अस्थायी निर्देशिका कार्य करने में सक्षम हो सकते हैं।


3

Rsync फाइल को कुछ पेटेंट से मेल खाती है। भले ही आप इसे डाउनलोड करने के लिए इसे एक अस्थायी निर्देशिका में फ़ाइलों को बनाने के लिए संशोधित नहीं कर सकते हैं, हो सकता है कि इसमें डाउनलोड के दौरान अलग-अलग फ़ाइलों का नामकरण करने का एक सम्मेलन हो (उदाहरण के लिए: foo.downloadingकिसी फ़ाइल का नाम डाउनलोड करते समय foo) और आप फ़ाइलों को बाहर करने के लिए इस संपत्ति का उपयोग कर सकते हैं जो अभी भी कॉपी किए जाने से डाउनलोड किए जा रहे हैं।


3

यदि आपका क्रॉलिंग प्रक्रिया पर नियंत्रण है, या इसका अनुमान लगाने योग्य आउटपुट है, तो उपरोक्त समाधान (समाप्त होने तक एक अस्थायी में संग्रहीत करना, फिर पूर्ण-डाउनलोड स्थान पर mv'ing, या '.downloading' नाम के साथ फ़ाइलों को अनदेखा करना)। शायद काम कर जाये। यदि वह सब आपके नियंत्रण से बाहर है, तो आप यह सुनिश्चित कर सकते हैं कि फ़ाइल किसी भी प्रक्रिया द्वारा 'lsof $ filename' करके नहीं खोली गई है और यदि कोई परिणाम है तो जाँच करें। स्पष्ट रूप से यदि किसी के पास कोई फ़ाइल नहीं है, तो उसे स्थानांतरित करना सुरक्षित है।

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