क्या सीडी / डीवीडी की नकल करने के लिए बिल्ली, डीडी, पीवी या किसी अन्य प्रक्रिया का उपयोग करना बेहतर है?


22

पृष्ठभूमि

मैं ड्राइव में उनकी आवश्यकता के बिना बाद में उपयोग करने के लिए कुछ डेटा सीडी / डीवीडी को आईएसओ फाइलों में कॉपी कर रहा हूं।

मैं प्रक्रियाओं के लिए नेट देख रहा हूं और मुझे बहुत कुछ मिला है:

  • catकिसी माध्यम को कॉपी करने के लिए उपयोग : http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.html

    cat /dev/sr0 > image.iso
    
  • ddऐसा करने का उपयोग (जाहिरा तौर पर सबसे अधिक इस्तेमाल किया जाने वाला): http://www.linuxjournal.com/content/archiving-cds-iso-commandline

    dd if=/dev/cdrom bs=blocksize count=count of=/path/to/isoimage.iso
    
  • pvइसे पूरा करने के लिए बस का उपयोग करें: man pvअधिक जानकारी के लिए देखें , हालांकि यहां इसका एक अंश है:

    Taking an image of a disk, skipping errors:
          pv -EE /dev/sda > disk-image.img
    
    Writing an image back to a disk:
          pv disk-image.img > /dev/sda
    
    Zeroing a disk:
          pv < /dev/zero > /dev/sda
    

मुझे नहीं पता कि उनमें से सभी समान होने चाहिए, हालांकि मैंने उनमें से कुछ का परीक्षण किया ( md5sumउपकरण का उपयोग करके ) और, कम से कम, ddऔर बराबर नहींpv हैं । यहां प्रत्येक प्रक्रिया का उपयोग करके ड्राइव और जेनरेट की गई दोनों फाइलें हैं:md5sum

dd प्रक्रिया का md5: 71b676875b0194495060b38f35237c3c

pv प्रक्रिया की md5: f3524d81fdeeef962b01e1d86e6acc04

EDIT: वह आउटपुट दिए गए आउटपुट की तुलना में किसी अन्य सीडी से था। वास्तव में, मुझे एहसास हुआ कि कुछ दिलचस्प तथ्य हैं जो मैं एक उत्तर के रूप में प्रदान करता हूं।

वास्तव में, प्रत्येक फ़ाइल का आकार एक दूसरे से तुलना करने में भिन्न होता है

तो, वहाँ एक सीडी / डीवीडी कॉपी करने के लिए एक सबसे अच्छी प्रक्रिया है या मैं सिर्फ गलत तरीके से कमांड का उपयोग कर रहा हूं?


स्थिति के बारे में अधिक जानकारी

अब तक मैं जिन प्रक्रियाओं का उपयोग कर रहा हूं, उनके परीक्षण के मामले में अधिक जानकारी यहां दी गई है:

isoinfo -d i /dev/sr0 आउटपुट: https://gist.github.com/JBFWP286/7f50f069dc5d1593ba62#file-isoinfo-output-19-aug-2015

ddमीडिया को कॉपी करने के लिए, आउटपुट चेकसम और फ़ाइल जानकारी के साथ आउटपुट: https://gist.github.com/JBFWP286/75decda0a67605590d32#file-dd-output-with-md5-and-sha256-19-aug-2015

pvमीडिया को कॉपी करने के लिए, आउटपुट चेकसम और फ़ाइल जानकारी के साथ आउटपुट: https://gist.github.com/JBFWP286/700a13fe0a2f06ce5e7a#file-pv-output-with-md5-and-sha256-19-aug-2015

किसी भी तरह की सहायता को आभार समझेंगे!

linux  dd  cat  disk-image  pv 

फ़ाइल आकार समान हैं? परिणाम cmp file1 file2? क्या आपने ddगलत count=(या वास्तव में किसी भी गिनती का उपयोग किया है जो कि पूरी चीज नहीं चाहते हैं?)। Dmesg में त्रुटियाँ पढ़ें?
फ्रॉस्टचुट्ज़

