कैसे ssh और टार के साथ नई हार्ड ड्राइव पर पूरे लिनक्स रूट फाइलसिस्टम को कॉपी करें


18

मुझे एक खुले, उपलब्ध विभाजन के साथ किसी अन्य कंप्यूटर पर एक असफल हार्ड ड्राइव के पूरे लिनक्स रूट फाइल सिस्टम को स्थानांतरित करने की आवश्यकता है। मुझे पूरा यकीन है कि इसमें शामिल है tarऔर ssh, लेकिन मुझे यह याद नहीं है कि यह कैसे करना है।

मैं शायद इस तरह से कुछ चलाने के लिए नए / लक्ष्य होस्ट पर लाइव सीडी का उपयोग कर रहा हूं :

ssh user@failingharddrivehost "some tar command | piped into something else"


विषय से परे। प्रोग्रामिंग सवाल नहीं। लेकिन कोशिश करोssh user@failingsys "tar cfz - /" > oldsys.tar.gz

आप ध्यान रखना चाहते हैं कि आप टार / देव / / (जैसे / देव / यादृच्छिक, / देव / sdX, ...) नहीं करते हैं। Ditto / proc /
Hennes

जवाबों:


17

Rsync का उपयोग करें। नए होस्ट से, आप उपयोग कर सकते हैं

rsync -avP --numeric-ids --exclude='/dev' --exclude='/proc' --exclude='/sys' root@failedharddrivehost:/ /path/to/destination/

मैं टार जैसी किसी चीज़ को शामिल करने की कोशिश नहीं करूंगा क्योंकि यह तब काम नहीं करेगा जब टूटी हुई फाइलें हों।


Rsync का उपयोग करके समाप्त हुआ, जैसा कि etagenklo और @Hennes द्वारा ऊपर वर्णित है। प्रवास अच्छा चला। बस ग्रब को ठीक करने की आवश्यकता है, लेकिन यह बहुत बुरा नहीं होना चाहिए।
सीएचके

7
मैं -sx को rsync और साथ ही साथ acs, xattrs और हार्डलिंक को संरक्षित करने के लिए झंडे के रूप में जोड़ दूंगा, जिसके परिणामस्वरूप मूल fs की और भी अधिक सटीक प्रतिलिपि प्राप्त होगी।
अलेक्जेंडर रेमेस्च

4
मैं -x को रूट फाइलसिस्टम में नहीं होने वाली वस्तुओं को अनदेखा करने के लिए जोड़ दूंगा, फिर आप विभिन्न रास्तों के लिए --exclude तर्कों को छोड़ सकते हैं।
एलेक्स

4

यदि दोनों कंप्यूटर एक ही (सुरक्षित) LAN पर हैं, तो मैं एक अलग दृष्टिकोण का उपयोग करने की सलाह देता हूं netcat। यह आमतौर पर बहुत तेज़ है क्योंकि यह डेटा को एन्क्रिप्ट नहीं करता है।

root@good_host$ cd good_partition; netcat -l -p 1234 | tar xvpmf -
root@bad_host$ tar -cv -f- --exclude=/proc --exclude=/sys / | netcat good_host.ip 1234

जो अच्छी मशीन पर एक श्रवण पोर्ट 1234 खोलता है netcat -l -p 1234और आने वाले डेटा tarको निकालने के लिए (माइम और अनुमतियों को संरक्षित करके) पाइप करता है । खराब होस्ट डेटा को इस पोर्ट पर भेज देता है, उपयोग करके tarऔर netcat। मैं कुछ शामिल --exclude, पैरामीटर के रूप में /procऔर /sysआभासी फ़ाइल सिस्टम होते हैं और इसलिए नए मेजबान पर बेकार। (विशेषकर आपके RAM में ( /proc/kcore) डेटा का प्रतिनिधित्व करने वाली फ़ाइल अनावश्यक मात्रा में डेटा जोड़ेगी)।

हालाँकि, आपको ddफेलिंग ड्राइव के विभाजन का एक डंप बनाने पर भी विचार करना चाहिए :

user@good_host$ cd good_partition; netcat -l -p 1234 > dump_of_bad_partition_1.dd
root@bad_host$ dd if=/dev/sda1 | netcat good_host.ip 1234

जहाँ आपको /dev/sda1सही उपकरण को अपनाना था । असफल ड्राइव पर अन्य विभाजनों के साथ भी ऐसा करें।

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


3

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

/ dev / sda1 as / then do: mkdir / CLEANROOT माउंट / देव / sda1 / CLEANROOT

