क्या rsync दो स्थानीय ड्राइव के बीच कॉपी की गई फ़ाइलों को सत्यापित करता है?


65

मैं एक स्थानीय ड्राइव से दूसरे स्थान पर बड़ी संख्या में फ़ाइलों की एक नई नई प्रतिलिपि बनाना चाहता हूं।

मैंने पढ़ा है कि rsync एक नेटवर्क पर रिमोट मशीन पर भेजते समय फाइलों की एक चेकसम तुलना करता है।

  1. दो स्थानीय ड्राइव के बीच फ़ाइलों की प्रतिलिपि बनाते समय rsync तुलना करेगा?

  2. यदि यह एक सत्यापन करता है - क्या यह एक सुरक्षित शर्त है? या फिर बाइट तुलना करना बेहतर है?

जवाबों:


77

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

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

सत्यापन के लिए, प्रोटोकॉल 30 और उसके बाद (पहले 3.0.0 में समर्थित) के लिए, rsync MD5 का उपयोग करता है । पुराने प्रोटोकॉल के लिए, प्रयुक्त चेकसम MD4 है

लंबे समय तक सुरक्षित क्रिप्टोग्राफिक हैश के लिए अप्रचलित माना जाता है, एमडी 5 और एमडी 4 फ़ाइल भ्रष्टाचार की जांच के लिए पर्याप्त हैं।

स्रोत: आदमी पृष्ठ और सत्यापित करने के लिए rsync स्रोत कोड से नेत्रगोलक।


3
मुझे हर किसी का बुलबुला फूटने से नफरत है लेकिन rsync केवल जाँच सत्यापन करता है अगर -c झंडा जोड़ा जाता है!

27
@clint नहीं, जवाब सही है। -cध्वज के मैन पेज की व्याख्या से : "ध्यान दें कि rsync हमेशा पुष्टि करता है कि प्रत्येक स्थानांतरित की गई फ़ाइल को एक पूर्ण-फ़ाइल चेकसम को चेक करके सही ढंग से पुनर्निर्माण किया गया था जो फ़ाइल के रूप में उत्पन्न होता है, लेकिन वह स्वचालित रूप से ट्रांसफर होता है सत्यापन का इस विकल्प के स्थानांतरण से पहले कोई लेना-देना नहीं है "क्या इस फ़ाइल को अपडेट करने की आवश्यकता है?"
माइकल Mrozek

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

7
डाउन-वोटिंग क्योंकि मुझे यह तथ्य पसंद नहीं है कि यह उत्तर अच्छी तरह से लिखित और तकनीकी रूप से सही है और एक ही समय में इतना अधिक विषय है कि यह पाठकों को भ्रमित करता है। समस्या यह है कि इस सवाल का जवाब क्या के दौरान होता है पर काफी विस्तार में चला जाता है हस्तांतरण जबकि प्रश्नकर्ता विशेष रूप से कहा गया है कि वह परवाह करता है स्थानीय प्रतियां और नहीं नेटवर्क स्थानान्तरण। मुझे पूरा यकीन है कि काइल जोन्स किसी को गुमराह नहीं करना चाहता था लेकिन यह जवाब (IMHO) देता है।
ndemou

4
काइल मुझे नहीं लगता कि आप जवाब देना गलत है। मैंने पहले ही नोट किया कि यह "विस्तृत रूप से लिखित और तकनीकी रूप से सही है", लेकिन इसके लिए पाठक को अनावश्यक रूप से केंद्रित और सावधान रहने की आवश्यकता है। क्यों 117 शब्दों के बाद आपके उत्तर के माध्यम से डिस्क डेटा के सत्यापन की कमी को कम किया जा रहा है, जो बार-बार एक अन्य अप्रासंगिक सत्यापन प्रक्रिया का वर्णन करता है? वैसे भी इस चर्चा में अपने समय और रुचि के लिए धन्यवाद। मैं ईमानदारी से इसकी सराहना करता हूं।
ndemou

40

rsyncस्थानीय फ़ाइल प्रतियों के लिए पोस्ट-कॉपी सत्यापन नहीं करता है । आप यह सत्यापित कर सकते हैं कि यह rsyncकिसी बड़ी फ़ाइल को धीमी (यानी USB) ड्राइव पर कॉपी करने के लिए उपयोग नहीं करता है , और फिर उसी फ़ाइल को कॉपी करने के साथ cp:

time rsync bigfile /mnt/usb/bigfile

time cp bigfile /mnt/usb/bigfile

दोनों कमांड एक ही समय के बारे में लेते हैं, इसलिए rsyncसंभवतः चेकसम नहीं कर सकते हैं - क्योंकि इसमें धीमी डिस्क से गंतव्य फ़ाइल को फिर से पढ़ना शामिल है।

manपेज को इस बारे में दुर्भाग्य से भ्रामक है। मैंने इसे सत्यापित भी कर दिया है- straceकॉपी के पूरा होने के बाद, गंतव्य फ़ाइल पर rsyncकोई read()कॉल जारी नहीं करता है, इसलिए इसे चेक नहीं किया जा सकता है। एक और आप इसे सत्यापित कर सकते हैं जैसे कि iotopआप कुछ rsyncकर रहे हैं : आप पढ़ते और लिखते हुए एक साथ देखते हैं (स्रोत से गंतव्य तक प्रतिलिपि), फिर यह बाहर निकलता है। यदि यह सत्यनिष्ठा की पुष्टि कर रहा है, तो केवल पढ़ने के लिए चरण होगा।


