स्थानीय मशीन पर SSH का उपयोग करके एक दूरस्थ डिस्क को dd कैसे करें और स्थानीय डिस्क पर सहेजें


85

मैं अपने स्थानीय मशीन पर SSH का उपयोग करके दूरस्थ डिस्क का बैकअप कैसे बना सकता हूं और इसे स्थानीय डिस्क पर सहेज सकता हूं?


मैंने निम्नलिखित कोशिश की है:

ssh hostname@my.ip.address "sudo dd if=/dev/sdX " | \
  dd of=/home/username/Documents/filename.image`

हालाँकि, मुझे निम्न त्रुटि प्राप्त हुई:

कोई tty मौजूद नहीं है और कोई askpass कार्यक्रम निर्दिष्ट नहीं है

जवाबों:


114

यदि आपका इरादा SSH के माध्यम से एक दूरस्थ कंप्यूटर के HDD A को आपके स्थानीय कंप्यूटर के HDD पर एकल फ़ाइल में बैकअप करने का है, तो आप निम्न में से एक कर सकते हैं।

उदाहरण

दूरस्थ कंप्यूटर से चलाएँ

$ dd if=/dev/sda | gzip -1 - | ssh user@local dd of=image.gz

स्थानीय कंप्यूटर से चलाएँ

$ ssh user@remote "dd if=/dev/sda | gzip -1 -" | dd of=image.gz

जीवंत उदाहरण

$ ssh skinner "dd if=/dev/sda5 | gzip -1 -" | dd of=image.gz
208782+0 records in
208782+0 records out
106896384 bytes (107 MB) copied, 22.7608 seconds, 4.7 MB/s
116749+1 records in
116749+1 records out
59775805 bytes (60 MB) copied, 23.9154 s, 2.5 MB/s

$ ll | grep image.gz
-rw-rw-r--.   1 saml saml  59775805 May 31 01:03 image.gz

निगरानी के लिए तरीके?

  1. sshकिसी अन्य टर्मिनल और ls -lफ़ाइल के माध्यम से लॉगिन करके देखें कि इसका आकार क्या है।
  2. आप pvबड़े dd ऑपरेशन की प्रगति की निगरानी के लिए उपयोग कर सकते हैं , उदाहरण के लिए, ऊपर के दूरस्थ उदाहरण के लिए, आप यह कर सकते हैं:

    $ dd if=/dev/sda | gzip -1 - | pv | ssh user@local dd of=image.gz
    
  3. "SIGUSR1" सिग्नल को भेजें ddऔर यह आंकड़े प्रिंट करेगा। कुछ इस तरह:

    $ pkill -USR1 dd
    

संदर्भ

निगरानी के लिए ऊपर उल्लिखित तरीके मूल रूप से @Ryan & @bladt और मेरे द्वारा टिप्पणियों के माध्यम से छोड़ दिए गए थे । मैंने उन्हें और अधिक स्पष्ट करने के लिए उत्तर में स्थानांतरित किया है।


मैंने इसी तरह की समस्या के लिए यह कोशिश की (रिमोट कंप्यूटर ONEके हार्ड ड्राइव को दूरस्थ कंप्यूटर TWOके स्टोरेज तक पहुँचाने के लिए), इस तरह: <br /> [root @ ONE] # dd if = / dev / sda1 | ssh रूट @ TWO dd of=/root/Public/ONE/sda1.img<br /> 409600 में 0 रिकॉर्ड 409600 + 0 रिकॉर्ड 209715200 बाइट्स (210 एमबी) कॉपी किए गए, 0.894929 एस, 234 एमबी / एस स्यूडो-टर्मिनल आवंटित नहीं किया जाएगा क्योंकि ओडिन एक टर्मिनल रूट @ TWO का पासवर्ड नहीं है : समस्या यह है कि /root/Public/ONE/sda1.imgफ़ाइल उम्मीद के मुताबिक ONEनहीं, पर बनाई गई थी TWO। मैं यह कैसे तय करुं?
उरिखीदुर

1
क्या कोई हमें pvस्थानीय मशीन से उपयोग करने का उदाहरण दे सकता है ? धन्यवाद।
TCB13

lzzip2 या gzip के पिग का उपयोग करना बेहतर है
शिमोन डूडकिन

मुझे आखिर क्यों चाहिए "? dd of = image.gz" अंत में? (न सिर्फ "> image.gz") क्योंकि dd एक सीपीयू का 100% लेता है
शिमोन डूडकिन

6
निगरानी के बारे में: नए dd संस्करणों में भी status=progressविकल्प होता है। इस प्रकार, आपको pkill -USR1 ddअब किसी अन्य टर्मिनल से चलने की आवश्यकता नहीं है।
तक Schäfer

12

आपको प्राप्त त्रुटि सुडो रिमोट के उपयोग के कारण है (आपसे पासवर्ड मांगा जाएगा, लेकिन आपके पास प्रवेश करने के लिए ट्टी नहीं है)। दूसरी ओर, एक सामान्य उपयोगकर्ता के रूप में आप सामान्य ddरूप से अन्य उत्तर में सुझाए अनुसार उपयोग नहीं कर सकते हैं (आपके पास डिवाइस के लिए आवश्यक अनुमति नहीं है)। आप ddपासवर्ड के बिना sudo के रूप में निष्पादित करने का अधिकार देकर समस्या का समाधान कर सकते हैं। आप sudoers फ़ाइल (रिमोट पर!) को संपादित करके ऐसा कर सकते हैं:

sudo visudo

निम्नलिखित पंक्ति जोड़ें:

userfoo ALL=(ALL) NOPASSWD: /bin/dd if=/dev/sdX

अब आप जारी कर सकते हैं:

ssh userfoo@host "sudo /bin/dd if=/dev/sdX" | dd of=test.dd

और यह काम करना चाहिए। आप sudoers में अधिक सामान्य प्रविष्टि कर सकते हैं, जिससे आप ddकिसी भी पैरामीटर के साथ चल सकते हैं, लेकिन यह मुफ़्त अनुमतियों को न्यूनतम आपकी आवश्यकता के लिए रखने के लिए समझदार है।


या, आप आदेश लागू अंत में चला सकते हैं 'sudo ls' (और पासवर्ड में टाइप), बस चलाने से पहले 'sudo जोड़ें ...'
MikeW

Dd जोड़ने की स्थिति के नए संस्करणों के साथ = प्रगति भी कॉपी प्रगति की निगरानी की अनुमति देती है।
सेंसलेन

7

मैंने उम्र बढ़ने के RedHat सर्वर पर एक भौतिक हार्ड ड्राइव को क्लोन करने के लिए वर्चुअल लिनक्स मिंट बॉक्स पर एक संशोधित संस्करण का उपयोग किया है।

मैंने निम्न को वर्चुअल बॉक्स पर रूट के रूप में चलाया:

ssh root@192.168.1.5 "dd if=/dev/cciss/c0d0" | dd of=/dev/sdb
  • 192.168.1.5 भौतिक Red Hat Enterprise Linux 2.1 बॉक्स है।
  • / dev / sdb एक नई वर्चुअल डिस्क है, जो समाप्त होने पर क्लोनिंग पुराने मरने वाले भौतिक बॉक्स के आभासी संस्करण का आधार होगी।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.