2
यह बिना कहे चला जाता है कि विभिन्न आकारों की फाइलें हैं (99.9999999999 +% संभावना के साथ) अलग-अलग चेकसम हैं। जब तक आप परीक्षण कर चुके होते हैं, तब तक यह अच्छा होगा यदि आप सभी परिणामों को पोस्ट करेंगे, (1) सटीक ddकमांड को शामिल करने के लिए जो आपने उपयोग किया है (क्या ब्लॉक करें? क्या गणना करें?), (2) आकार और चेकसम। सभी आउटपुट, और (3) किसी भी स्वतंत्र जानकारी जो आपके पास स्रोत ऑप्टिकल डिस्क पर डेटा की मात्रा के बारे में है। ... ... ... ... ... ... पुनश्च तुम क्यों प्रयोग कर रहे हैं count=पर dd? आप संपूर्ण डिस्क छवि की प्रतिलिपि बनाना चाहते हैं, है न?  count=कहते हैं, "इसे कई कॉपी करें और फिर बंद करें"।
स्कॉट

@Scott इस पृष्ठ में linuxjournal.com/content/archiving-cds-iso-commandline लेखक का कहना है कि किसी को isoinfo -d -i /dev/cdromगिनती संख्या जानने और उसका उपयोग करने के लिए उपयोग करना चाहिए - वास्तव में, वह कहता है कि किसी को बस उपयोग नहीं करना चाहिए dd। "किसी भी मामले में, यदि आप उस सीडी की एक उचित आईएसओ छवि चाहते हैं, तो आपको अपनी छवि बनाने से पहले ब्लॉकचेन और ब्लॉकचेन सही चाहिए।"

@frostschutz पहले मामले में आकार समान नहीं थे, लेकिन आश्चर्यजनक रूप से, मैंने फिर से कोशिश की और अलग परिणाम प्राप्त किए। अधिक विवरण के लिए मैंने जो उत्तर दिया है, उसे देखें।

जवाबों:


27

निम्नलिखित सभी कमांड समतुल्य हैं। वे सीडी के बाइट्स को पढ़ते हैं /dev/sr0और उन्हें एक फाइल पर लिखते हैं image.iso

cat /dev/sr0 >image.iso
cat </dev/sr0 >image.iso
tee </dev/sr0 >image.iso
dd </dev/sr0 >image.iso
dd if=/dev/cdrom of=image.iso
pv </dev/sr0 >image.iso
cp /dev/sr0 image.iso
tail -c +1 /dev/sr0 >image.iso

आप एक का उपयोग दूसरे पर क्यों करेंगे?

  • सादगी। उदाहरण के लिए, यदि आप पहले से ही जानते हैं catया cp, आपको अभी तक एक और कमांड सीखने की आवश्यकता नहीं है।

  • मजबूती। यह एक सादगी का एक प्रकार है। कितना जोखिम है कि कमांड को बदलने से यह क्या होता है? आइए देखते हैं कुछ उदाहरण:

    • पुनर्निर्देशन के साथ कुछ भी: आप गलती से पुनर्निर्देशन को गलत तरीके से डाल सकते हैं, या इसे भूल सकते हैं। चूंकि गंतव्य एक गैर-मौजूदा फ़ाइल माना जाता है, इसलिए set -o noclobberयह सुनिश्चित करना चाहिए कि आप कुछ भी अधिलेखित न करें; हालाँकि, यदि आप गलती से लिखते हैं >/dev/sda(सीडी के लिए, जो केवल पढ़ने के लिए है, तो कोई जोखिम नहीं है, निश्चित रूप से)। यह cat /dev/sr0 >image.isoविकल्प के रूप में tee </dev/sr0 >image.iso( एक हानिकारक तरीके से गलत होने के लिए कठिन) के पक्ष में बोलता है जैसे (यदि आप पुनर्निर्देशन को उल्टा करते हैं या इनपुट को भूल जाते हैं, teeतो लिखेंगे /dev/sr0)।
    • cat: आप गलती से दो फाइलों को समेट सकते हैं। इससे डेटा आसानी से उद्धार योग्य हो जाता है।
    • dd: iऔर oकीबोर्ड पर करीब हैं, और कुछ हद तक असामान्य है। के बराबर नहीं है noclobber, of=खुशी से कुछ भी लिख देगा। पुनर्निर्देशन सिंटैक्स कम त्रुटि-प्रवण है।
    • cp: यदि आप गलती से स्रोत और लक्ष्य को स्वैप करते हैं, तो डिवाइस को ओवरराइट किया जाएगा (फिर से, एक गैर-रीड-ओनली डिवाइस मानकर)। यदि cpकुछ विकल्पों जैसे कि -Rया -aजिसे कुछ लोग एक उपनाम के माध्यम से जोड़ते हैं, के साथ लागू किया जाता है , तो यह डिवाइस की सामग्री के बजाय डिवाइस नोड की नकल करेगा।
  • अतिरिक्त कार्यक्षमता। यहां एक उपकरण जिसमें उपयोगी अतिरिक्त कार्यक्षमता है pv, अपने शक्तिशाली रिपोर्टिंग विकल्पों के साथ है।
    लेकिन यहां आप यह जांच सकते हैं कि आउटपुट फ़ाइल के आकार को वैसे भी कितना कॉपी किया गया है।

  • प्रदर्शन। यह एक I / O- बाउंड प्रक्रिया है; प्रदर्शन में मुख्य प्रभाव बफर आकार है: उपकरण स्रोत से एक कूबड़ पढ़ता है, गंतव्य को ठोक लिखता है, दोहराता है। यदि चंक बहुत छोटा है, तो कंप्यूटर अपना समय कार्यों के बीच स्विच करने में बिताता है। यदि हिस्सा बहुत बड़ा है, तो पढ़ने और लिखने के संचालन को समानांतर नहीं किया जा सकता है। एक पीसी पर इष्टतम चंक आकार आमतौर पर कुछ मेगाबाइट के आसपास होता है, लेकिन यह स्पष्ट रूप से ओएस पर, हार्डवेयर पर और कंप्यूटर क्या कर रहा है पर बहुत निर्भर है। मैंने कुछ समय पहले लिनक्स पर हार्ड डिस्क की हार्ड डिस्क के लिए बेंचमार्क बनाया , जिसमें पता चला कि एक ही डिस्क के भीतर कॉपी के लिए, dd बड़े बफर आकार के साथ फायदा है, लेकिन क्रॉस-डिस्क कॉपी के लिए, catकिसी भी ddबफर आकार में जीता ।