1
"मैन पेज दुर्भाग्य से इस बारे में भ्रामक है। मैंने इसे स्ट्रेस के साथ सत्यापित भी किया" क्या आपने रिमोट, rsync प्रक्रिया या स्थानीय एक को स्ट्रेस किया है? वहाँ दो हैं ... एक गंतव्य पर चलता है, तब भी जब आप ssh का उपयोग करते हैं।
user129070

8
किसी भी कॉपी, स्थानीय या रिमोट के लिए पोस्ट-कॉपी सत्यापन नहीं है। rsync -cयदि आप इसे जांचने के लिए बाध्य करना चाहते हैं तो आप फिर से चलाते हैं।
psusi

सत्यापन आने वाली धारा पर होता है। यह डिस्क से वापस पढ़ने के लिए आवश्यक नहीं है अगर फाइल सिस्टम ने पुष्टि की है कि यह लिखा गया है।
ऑरेंजडॉग

17

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


1
यह स्वीकृत उत्तर के विपरीत लगता है ...
djule5

2
@ djule5 किस तरीके से? स्वीकार किए जाते हैं जवाब ज्यादातर के बारे में कैसे rsync चेकों हो रहा है स्थानांतरित कर फ़ाइलें, लेकिन सवाल है, और मेरा उत्तर, के बारे में कर रहे हैं स्थानीय प्रतियां।
गाइल्स

3
ठीक है, इस संदर्भ में अच्छी तरह से मैं सहमत हूं कि यह अधिक समझ में आता है। इसलिए "चेकसम तुलना का बिंदु यह सत्यापित करने के लिए नहीं है कि प्रतिलिपि सफल थी" केवल स्थानीय प्रतियों के लिए सही है ; और "चेकसम का उपयोग हमेशा भेजने और प्राप्त करने वाली प्रक्रियाओं के बीच स्थानांतरित किए गए डेटा पर किया जाता है" केवल हस्तांतरित प्रतियों के लिए सही है । मैं प्रश्न के संबंध में स्वीकृत उत्तर को भ्रामक मानता हूं और मानता हूं कि आपका उत्तर स्वीकृत (सिर्फ मेरे 2 सेंट) होना चाहिए।
djule5

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

1
@ जब भी आप उस बिंदु को नहीं समझेंगे, जिसे आप बनाने की कोशिश कर रहे हैं। मुझे संदेह है कि आपने कुछ गलत किया है। नेटवर्क ड्राइवर केवल तभी खेलते हैं जब कोई नेटवर्क कॉपी हो। Rsync कोई भी कॉपी करने से पहले एक चेकसम तुलना करता है , ताकि यह तय हो सके कि कॉपी करना है या नहीं। Rsync कॉपी करने के बाद किसी भी चेकसम तुलना नहीं करता है (क्योंकि यह व्यर्थ होगा: यह जानता है कि यह क्या कॉपी किया गया है)।
गाइल्स

4

त्वरित और गंदे जवाब, सीधे सवालों के घेरे में।

प्रश्न: rsyncदो स्थानीय ड्राइव के बीच फ़ाइलों की प्रतिलिपि बनाते समय तुलना करेंगे ? ए: यह पता लगाने के लिए कि क्या कॉपी करना है की तुलना करेंगे।

प्रश्न: यदि यह सत्यापन करता है - क्या यह एक सुरक्षित शर्त है? या फिर बाइट तुलना करना बेहतर है? ए: फ़ाइल के एमडी 5 चेकसम के पीछे गणित जितना सुरक्षित है। आप टूल को सीखने और उस पर भरोसा करने के लिए सरल प्रयोग करने की कोशिश कर सकते हैं।

लंबे उत्तर: मुझे लगता है, आप rsyncफ़ाइलों की प्रतिलिपि बनाने के बाद फ़ाइल तुलना (बिट द्वारा या चेकसम द्वारा) करना चाहते थे । यदि आप डेटा अखंडता को महत्व देने वाले कुछ में से एक हैं, तो आपको नीचे उपयोगी मिल सकता है:

rsync -avh [source] [destination] && rsync -avhc [source] [destination] 

rsyncपहली बार चलने पर कोड फ़ाइल फ़ोल्डर के ऊपर और यदि समस्या के बिना पूरा हो गया है, तो पूरी rsyncफ़ाइल के हैश का उपयोग करके समान फ़ाइल नाम की तुलना करते हुए तुरंत फिर से चलेगा ।


1

डुप्लिकेट की अखंडता को सत्यापित करने के लिए rsync का उपयोग करना

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

यदि लिनक्स को पुनरारंभ करना भी नहीं है, तो आपको कम से कम कैश ( * ) को छोड़ देना चाहिए :

sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

फिर दोनों पेड़ों को फिर से पढ़ने और उनके चेकसम की तुलना करने के लिए:

rsync --dry-run --checksum --itemize-changes --archive SRC DEST

आधुनिक rsync चेकसम MD5 का उपयोग करता है, जो 128 बिट्स है। व्यक्तिगत फ़ाइल में किसी त्रुटि का पता लगाने में इस असफलता की संभावना खगोलीय रूप से कम (कुछ चर्चा यहां ) है, लेकिन असंभव नहीं है।



सौभाग्य सही ट्रेलिंग स्लैश हो रही है।
नोबार

कोई ख़बर न होना अच्छी ख़बर है।
नोबार

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