rsync mkstemp बॉक्सऑफ़ क्लाउड के डेवफ़्ट माउंट के साथ अमान्य तर्क (22) विफल रहा


10

मैंने इन निर्देशों के अनुसार davfs का उपयोग करके Box.com क्लाउड स्टोरेज को माउंट किया । मैंने अपने Box.com खाते को / home / me / Cloud / Box के नीचे रखा है

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

इसके बाद मैंने निम्नानुसार rsync चलाने का प्रयास किया:

rsync -auvz  --max-size=250M --exclude '.*' /home/me/Music/ /home/me/Cloud/Box/Music

मैंने भी कोशिश की:

rsync -auv  /home/me/Music/A /home/me/Cloud/Box/Music

और rsync आदेशों की अन्य विविधताएँ। कमांड मेरे संगीत को मेरे स्थानीय फ़ाइल सिस्टम (/ होम / मी / म्यूज़िक /) से बॉक्स क्लाउड (/ होम / मी / क्लाउड / बॉक्स / म्यूजिक) के माध्यम से डावस माउंट के माध्यम से कॉपी कर रहा है।

मुझे हमेशा इस फॉर्म की बहुत सारी त्रुटियाँ मिलती हैं:

rsync: mkstemp <filename> failed: Invalid argument (22)

एक विशिष्ट उदाहरण है:

rsync: mkstemp "/home/me/Cloud/Box/Music/VariousArtists/.01_Track_1.mp3.YVmFI9" failed: Invalid argument (22)

यह सब कुबंटू 12.04 एलटीएस 64 बिट, सर्वर ग्रेड हार्डवेयर पर एक तेज / विश्वसनीय केबल मॉडेम कनेक्शन (12 एमबी / एस अपलोड गति) के साथ हो रहा है।

जवाबों:


7

rsyncफ़ाइल नाम और / या davfs के साथ अस्थायी फ़ाइलों को बनाने के कारण समस्या यह होती है कि समझ में नहीं आता है। इस प्रकार फ़ाइल .01_Track_1.mp3.YVmFI9आपके सिस्टम पर मौजूद नहीं है, लेकिन एक अस्थायी है शिल्पकृति की rsync। मेरी ओर से कुछ अनुमान: यदि आपको सभी फ़ाइलों पर त्रुटि नहीं मिलती है, तो आप शायद केवल उन फ़ाइलों पर त्रुटियां प्राप्त करेंगे जो पहले से ही अपलोड की गई थीं (और परिवर्तित)।

यह इस अस्थायी फ़ाइल पीढ़ी को बंद करने के लिए असंभव हुआ करता था, लेकिन विकल्प को जोड़कर आपको आजकल अधिक भाग्य हो सकता है --inplace। हालाँकि rsync का उपयोग करने के लाभ यदि आप rsync-डेमन से बात नहीं कर रहे हैं (जो आप नहीं हैं यदि आप davfs का उपयोग कर रहे हैं), तो मेरे लिए अस्पष्ट हैं।

इसलिए, एक विकल्प के रूप में, आप कोशिश कर सकते हैं cp --update, जो केवल एक फ़ाइल की प्रतिलिपि बनाता है जब स्रोत गंतव्य से नया होता है। नई फाइलें और ID3 टैग में बदलाव वाली कोई भी फाइल कॉपी हो जाएगी, अन्य नहीं।

या यदि आपको अधिक नियंत्रण उपयोग करने की आवश्यकता है find:

cd /home/me/Music/
find * -size -250M -print0 | cpio -pdmv0 /home/me/Cloud/Box/Music

यह पदानुक्रम संरचना को संरक्षित cpioकरता है और मौजूदा फ़ाइलों को अधिलेखित नहीं करता है जो पुराने नहीं हैं।


1
Rsync का उपयोग करने का एक कारण यह है कि मैं पहले से ही जानता हूं कि इसे 250 एमबी से कम की फ़ाइलों की प्रतिलिपि बनाने के लिए कैसे सीमित किया जाए और जो फाइलें या निर्देशिकाएं छिपी नहीं हैं। मैं उपयोग करता हूं --max-size=250M --exclude '.*' । मुझे यकीन है कि cpऐसा करने के लिए बनाया जा सकता है ... शायद cp में खोजने के आउटपुट को पाइप करके? लेकिन मुझे नहीं पता कि यह कैसे करना है। यदि हम एक समाधान के साथ आते हैं, तो मैं कोशिश करूँगा cp -ru। साभार
माउंटेनएक्स