ऐसे कुछ कारण हैं जिनके बारे में आप ddअक्सर उल्लेख करते हैं। प्रदर्शन के अलावा, वे विशेष रूप से अच्छे कारण नहीं हैं।

  • बहुत पुरानी यूनिक्स प्रणालियों में, कुछ टेक्स्ट प्रोसेसिंग टूल बाइनरी डेटा के साथ सामना नहीं कर सकते थे (वे आंतरिक रूप से अशक्त-समाप्त स्ट्रिंग्स का उपयोग करते थे, इसलिए उन्हें अशक्त बाइट्स की समस्या थी, कुछ उपकरण यह भी मानते थे कि वर्ण केवल 7 बिट्स का उपयोग करते हैं और नहीं किया है। प्रक्रिया 8-बिट चरित्र ठीक से सेट)। मैं नहीं कर रहा हूँ यकीन है कि अगर यह कभी के साथ एक समस्या थी cat(यह इस तरह के रूप में अधिक लाइन उन्मुख उपकरणों के साथ था head, sed, आदि), लेकिन लोगों को पाठ प्रसंस्करण के साथ अपने सहयोग की वजह से बाइनरी डेटा पर से बचने के लिए जाती थी। यह लिनक्स, OSX, * BSD, या कुछ भी है कि POSIX- आज्ञाकारी जैसे आधुनिक सिस्टम पर कोई समस्या नहीं है।
  • एक प्रकार का मिथक है जो ddअन्य उपकरणों की तुलना में कुछ हद तक "निम्न स्तर" है जैसे कि catउपकरणों को सीधे एक्सेस करता है। यह पूरी तरह से गलत है: ddऔर catऔर teeअन्य सभी अपने इनपुट से बाइट्स पढ़ते हैं और अपने आउटपुट को बाइट्स लिखते हैं। असली जादू में है /dev/sr0
  • ddएक असामान्य कमांड लाइन सिंटैक्स है, इसलिए यह बताते हुए कि यह कैसे काम करता है, यह सिर्फ कुछ लिखने के बारे में समझाकर चमकने का अवसर देता है cat /dev/sr0
  • dd बड़े बफर आकार के साथ उपयोग करने से बेहतर प्रदर्शन हो सकता है, लेकिन यह हमेशा ऐसा नहीं होता है ( लिनक्स पर कुछ बेंचमार्क देखें )।

इसके साथ एक बड़ा जोखिम यहdd है कि यह चुपचाप कुछ डेटा को छोड़ सकता है । मुझे लगता ddहै कि जब तक सुरक्षित है skipया countपारित नहीं हुआ है, लेकिन मुझे यकीन नहीं है कि सभी प्लेटफार्मों पर ऐसा है। लेकिन प्रदर्शन के अलावा इसका कोई फायदा नहीं है।

