Dd, netcat और ssh सुरंग के साथ डिस्क क्लोनिंग कैसे सेट करें?


26

मैं ddलिनक्स पर ssh एन्क्रिप्टेड चैनल के माध्यम से होस्ट ए से बी तक नेटकाट के साथ थोक (रीइमेज डिस्क का उपयोग करके ) में सामान की प्रतिलिपि बनाना चाहूंगा ।

मुझे दोनों सिरों पर क्या कमांड टाइप करनी चाहिए?

जवाबों:


28

लक्ष्य से sshd को चलाने के लिए स्रोत से नकल करना:

  • dd if=/dev/sda | gzip | ssh root@target 'gzip -d | dd of=/dev/sda'

जब स्रोत sshd_host के माध्यम से लक्ष्य के लिए प्रतिलिपि बनाई जा रही हो जब लक्ष्य sshd नहीं चल रहा हो।

  • लक्ष्य: nc -l -p 62222 | dd of=/dev/sda bs=$((16 * 1024 * 1024))
  • स्रोत: ssh -L 62222:target:62222 sshd_host &
  • स्रोत: dd if=/dev/sda | nc -w 3 localhost 62222

    dd - if = is the source, of = गंतव्य है, bs = ब्लॉक आकार है। विभिन्न ब्लॉक आकार प्रदर्शन में सुधार कर सकते हैं। 16 एक उचित रूप से उचित प्रारंभिक बिंदु है। तुम भी उपयोग कर सकते हैं संख्या = इंगित करने के लिए कितने ब्लॉक कॉपी करने के लिए।

    nc - -p बंदरगाह सेवाओं के लिए उपयोग करने के लिए इंगित करता है। -l का उपयोग सेवा शुरू करने के लिए किया जाता है। -कॉल करने से पहले पाइपलाइन में डेटा का इंतजार करने का समय निर्धारित करें।

    ssh - -एल रिमोट होस्ट पर सुरंग स्थापित करता है। तर्क का प्रारूप, है local_port:target_host:target_port। आपका स्थानीय कार्यक्रम (nc) local_port से जुड़ता है, यह कनेक्शन टनल और टारगेट_हॉट पर target_port से जुड़ा है।

परिभाषित विकल्प केवल इसके लिए उपयोग किए जाने वाले हैं। अधिक जानकारी के लिए मैन पेज देखें।

कुछ नोट:

  1. यदि आप कुछ भी कर रहे हैं, लेकिन एक लैन, मैं सुझाव है कि gzip या सेक के साथ datastream संपीड़ित करना होगा। Bzip2 भी काम करेगा, लेकिन इसमें CPU समय थोड़ा अधिक लगता है। पहले वाले के पास उस उपयोग का एक उदाहरण है।
  2. यह बेहतर है अगर स्रोत विभाजन माउंट नहीं है या केवल रीड-माउंटेड है। यदि नहीं, तो आपको गंतव्य छवि fsck करने की आवश्यकता होगी।
  3. जब तक मशीनों में से एक में netcat नहीं है, लेकिन ssh नहीं है, तब तक netcat की वास्तव में यहाँ आवश्यकता नहीं है। यह मामला ऐसा लगेगा:

source machine dd -> nc -> ssh -> ssh tunnel -> sshd server -> nc on target -> dd

  1. अगर स्रोत और लक्ष्य एक ही आकार के हों तो dd सबसे अच्छा काम करता है। नहीं तो लक्ष्य 2 का बड़ा होना चाहिए।
  2. यदि आप ext2 / 3 या xfs का उपयोग कर रहे हैं, तो डंप (या xfsdump) और पुनर्स्थापना एक बेहतर विकल्प हो सकता है। यह बूट सेक्टर को संभाल नहीं सकता है लेकिन यह तब काम करता है जब लक्ष्य और स्रोत अलग-अलग आकार के होते हैं।

4

यदि आप ssh के बिना netcat का उपयोग करना चाहते हैं। मुझे लगता है कि सबसे तेज़ तरीका है और सुरक्षित नहीं है, आप पूरे डिस्क को इस तरह से कॉपी और पुनर्स्थापित कर सकते हैं:
कंप्यूटर पर आईपी 192.168.0.1 के साथ

cat /dev/hdb | nc -p 9000
कंप्यूटर पर बी
nc -l 192.168.0.1 9000 > /dev/hdb

याद रखें कि आदमी के अनुसार n -l विकल्प है:

  -l यह निर्दिष्ट करने के लिए उपयोग किया जाता है कि nc को दूरस्थ होस्ट से कनेक्शन आरंभ करने के बजाय आने वाले कनेक्शन के लिए सुनना चाहिए। -P, -s, या -z विकल्पों के साथ संयोजन में इस विकल्प का उपयोग करना एक त्रुटि है।

3

netcat की जरूरत नहीं है।

src मशीन चलाने पर:

dd if=/dev/sdX bs=1M | ssh root@dstMachine " dd of=/dev/sdY bs=1M"

मुझे लगता है कि sdX और sdY पर कोई भी विभाजन आरोहित नहीं हैं। आप नोपोपिक्स या अन्य समान लाइव डिस्ट्रो के साथ दोनों बॉक्स को बूट कर सकते हैं ।