उस स्थिति में आपको cp -u की आवश्यकता नहीं है, cpio का उपयोग करें (अपडेट किया गया उत्तर देखें)
एंथन

धन्यवाद। मुझे विश्वास है कि यह मेरे लिए इसे हल करेगा। आपने मुझे इस प्रक्रिया में शिक्षित किया, जिसकी मैं सराहना करता हूं। (FYI करें, मेरे मामले में मुझे 250 एमबी से कम की फाइलें चाहिए, इससे अधिक नहीं।)
माउंटेनएक्स

यही वह है ... -size -250M, अन्यथा आप उपयोग करेंगे +250M(यहां संक्षेप में एक गलत संस्करण था, लेकिन मुझे यह पता चला कि संपादन तय होने से पहले)
एंथन

4

1. फ़ाइल नाम में विशेष वर्णों के साथ समस्याएँ

फ़ाइल नाम में कोई विशेष वर्ण हैं? आप जिन फ़ाइलों को इन फ़ाइलों को लिख रहे हैं, उनके आधार पर, वे आपको .उदाहरण के लिए डॉट ( ) के साथ फ़ाइलों को उपसर्ग करने की अनुमति नहीं दे सकते ।

2. rsync संशोधन समय और webdav2 के साथ समस्याएं

मैं इस ब्लॉग पोस्ट पर आया था जहाँ एक समस्या का वर्णन किया गया है rsyncजिसमें वेबडाव 2 माउंटेड बॉक्स.कॉम निर्देशिकाओं पर फ़ाइल संशोधन समय पर नज़र रखने / लिखने में समस्या है।

समस्या माउंटेड फ़ाइल सिस्टम में इस तरह दिखाई देती है:

david@sydney:~/Pictures$ ls -l /mnt/box/bwca/08/09/IMG_3084.CR2
-rw-r--r-- 1 david david 12564061 Aug 14 16:08 /mnt/box/bwca/08/09/IMG_3084.CR2
david@sydney:~/Pictures$ ls -l 2012/08/09/IMG_3084.CR2
-rw-rw-r-- 1 david david 12564061 Aug  9 13:00 2012/08/09/IMG_3084.CR2

उसी लेख में एक वर्कअराउंड दिखाया गया है:

$ rsync -avhP --size-only --bwlimit=64 2012/08 /mnt/box/bwca/

यह उपयोग करने का एक ठीक तरीका है rsync, लेकिन यह केवल उनके आकार के आधार पर फाइलों की तुलना कर रहा है, न कि उनके चेकसम।

3. davfs2 (WebDAV) के मुद्दे

मैं इस धागे के पार आया: dsfs2 के माध्यम से rsync? sourceforge पर WebDAV (davfs) फोरम पर। कोई व्यक्ति ऐसी ही स्थिति के बारे में पूछताछ कर रहा था, जहां वे WebDAV का उपयोग ऑनलाइन भंडारण प्रदाता को माउंट करने के लिए करना चाहते थे और WebDAV के माध्यम से माउंटेड स्टोरेज में rsync का प्रदर्शन करते थे। यह WebDAV के डेवलपर्स (वर्नर बॉमन) में से एक को इस विषय के बारे में कहना था

वर्नर की प्रतिक्रिया का अंश

  • davfs2 केवल पूर्ण फ़ाइलों को अपलोड करेगा। यह वृद्धिशील सामान rsync आमतौर पर नहीं करता है, और यह rsync को बहुत कुशल बनाता है।

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

वर्नर निम्नलिखित सुझाव देने के लिए आगे बढ़ता है

यह इस मामले में एक नुकसान हो सकता है। जब rsync दूरस्थ होस्ट पर फ़ाइल पढ़ता है, तो उसे पहले davfs2 द्वारा स्थानीय कैश में स्थानांतरित किया जाना चाहिए (यदि यह पहले से ही नहीं है)। इससे प्रक्रिया वास्तव में और अनावश्यक धीमी हो सकती है। चूंकि rsync केवल आपके मामले में एक परिष्कृत कॉपी-प्रोग्राम के रूप में काम करता है, इसलिए इसके बजाय cp का उपयोग करना बेहतर हो सकता है। cp के पास केवल-फ़ाइलों की प्रतिलिपि बनाने के लिए एक विकल्प (-u) है जो davfs2 फ़ाइल सिस्टम (= smartdrive) की तुलना में नए हैं और इसे फ़ाइलों को पढ़ने की आवश्यकता नहीं है, लेकिन केवल फ़ाइल मेटा डेटा की तरह पढ़ता है।