तो pvअगर आप इसकी फैंसी प्रगति रिपोर्ट चाहते हैं, या catयदि आप नहीं करते हैं तो बस उपयोग करें ।


इस प्रतिक्रिया के लिए आपके समय के लिए बहुत बहुत धन्यवाद! =) अब मैं उनके बीच के अंतर को समझता हूं। बस एक प्रश्न: क्या pv < /dev/sr0 > image.isoऐसा ही है pv /dev/sr0 > image.iso(उत्तरार्द्ध pv के मैनुअल पृष्ठों में पाया जाता है)?

1
@ JBFWP286 वे एक ही चीज़ की नकल करते हैं, लेकिन pv /dev/sr0 …प्रगति रिपोर्ट में फ़ाइल का नाम शामिल pv </dev/sr0नहीं कर सकते हैं।
गिल्स एसओ- बुराई को रोकें '19

एक और नोट: cpको अलियास किया जा सकता है cp -R, जो (कम से कम जीएनयू सीपीपी, रूट के रूप में) इसकी सामग्री के बजाय डिवाइस नोडcp को कॉपी करने का कारण बनता है ।
मार्सेल

2
@ JBFWP286 एक डिवाइस नोड एक फाइल है जिसके माध्यम से आप कर्नेल ड्राइवरों द्वारा प्रदान किए गए हार्डवेयर या अन्य विशेष सुविधाओं का उपयोग करते हैं। लगभग सभी फाइलें /devडिवाइस नोड्स हैं। उदाहरण के लिए cp -R /dev/sr0 image.iso, image.isoएक ऐसी फ़ाइल बनायेगा जिसके माध्यम से सीडी ड्राइव तक पहुँचा जा सकता है, जैसे /dev/sr0कि सीडी की सामग्री की एक नियमित फ़ाइल की बजाय जो आपको मिलती है cp /dev/sr0 image.iso
गिल्स एसओ- बुराई को रोकना '

1
@ हाशिम मैं यह निष्कर्ष नहीं निकालता कि इसमें बेहतर प्रदर्शन है। मैं उल्लेख करता हूं कि इसका प्रदर्शन कभी-कभी बेहतर होता है । मैंने अपने द्वारा बनाए गए बेंचमार्क से जुड़ा हुआ है - सर्वश्रेष्ठ मामले में ddहराया catलेकिन केवल मामूली अंतर से।
गिल्स एसओ- बुराई को रोकें '

4

इस मामले में दिलचस्प तथ्य हैं, विशेष रूप से ये हैं:

  • मैंने अभी-अभी प्राप्त किए गए आउटपुट की जांच की है और प्रदान की है (मैंने इस बार एक और डिस्क का उपयोग किया था, बिल्कुल, Xubuntu 15.04 x64 सेटअप डिस्क), और दोनों प्रक्रियाओं के साथ ( ddऔर pv) चेकसम समान हैं
  • मेरे पास विचार था, ddप्रक्रिया करने के बाद , ड्राइव खोलें और उसी डिस्क के साथ बंद करें, और फिर pvप्रक्रिया के साथ परीक्षण समाप्त करें । ऐसा करते हुए, मुझे दोनों प्रक्रियाओं के साथ समान प्रतियां मिलीं।
  • मुझे लगता है कि मुझे पहली बार अलग-अलग चेकसम प्राप्त हुए, क्योंकि किसी कारण से, सीडी / डीवीडी ड्राइव से एकत्र किए गए डेटा को कुछ समय के लिए अन्य प्रयोजनों के लिए "रिकॉर्ड किया गया" लगता है (जैसे कैश) - इस प्रकार, चेकसम जैसे अन्य ऑपरेशन थे हस्तांतरण की तुलना में बहुत तेज है। कृपया टिप्पणी करें यदि आप इसके लिए सटीक कारण जानते हैं।
  • एक और तथ्य यह है कि डिस्क के अंत में ddw / o count=Xपैरामीटर सही तरीके से बंद हो जाता है और उसी डिस्क-छवि को देता है जैसे कि pv(चेकसम समान हैं), इसलिए मेरे लिए ddw / o पैरामीटर या बस का उपयोग करना बेहतर है pv

तो, अभी के लिए, यह लगता है pvऔर ddएक ही परिणाम के साथ एक सीडी / डीवीडी कॉपी को पूरा कर सकता है।

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