dd - से डेटा लेता है अगर [अगर प्रदान नहीं किया गया है - इसे स्टड से लेता है], डेटा भेजता है [यदि प्रदान नहीं किया गया है - डेटा को stdout में भेजा जाता है]। बी एस - ब्लॉक आकार ... चीजों को गति देगा।

ssh - रिमोट बॉक्स पर उद्धरणों में प्रदान की गई कमांड निष्पादित करता है, ssh के स्टड के लिए पंप किए गए सभी डेटा को रिमोट मशीन पर टनल किया जाएगा और वहां निष्पादित कमांड के लिए स्टड के रूप में पोरोवेद किया जाएगा।


तो यह माउंटेड डिस्क पर असंभव होगा?
एवगेनी

@ केवल अगर डिस्क को केवल पढ़ने के लिए माउंट किया जाता है तो यह ठीक होगा। अन्यथा - यह मत करो ... आपकी प्रति असंगत होगी।
pQd

3

होस्ट A छवि के लिए एक है, मेजबान B वह छवि है जिस पर संग्रहीत किया जाएगा:

root@A# dd if=/dev/sda | ssh root@B "dd of=/some/file"

डिस्क को पुनर्स्थापित करना सिर्फ उन दो को स्वैप करेगा।


1

Netcat के साथ मूल प्रति यहाँ वर्णित है

यदि आपको SSH को इसमें शामिल करने की आवश्यकता है , तो आप उस पर पोर्ट अग्रेषण का उपयोग कर सकते हैं ,

-R [bind_address:]port:host:hostport

लेकिन, कुल मिलाकर, आप सिर्फ पहली जगह (बिना नेटकैट) के एसएसएच ट्रांसफर कर सकते थे।


1

तो जब तक फाइलसिस्टम अनमाउंट नहीं होता, तब तक dd अच्छी तरह से काम करता है।

(from server1) dd if=/dev/sda bs=32k | ssh <server2> dd of=/dev/sda bs=32k

आपको समय से पहले hostkey प्रमाणीकरण सेटअप की आवश्यकता होगी अन्यथा पासवर्ड प्रॉम्प्ट प्रतिलिपि को विफल करने का कारण होगा।

माउंटेड वॉल्यूम पर ऐसा करने से खराब परिणाम सामने आएंगे।


धन्यवाद। क्या उद्धरण आवश्यक हैं?
एवगेनी

1

या, आप अपने दूरस्थ संग्रहण को sshfs के माध्यम से क्लोनज़िला और "माउंट" का उपयोग कर सकते हैं।


यदि आप किसी पार्टीशन को कॉपी कर रहे हैं, तो क्या आप नहीं चाहते कि टारगेट पार्टीशन अनकाउंटेड हो? इस विकल्प पर अधिक विवरण सहायक होगा।
मार्क स्टोसबर्ग

1

मैंने ऊपर दिए गए विकल्पों के संयोजन की कोशिश की, और आपके साथ परिणाम साझा कर रहा हूं। dd ब्लॉक साइज़, gzip और gzip कम्प्रेशन अल्गोरिथम के कॉम्बिनेशन का उपयोग करके सबसे तेज़।

जैसा कि आप देख सकते हैं कि gzip ने मुझे केवल 1M ब्लॉक आकार के साथ तेज एल्गोरिथ्म का उपयोग करते समय एक सुधार दिया।

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | gzip --fast | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 326.045 s, 39.5 MB/s

time dd if=/dev/HypGroup00/stage-snapshot  | gzip --fast | ssh hyp5 'gzip -d | dd of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 370.158 s, 34.8 MB/s

time dd if=/dev/HypGroup00/stage-snapshot  | ssh hyp5 dd of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 370.274 s, 34.8 MB/s

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | ssh hyp5 dd bs=1M of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 372.906 s, 34.6 MB/s

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | gzip | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 520.116 s, 24.8 MB/s

LVM के माध्यम से स्थानीय डिस्क का उपयोग करके एंटरप्राइज GigE स्विच के माध्यम से दो फास्ट सर्वर को GigE के साथ जोड़ा गया था।


0

ऐसा लगता है कि आप एक अखरोट को तोड़ने के लिए एक स्लेजहैमर का उपयोग कर रहे हैं - या शायद एक बेहतर सादृश्य आपके लॉन को शैंपू के साथ काटने की कोशिश कर रहा है

मैं दृढ़ता से सुझाव दूंगा कि आप इस तरह से काम करने के लिए कुछ उपकरण देखें जब तक कि आपको घर में करने के लिए बहुत अच्छे कारण न मिलें।

ट्रिनिटी रेस्क्यू किट एक निशुल्क लाइवसीडी है जो मल्टीकास्ट पर इमेजिंग ड्राइव का समर्थन करता है, और आप जो चाहते हैं (या वास्तव में किसी और को उसी तर्ज पर सोच रहे हैं) कर सकते हैं, बिना फुल-बोर इमेजिंग सिस्टम पर जाए।

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