"Cp -pru directory / to / backup dav /" जैसा कमांड काम कर सकता है। यह फाइलों को डाउनलोड नहीं करता है (जैसे rsync कर सकता है, लेकिन मुझे यकीन नहीं है) (कृपया cp और rsync के मैनुअल को देखें)।

विकल्प?

तो जैसा कि @Aththon ने सुझाव दिया है, आप cp -uफ़ाइलों को कॉपी करने के लिए विधि का उपयोग कर सकते हैं । यह समझते हुए कि यह विधि पूरी तरह से तुलना के कारक के रूप में एक फ़ाइल के आकार को देखती है, इसलिए यह पूरी तरह से विश्वसनीय नहीं है।

तुम्हें पता है, कुछ भी है कि संशोधन समय पर ही दिखता है जब फ़ाइलों की तुलना उपयोग नहीं करना चाहिए cp -pruवर्नर बताते हैं कि इस धागे में क्यों :

मॉड समय के साथ मुद्दे पर अंश

जब आप एक davfs2 फ़ाइल सिस्टम को अनमाउंट करते हैं और बाद में कुछ समय पर फिर से माउंट करते हैं, तो फ़ाइल समय सर्वर से समय की जानकारी के अनुसार बदल सकती है। फ़ाइलें क्या बदल गई हैं, यह निर्धारित करने के लिए cp -pu और rsync जैसे उपकरण इन समय पर भरोसा नहीं कर सकते हैं।

इसलिए संशोधन के आसपास के विभिन्न मुद्दों को देखते हुए विशुद्ध रूप से चेकसम का उपयोग करने का तरीका एक बेहतर फिट की तरह लगता है:

$ rsync -avvz --omit-dir-times --checksum --human-readable --progress <local dir> <remote dir>

नमस्ते। फ़ाइल नाम में कोई विशेष वर्ण नहीं हैं। डिस्क पर मेरा फ़ाइल नाम केवल "01_Track_1.mp3" है। डॉट उपसर्ग सामान्य फ़ाइल नाम का हिस्सा नहीं है, न ही अतिरिक्त एक्सटेंशन (जैसे .mp3 .YVmFI9) है। यह भी ध्यान दें कि हर फ़ाइल विफल नहीं होती है। असफलताओं का कोई पैटर्न नहीं है।
माउंटेनएक्स

क्या यह पर्याप्त जानकारी है? got file_sum recv_files(Some_Music_[1999]/Some_Music_[1999]Zuni_SongVarious_Artists24.mp3) rsync: mkstemp "/home/me/Cloud/Box/Music/Some_Music_[1999]/.Some_Music_[1999]Zuni_SongVarious_Artists24.mp3.1aWWRY" failed: Invalid argument (22) got file_sum
माउंटेनएक्स

एक अन्य उदाहरण:got file_sum recv_files(Carlos/Dance/05-Tapestry-Carlos.mp3) rsync: mkstemp "/home/me/Cloud/Box/Music/Carlos/Dance/.05-Tapestry-Carlos.mp3.WeGbGS" failed: Invalid argument (22) got file_sum recv_files(Carlos/Dance/06-Dance-Turquoise_Dance-Carlos.mp3)
माउंटेनएक्स

@MountainX - देखें कि क्या मेरा अपडेट आपका मुद्दा है। इसके अलावा आप किस संस्करण का rsyncउपयोग कर रहे हैं? rsync --version
स्लम

rsync version 3.0.9 protocol version 30और मैं अब आपके अद्यतन समाधान का परीक्षण कर रहा हूं। धन्यवाद!
माउंटेनएक्स

3

Invalid argument (22)त्रुटि को रोकने के लिए मुझे rsync को davfs गंतव्य पर अपनी अस्थायी फ़ाइलें बनाने से रोकना पड़ा।

rsync --temp-dir=/tmp

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

rsync --temp-dir=/tmp --exclude lost+found --exclude '.*'

मुझे साइगविन पर इस मुद्दे का सामना करना पड़ा और यह सवाल शीर्ष खोज इंजन हिट था। स्वीकृत उत्तर मेरे लिए काम नहीं करता था क्योंकि मैं इंटरनेट पर एक दूरस्थ फ़ाइल सिंक्रनाइज़ेशन पर काम कर रहा था इसलिए rsync का उपयोग करना अनिवार्य था। इस जवाब में Thetemp-dir सुझाव मेरे लिए समाधान था।
निकक्रब्रीति
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.