क्या एक बार scp होने पर मुझे फ़ाइल भ्रष्टाचार की जाँच करने की आवश्यकता है?


17

मैंने scpकमांड का उपयोग करके कई फ़ाइलों और फ़ोल्डरों को पुन: स्थानांतरित कर दिया है:

scp -rp /source/folder myremoteusername@122.10.12.123:/destination/folder

स्थानांतरण पूरा हो जाने के बाद, क्या मुझे यह जांचने की आवश्यकता है कि क्या सभी फाइलें बिना किसी भ्रष्टाचार के हस्तांतरित हो गईं, या इसका scpध्यान नहीं रखता है (यदि कोई फ़ाइल सही ढंग से स्थानांतरित नहीं हुई है तो कुछ त्रुटि संदेश प्रदर्शित करता है)?


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

एक छोटी सी tl; मेरी पोस्ट करने के लिए डॉ: rsyncयदि आप कर सकते हैं का उपयोग करें । यह लेन-देन समाप्त होने के बाद हर फ़ाइल के लिए मान्यताओं की प्रतिलिपि बनाता है, इसलिए यह एक अच्छा विचार है कि बस थोड़ा सुरक्षित होना चाहिए।
पोलीमोन

जवाबों:


24

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

हालाँकि आपको यह सुनिश्चित करने की ज़रूरत है कि आप scpयह नहीं बता रहे हैं कि कुछ गलत हो गया है। एक त्रुटि संदेश होना चाहिए, लेकिन विश्वसनीय संकेतक यह है कि scpयदि कुछ गलत हो गया है तो एक नॉनजेरो एग्जिट कोड लौटाता है।

अधिक सटीक रूप से, आप जानते हैं कि फ़ाइल scp0 (यानी सफलता की स्थिति कोड) रिटर्न सही ढंग से प्रसारित की गई थी । जब आप किसी भी कमांड को चलाते हैं, तो यह जांचना कि बाहर निकलने की स्थिति 0 आवश्यक है। यदि scpकोई त्रुटि स्थिति देता है, या यदि यह एक सिग्नल द्वारा मारा जाता है, या यदि यह कभी नहीं मरता है क्योंकि सिस्टम क्रैश हो जाता है या इसे चलाते समय बिजली खो देता है, तो आपके पास कोई गारंटी नहीं है। विशेष रूप से, चूंकि scpफ़ाइल को इसके अंतिम नाम से सीधे कॉपी किया जाता है, इसका मतलब है कि आप सिस्टम क्रैश की स्थिति में आंशिक फ़ाइल के साथ समाप्त कर सकते हैं। कॉपी किया गया हिस्सा सही होने की गारंटी है लेकिन फ़ाइल को छोटा किया जा सकता है।

बेहतर विश्वसनीयता के लिए, scp के बजाय rsync का उपयोग करें। जब तक अन्यथा निर्देश न दिया जाए, तब तक rsync एक अस्थायी फ़ाइल को लिखता है, और इसे समाप्त होने पर इसे स्थानांतरित कर देता है। इस प्रकार, यदि rsync एक सफलता कोड देता है, तो आप जानते हैं कि फ़ाइल मौजूद है और एक सही, पूर्ण प्रतिलिपि; यदि rsync ने कोई त्रुटि कोड नहीं दिया है, तो कोई फ़ाइल मौजूद नहीं होगी (जब तक कि फ़ाइल का कोई पुराना संस्करण न हो, उस स्थिति में पुराने संस्करण को संशोधित नहीं किया जाएगा)।


3

मुझे scpकुछ होने के बाद भ्रष्टाचार के साथ कोई समस्या नहीं है, लेकिन अगर आप इसके बारे में चिंतित हैं तो आप हमेशा md5sum <filename>सुनिश्चित करने के लिए दोनों प्रणालियों पर चल सकते हैं कि वे एक ही हैं।


3

@ दाविद-राजा के सुझाव के अनुसार, यह md5स्थानांतरण के बाद फ़ाइलों की अखंडता की जाँच करने के लिए एक आधारित समाधान है। निम्न कमांड चलाएं एक बार के बाद cdकरने के लिए ing /source/folderके बाद स्थानीय मशीन पर और एक बार cdके लिए ing /destination/folderदूरस्थ होस्ट पर: find . -type f -print0 | xargs -0 -I {} md5sum {} | md5sum। एक सफल स्थानांतरण के बाद परिणामी हैश समान होना चाहिए।

अपडेट करें: ServerFault पर एक समान प्रश्न के इस उत्तर के अनुसार , फ़ाइल अखंडता की गारंटी नहीं देता हैscp(कृपया विवरण के लिए @Gilles द्वारा इस उत्तर की जांच करें )। फ़ाइल हैश की पोस्ट-ट्रांसफर चेकिंग के लिए वैकल्पिक, आप rsyncफ़ाइलों को स्थानांतरित करने और इसके रिटर्न कोड की जांच करने के लिए उपयोग कर सकते हैं ।

अद्यतन 2: निम्न केवल जाँच करता है कि क्या फ़ाइलें और उनके संबंधित आकार स्थानांतरण के बाद मेल खाते हैं:find . -type f -print0 | xargs -0 -I {} stat --printf="%n %s\n" {} | sort | md5sum


2
यदि scp 0 देता है, तो अखंडता की गारंटी है। इसके अलावा, अगर scp 0 पर वापस नहीं आता है, तो समस्या सामान्य भ्रष्टाचार नहीं है, बल्कि विशेष रूप से छंटनी है; फ़ाइल आकार का सत्यापन करना पर्याप्त है (जब तक कि लक्ष्य फ़ाइल का पुराना संस्करण पहले से ही नहीं था: यदि scp को बहुत पहले बाधित किया गया था, तो पुराना संस्करण अभी भी मौजूद हो सकता है)। यहां चेकसम को सत्यापित करना समय की बर्बादी है।
गिल्स एसओ- बुराई को रोकना '

मेला। मैंने अपना उत्तर अपडेट कर दिया।
मणि एम

आपने मूलभूत दोष को ठीक नहीं किया है। चेकिंग scpरिटर्न कोड पर्याप्त है, और हैश की जाँच करना बेकार है।
गिल्स एसओ- बुराई को रोकना '

1
भले ही scpरिटर्न 0 हो, यह गारंटी नहीं देता है कि फ़ाइल सिस्टम ने चीजों को गड़बड़ नहीं किया है, इसलिए संवेदनशील डेटा की अखंडता की जांच करने के लिए हैश की जांच करना अभी भी उपयोगी है अगर कोई उपयोग scpकरना चाहता है rsync
मणि एम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.