इसके बाद आपके पास: / dev / sda1 as / / dev / sda1 as / CLEANROOT

यह एक ही फाइल सिस्टम है जो दो स्थानों पर दिखाई देता है, लेकिन CLEANROOT को एडिटिव माउंट नहीं मिला है। फिर आप बहिष्करण के साथ / इसके बजाय किसी भी बहिष्करण के बिना टार या rsync / CLEANROOT कर सकते हैं।

जब आपको कुछ मिला हो, तो निश्चित रूप से आपको एक और डेटा विभाजन कॉपी करना होगा।

विभाजन को कॉपी करना सर्वर रिकवरी के लिए पहला कदम है। एक और बूट सेक्टर फिर से तैयार है, अन्यथा सिस्टम कॉपी किए गए डिस्क से बूट नहीं करेगा। जब आप इंस्टॉल / रेस्क्यू सीडी या पेनड्राइव से बूट करते हैं, तो Usefull बचाव मोड है।


1

क्या आपके पास असफल मेजबान तक भौतिक पहुंच है?

यदि आप करते हैं तो एक लाइव सीडी से बूट करें। फिर उपयोग करें:

  • डंप (इसकी अनुमति सहित पूरे फाइल सिस्टम को डंप / पुनर्स्थापित करता है)।
  • टार के साथ / देव को बाहर रखा गया। आप इसे आउटपुट के साथ std_out और पाइपिंग के साथ जोड़ सकते हैं, हालांकि netcat
    बाहर का सिंटैक्स है tar --exclude='/dev':।
  • या rsync के साथ एक ही शामिल नहीं है। उदाहरण के लिए
    rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
  • या इस तरह से dd का उपयोग करें:
    nc -l 4242 | gunzip | cat > my_full_disk_backup_of_PC_named_foo
    dd if=/dev/sda of=- bs=1M | gzip | nc -p 4242 name_of_the_destination

यदि आप एक लाइव सीडी से बूट नहीं कर सकते हैं तो उपरोक्त कुछ समाधान समान रहेंगे, लेकिन:

  1. कुछ फाइलें उपयोग / लॉक की जा सकती हैं।
  2. न केवल / देव / बल्कि / खरीद / को भी बाहर करना सुनिश्चित करें।
    उदाहरण के लिएtar --exclude='/dev' --exclude='/proc'

हां, मेरे पास दोनों मेजबानों की भौतिक (और जड़) पहुंच है। Rsync के साथ प्रयास करने जा रहा है। netcat अज्ञात कारणों से विफल बॉक्स के लिए दुर्घटनाग्रस्त हो गया। लक्ष्य फ़ाइल सिस्टम माउंट नहीं किया जाना चाहता है। यह विफल रहता है: #mount /dev/sda1 /mnt/fedora mount: unknown filesystem type 'LVM2_member'
सीएचके

1

यहाँ कैसे का उपयोग कर फ़ाइल की प्रतिलिपि बनाने का वर्णन है tarऔर sshमूल रूप से, आप स्थानीय,> दूरस्थ या दूरस्थ -> स्थानीय की प्रतिलिपि बनाना चाहते हैं, इस पर निर्भर करते हुए, आप निम्न में से एक को चला सकते हैं:

tar cf - files... | ssh remotehost -c 'cd /destination && tar xvf -'

ssh remotehost -c 'cd /destination && tar cf - files' | tar xvf -

0

आपको rsync का उपयोग करने पर विचार करना चाहिए

follwoing कमांड 2 चीजों को मानता है:

  1. आप हार्ड ड्राइव को विफल करने के साथ सिस्टम पर हैं
  2. नए विभाजन में ssh सक्षम के साथ न्यूनतम लिनक्स इंस्टॉलेशन है।

rsync / new_partition:/wherever/you/want/

ध्यान दें: अनुगामी / महत्वपूर्ण है, अन्यथा आपकी फाइलें ऊपर एक निर्देशिका स्तर में समाप्त हो जाएंगी


ओपी शायद -aपैरामीटर (और शायद -A) का उपयोग करना चाहता है , क्योंकि यह समय, स्वामित्व, सहानुभूति (और शायद एसीएल) आदि और -e sshपैरामीटर को संरक्षित करता है, क्योंकि डेटा को दूसरे कंप्यूटर पर स्थानांतरित किया जाना चाहिए। तोrsync -aAv -e ssh root@failingharddrivehost:/ /good_computer/newpartition_mountpoint
MPY
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.