हालांकि पहली बार प्रस्तावित "चुनौती" मुश्किल लग सकता है, संभव नहीं है या ध्वनि भोले जैसा कि कुछ ने टिप्पणी की है, ऐसा नहीं है। Dd से बड़ी डिस्क से छोटी डिस्क पर उपयोग करने के पीछे मुख्य विचार पूरी तरह से ठीक है और डेटा को माइग्रेट करने के लिए लाभ है। बेशक, पर्याप्त खाली स्थान होना ताकि गंतव्य डिस्क पर कब्जा किए गए डेटा फिट हो।
यह विचार है कि प्रत्येक विभाजन को व्यक्तिगत रूप से dd'ing में सोचा जाए और शुरू में एक बार में पूरी डिस्क नहीं। और भी पूरा किया जा सकता है: जिस विभाजन (टुकड़े) को काट दिया जाएगा, उन्हें भी फाइल सिस्टम रि-साइजिंग टूल की थोड़ी मदद से सुरक्षित रूप से माइग्रेट किया जा सकता है। दरअसल, फाइलसिस्टम मैटाटाटा और एक्सटेंडेड फाइल एट्रिब्यूट्स को संरक्षित करने के लिए इस तरह का माइग्रेशन दिलचस्प होता है जिसे आसानी से cp, rsync, pax जैसे टूल्स से कॉपी नहीं किया जा सकता ... जो फाइल सिस्टम लेयर में काम करते हैं और डिवाइस लेयर को ब्लॉक नहीं करते हैं। Dd का उपयोग OS को फिर से स्थापित करने या SELinux के साथ समस्याओं से बचने के लिए FS को पुनः स्थापित करने की आवश्यकता को समाप्त करता है।
नीचे मैं समान कार्य पूरा करने के लिए आमतौर पर करता हूं:
1) सबसे पहले आपने प्रभावित विभाजन के अंदर फाइलसिस्टम (एस) को कम कर दिया है जिसे छोटा किया जाएगा। इसके लिए, resize2fs टूल का उपयोग करें (यह मानते हुए कि हम एक ext2 / ext3 / ext4 fs के बारे में बात कर रहे हैं - अन्य आधुनिक FSs में भी समान उद्देश्य के लिए रिसाइज़िंग टूल हैं)। ध्यान दें कि हालांकि - स्पष्ट कारणों के लिए - एक फाइल सिस्टम विभाजन से बड़ा नहीं हो सकता है जो उसके भीतर रहता है, यह सुरक्षित रूप से छोटा हो सकता है। यहाँ सुरक्षा चाल "जरूरत से ज्यादा" को कम करना है। उदाहरण के लिए: कल्पना करें कि आपके पास 1TB का एक फाइल सिस्टम है जिसे आप 500 गिग ड्राइव पर माइग्रेट करना चाहते हैं। इस मामले में, मैं सुझाव देता हूं कि एफएस को कम करें, मान लें कि 450 गिग (आपके पास इसके लिए पर्याप्त खाली जगह है, ज़ाहिर है, अर्थात, इस फाइल सिस्टम में वर्तमान में कब्जा किया गया स्थान 450 गिग से अधिक नहीं हो सकता है)। डेटा माइग्रेशन के बाद स्पष्ट रूप से बर्बाद किए गए 50 गीगा स्थान को ठीक किया जाएगा।
2) अपने अंतरिक्ष बाधाओं पर विचार करने के लिए उपयुक्त ज्यामिति के साथ गंतव्य डिस्क का विभाजन;
3) डेटा को पार्टीशन डिवाइस (एस) का उपयोग करके और डिड डिवाइस (यानी, का उपयोग dd if=/dev/sda# of=/dev/sdb#
करने के बजाय प्रत्येक विभाजन के लिए उपयोग करें if=/dev/sda of=/dev/sdb
) नहीं। नोट: यहाँ एसडीए और एसडीबी सिर्फ उदाहरण हैं; महत्वपूर्ण नोट: जब एक बड़े विभाजन डिवाइस से dd'ing, dd ब्लॉक डिवाइस के अंत तक पोस्ट लिखने के प्रयास के बारे में शिकायत करेगा, तो यह ठीक है क्योंकि फाइल सिस्टम डेटा को उस बिंदु तक पहुंचने से पहले पूरी तरह से कॉपी किया गया होगा। इस तरह के त्रुटि संदेश से बचने के लिए आप सिकुड़ते फाइलसिस्टम के आकार से मिलान करने के लिए कॉपी का उपयोग bs=
और count=
मापदंडों को निर्दिष्ट कर सकते हैं , लेकिन इसके लिए कुछ (सरल) गणना की आवश्यकता होगी, लेकिन यदि गलत तरीके से किया गया है तो यह आपके डेटा को जोखिम में डाल सकता है।
4) डेटा dd'ing के बाद, गंतव्य विभाजन के भीतर संबंधित फाइल सिस्टम (ओं) का आकार बदलकर फिर से resize2fs का उपयोग करें। इस बार नए फाइलसिस्टम का आकार निर्दिष्ट न करें। जब एक आकार विनिर्देश के बिना चलाया जाता है, तो resize2fs फाइल सिस्टम को बढ़ाता है ताकि यह अधिकतम अनुमत आकार पर कब्जा कर ले, इसलिए, इस मामले में, 450 गिग फाइल सिस्टम पूरे 500 गिग विभाजन पर कब्जा करने के लिए फिर से बढ़ेगा और कोई भी बाइट बर्बाद नहीं होगा। ("आवश्यकता से अधिक कम करें" दृष्टिकोण आपको गलती से आकारों को गलत तरीके से निर्दिष्ट करने और आपके डेटा को जोखिम में डालने से बचाता है। ध्यान दें कि GB बनाम GiB इकाइयां मुश्किल हो सकती हैं)।
अधिक जटिल कार्यों के लिए ध्यान दें: यदि आपके पास एक बूट प्रबंधक है जिसे आप साथ में कॉपी करने का इरादा रखते हैं, जो कि मामला होने की संभावना है, तो आप विभाजन उपकरणों के बजाय डिस्क डिवाइस का उपयोग करके डिस्क के पहले कुछ KB को dd कर सकते हैं (जैसे dd if=/dev/sda of=/dev/sdb bs=4096 count=5
), और फिर ज्यामिति को / dev / sdb में पुन: कॉन्फ़िगर करें (जिसमें अस्थायी रूप से नई ड्राइव के लिए एक अमान्य ज्यामिति होगी लेकिन एक अक्षुण्ण और वैध बूट प्रबंधक)। अंत में विभाजन उपकरणों का उपयोग करके आगे बढ़ें जैसा कि एक समय में विभाजन को dd'ing के लिए ऊपर वर्णित किया गया है। मैंने कई बार इस तरह के ऑपरेशन किए। काफी हाल ही में, मैंने अपने मैकमिनी 6,2 में एक छोटे एसडीडी में मैकओएसएक्स और लिनक्स इंस्टॉलेशन के मिश्रण वाले एचडीडी से अपग्रेड करते समय एक जटिल प्रवासन सफलतापूर्वक किया। इस मामले में, मुझे एक बाहरी ड्राइव से लिनक्स को बूट करना था, बूटमैनर को डीडी, नए डिस्क में जीपीटी को ठीक करने के लिए gdisk भागना और अंत में बस सिकुड़ी हुई फाइलस्टीज़ वाले प्रत्येक विभाजन को dd'ed करना था। (ध्यान दें कि GPT विभाजन योजना विभाजन तालिका की दो प्रतियां रखती है, एक शुरुआत में और दूसरी डिस्क के अंत में। gdisk बहुत शिकायत करता है क्योंकि यह PT की दूसरी प्रति नहीं खोज सकता है और क्योंकि विभाजन डिस्क के आकार से अधिक है, लेकिन यह सही ढंग से PT प्रतिलिपि समस्या को ठीक करता है जब आप डिस्क ज्यामिति को फिर से परिभाषित करते हैं)। यह एक अधिक जटिल मामला था, लेकिन ध्यान देने योग्य है क्योंकि यह दर्शाता है कि इस तरह का ऑपरेशन भी पूरी तरह से संभव है।
सौभाग्य! ... और इस तरह के ऑपरेशन से पहले सभी महत्वपूर्ण डेटा का बैकअप लेना सबसे महत्वपूर्ण है। एक गलती और आप निश्चित रूप से अपरिवर्तनीय रूप से आपके डेटा को नुकसान पहुंचा सकते हैं।
और बस के मामले में मैंने पर्याप्त जोर नहीं दिया: प्रवास से पहले अपने डेटा का बैकअप लें! :)
dd
इष्टतम ब्लॉक आकार की गणना करना उपयोगी है