Dd डेटा कॉपी करने के लिए उपयुक्त कब है? (या, जब पढ़े जाते हैं () और लिखते हैं () आंशिक) का उपयोग करते समय एक महत्वपूर्ण चेतावनी बताते हैं count
: dd
आंशिक ब्लॉकों की प्रतिलिपि बना सकते हैं, इसलिए जब दिया जाता है तो count
यह दिए गए ब्लॉकों की संख्या के बाद बंद हो जाएगा, भले ही कुछ ब्लॉक अपूर्ण थे। इसलिए bs * count
, जब तक आप निर्दिष्ट नहीं करते हैं, तब तक आप कम से कम बाइट्स की प्रतिलिपि बना सकते हैं iflag=fullblock
।
Dd के लिए डिफ़ॉल्ट ब्लॉक का आकार 512 बाइट्स है। count
एक सीमा है; जैसा कि आपके सवाल का संकेत है कि यह परिमित आकार के एक उपकरण की नकल करते समय आवश्यक नहीं है, और वास्तव में एक उपकरण के केवल एक हिस्से की नकल करना है।
मुझे लगता है कि यहां पर विचार करने के दो पहलू हैं: प्रदर्शन और डेटा रिकवरी।
जहां तक प्रदर्शन का सवाल है, आप आदर्श रूप से ब्लॉक आकार को कम से कम के बराबर करना चाहते हैं, और कई, अंतर्निहित भौतिक ब्लॉक आकार (इसलिए 2048 बाइट्स जब सीडी-रोम पढ़ते हैं)। वास्तव में आजकल आप अंतर्निहित बड़े आकार को निर्दिष्ट कर सकते हैं ताकि अंतर्निहित कैशिंग सिस्टम आपके लिए चीजों को बफर करने का मौका दे सके। लेकिन ब्लॉक साइज बढ़ाने का मतलब dd
है कि ज्यादा मेमोरी का इस्तेमाल करना, और अगर पैकेट के विखंडन के कारण आप नेटवर्क पर कॉपी कर रहे हैं तो यह काउंटर-प्रोडक्टिव हो सकता है।
जहाँ तक डेटा रिकवरी का संबंध है, यदि आप छोटे ब्लॉक आकारों का उपयोग करते हैं, तो आप एक असफल हार्ड डिस्क से अधिक डेटा प्राप्त कर सकते हैं; यह वही कार्यक्रम है जो dd-rescue
स्वचालित रूप से करते हैं: वे शुरू में बड़े ब्लॉक पढ़ते हैं, लेकिन यदि कोई ब्लॉक विफल हो जाता है तो वे इसे छोटे ब्लॉक आकार के साथ फिर से पढ़ते हैं। dd
ऐसा नहीं होगा, यह पूरे ब्लॉक को विफल कर देगा।
dd bs=4m iflag=fullblock
बनाम का उपयोग करते हुएdd bs=1111
और पूर्व में आपको दिए गए उच्च डेटा दरों को नोटिस करेगा। ऐसा इसलिए है क्योंकि पूर्व एसडी कार्ड पर प्राकृतिक ब्लॉक आकार के साथ संरेखित करता है, जबकि उत्तरार्द्ध को आंशिक भौतिक ब्लॉक लिखने के लिए एसडी नियंत्रक को बहुत अधिक पढ़ने, कॉपी करने और फिर से पढ़ने की आवश्यकता होती है। महत्व कोfullblock
कम करके नहीं आंका जाना चाहिए, वैसे, जैसे कि इसके बिना,bs
केवल एक अधिकतम और आंशिक रीड है, जिसके बाद लगातार मिसलिग्न्मेंट हो सकते हैं।