क्या वर्तमान कार्यशील ड्राइव की ड्राइव छवि को लेना सुरक्षित है?


12

मुझे अपनी हार्ड डिस्क का बैकअप लेना होगा। मैं ddएक बाहरी hdd पर छवि का उपयोग करना चाहता हूं और रखना चाहता हूं ।

  • क्या मैं ddओएस से उपयोग कर सकता हूं जो स्वयं एचडीडी पर रहता है या क्या मुझे किसी अन्य डिवाइस से बूट करना है, उदाहरण के लिए एक लाइवसीडी?
  • क्या यह सुरक्षित है, सामान्य रूप से, डिवाइस की छवि लेने के लिए, यदि डिवाइस माउंट किया गया है और काम कर रहा है?
  • यदि डिवाइस माउंट किया गया है तो क्या होगा, लेकिन मुझे यकीन है कि कोई अन्य I / O ऑपरेशन नहीं है, जबकि ddचल रहा है?

मुझे यकीन है कि rsyncबैकअप के लिए उपयोग करने के लिए यह सबसे अच्छा उपकरण है, विशेष रूप से वृद्धिशील।

लेकिन मुझे इसमें दिलचस्पी है dd, क्योंकि मैं अन्य स्टोरेज डिवाइस का भी बैकअप लेना चाहता हूं, और यह अनपार्टेड स्पेस पर स्टोर किए गए डेटा को भी कॉपी करता है। उदाहरण के लिए, मेरे ई-बुक रीडर यूबूट, कर्नेल और अन्य डेटा को स्टोर करने के लिए एक अनपेक्षित स्थान का उपयोग करते हैं।


यह महत्वपूर्ण है कि आप किस फ़ाइल-सिस्टम का उपयोग कर रहे हैं, जिसमें आप रुचि रखते हैं? इस कार्य के लिए कुछ विशिष्ट विशेषताएं हैं।
वैलिट जूल

जवाबों:


11

सामान्य तौर पर यह सुरक्षित नहीं है। एफएस मानता है कि संचालन कुछ निश्चित क्रम में लिखे गए हैं इसलिए यह फ़ाइल का नया डेटा लिख ​​सकता है और फिर इसे अन्य डेटा से एक संकेतक बना सकता है, सटीक विवरण फाइल सिस्टम पर निर्भर करता है। कल्पना करें कि क्या होता है:

  1. dd स्थान X से पढ़ता है जिसमें कचरा या कुछ डेटा होता है
  2. फाइलसिस्टम एक्स को लिखता है
  3. फाइलसिस्टम X + 1 पॉइंटर को स्थान X पर स्थान देने के लिए लिखता है
  4. dd स्थान X + 1 लिंक से स्थान X पर पढ़ता है

बैकअप के दृष्टिकोण से आपको कचरा डेटा मिलता है। हालाँकि इसे हल करने के कई तरीके हैं:

  • फाइलसिस्टम फ़ाइल सिस्टम द्वारा फ्रीज करें (मेरा मानना xfs_freezeहै कि एक है और मुझे कोई अन्य नहीं पता है - लेकिन ऐसा विकल्प कम से कम सिद्धांत में मौजूद है)
  • एक lvm स्नैपशॉट बनाएं और उससे कॉपी करें। कॉपी इस प्रकार होगी- यदि आपने कंप्यूटर को रिबूट किया (माइनस एचडीडी रिडरिंग) तो यह एक गंदा फाइल सिस्टम होगा, लेकिन कॉपी परमाणु होगी। ध्यान दें कि एक्सएफएस जैसे कुछ फाइल सिस्टम को पहले जमे हुए होना चाहिए।
  • दूसरों द्वारा सुझाए अनुसार rsync का उपयोग करें। अब प्रतिलिपि सुरक्षित है और आपको LVM की आवश्यकता नहीं है लेकिन प्रतिलिपि परमाणु नहीं है। तो जब यह फाइलसिस्टम स्तर पर उपरोक्त समस्या से बचता है तो यह अभी भी फाइलों के साथ समस्याओं में चल सकता है (बल्कि संभावना नहीं है लेकिन किसी को लापता फाइलों की कल्पना कर सकते हैं जबकि mv को उदाहरण के लिए पृष्ठभूमि में निष्पादित किया जाता है)
  • स्नैपशॉट के साथ फाइल सिस्टम का उपयोग करें जैसे कि btrfs , tux3 , zfs , nilfs ... तब आप दोनों समस्याओं से बचते हैं - आप बस एक स्नैपशॉट बना सकते हैं और rsync द्वारा पूर्ण एटॉमिसिटी होने पर इसे कॉपी कर सकते हैं। ध्यान दें कि इस तरह के फाइलसिस्टम अक्सर प्रयोगात्मक होते हैं।

अंतिम नोट के रूप में - ddबैकअप का सबसे अच्छा तरीका नहीं हो सकता है। यह एक पूर्ण डिस्क की प्रतिलिपि बनाता है जो अक्सर बेकार है क्योंकि आप 'कचरा' को भी कॉपी करते हैं। यदि आपको एक डिस्क इमेज की आवश्यकता है तो पार्टिमेज जैसा कुछ बेहतर हो सकता है। यदि आप एक rsync का उपयोग एक बेहतर विकल्प है या तो उपयोग कर रहा है नहीं करते हैं, टार में अंतर / वृद्धिशील मोड आदि या इस तरह के रूप में एक पूर्ण बैकअप सिस्टम Bacula , tarsnap या कई अन्य लोगों में से एक। डेटा कटौती बैकअप के आकार के लिए चमत्कार कर सकती है।


1
+1 यह एकमात्र उत्तर है जो वास्तव में इस प्रश्न का उत्तर देने का प्रयास करता है, उत्कृष्ट रूप से वास्तव में पढ़ने के लिए किया जाता है कि ऑप क्या पूछ रहा है और यह नहीं बता रहा है कि dd खराब कैसे है।
1

एक अच्छे उत्तर के लिए +1। लेकिन मैं रंटिंग से असहमत हूं। डीडी खराब नहीं है। यह केवल इसके लिए अनुपयुक्त है और यह बताना कि मामला क्यों है एक अच्छी बात है।
हेन्नेस

बुलेट पॉइंट 4 में # 2 जैसी ही सीमाएँ हैं, है ना? एक आवेदन पत्र जारी करने के बीच में हो सकता है, और स्नैपशॉट एप्लिकेशन स्तर के लेनदेन के बारे में कुछ भी नहीं जानता है।
बेन वोइगट

धन्यवाद, यह सवाल का जवाब देता है। गोल्डीलॉक्स का जवाब भी अच्छा है, लेकिन मुझे न केवल मेरे एचडीडी बल्कि अन्य स्टोरेज डिवाइसों का भी बैकअप लेना है, और शायद मुझे इसे पहले लिखना था।
मार्को सुल्ला

@BenVoigt - कुछ विस्तार के लिए - यह एक परत (फाइल सिस्टम) को समाप्त कर देता है और AFAIK यह 'अधिक नाजुक' है। फिर भी कुछ मामलों में आप आधी-अधूरी लिखी हुई फाइलें पा सकते हैं, लेकिन यदि एप्लिकेशन उनके साथ व्यवहार नहीं करता है तो फाइलें कई अन्य परिस्थितियों (ओओएम, क्रैश, आदि) में दूषित हो सकती हैं, इसलिए सही ढंग से लिखे गए आवेदन से निपटना चाहिए।
मैकीज पीचोटका

7

यह इस बात पर निर्भर करता है कि वास्तव में विभाजन किसके लिए है, और प्रतिलिपि का उद्देश्य क्या है। हालांकि, मैं कहूंगा कि सामान्य रूप ddसे फाइलसिस्टम के बैकअप के लिए एक अनुचित उपकरण है । यही कारण है कि यह या तो नहीं था।

  • यह विभाजन के खाली वर्गों की नकल करने में बहुत समय बर्बाद करेगा।

  • यदि फ़ाइल सिस्टम वर्तमान में भाग में है, तो यह विसंगतियों को जन्म दे सकता है क्योंकि यह एक ओएस स्तर की इकाई है और अंतर्निहित ब्लॉक डिवाइस के साथ सिंक से बाहर हो सकता है। syncशुरू में कॉल करना इससे बहुत मदद नहीं करेगा, क्योंकि यह प्रक्रिया तात्कालिक नहीं है।

उपयोग cp -aया rsyncइसके बजाय। फिर आपको गंतव्य विभाजन बनाने की आवश्यकता है, ज़ाहिर है, इसलिए यह ड्रॉप डेड आसान के रूप में नहीं है, लेकिन यह अधिक सुरक्षित और अधिक लचीला है। यदि आपको एक फ़ाइल सिस्टम छवि बनाने की आवश्यकता है , तो नीचे देखें।

यदि आप रूट फाइलसिस्टम को कॉपी करना चाहते हैं, तो बिल्कुल उपयोग न करें dd। आपको कुछ rsync -ax(या cp -axव्यक्तिगत टॉपवेल निर्देशिकाओं पर) का उपयोग करना चाहिए , क्योंकि सामान का एक गुच्छा है जो प्रतिलिपि में नहीं होना चाहिए । लिनक्स पर, इसमें शामिल हैं:

/dev
/lost+found
/mnt
/proc
/run
/sys
/tmp

इनमें से कुछ वास्तव में कर्नेल इंटरफेस हैं और डिस्क पर वास्तविक निर्देशिका नहीं हैं। यदि आप उन्हें कॉपी करते हैं, तो आप जानकारी का एक गुच्छा कॉपी कर रहे हैं जो कॉपी में लागू नहीं होगा; यदि आप इसके साथ एक सिस्टम चलाते हैं और इसे चलाते हैं, तो यह व्यर्थ की जगह पर बस जाएगा क्योंकि असली इंटरफ़ेस शीर्ष पर मुहिम शुरू की जाएगी। अन्य में चल रही प्रक्रियाओं द्वारा उपयोग में अस्थायी जानकारी होती है और वे एक समस्या के और अधिक होते हैं, क्योंकि सिस्टम कचरा को छांटने में सक्षम नहीं होगा यदि आप उसे कॉपी करते हैं।

यदि आप रूट फाइल सिस्टम (या किसी भी फाइल सिस्टम) की एक छवि फ़ाइल बनाना चाहते हैं , तो एक खाली छवि फ़ाइल बनाएं - यह इसके लिए एक उपयुक्त उपयोग है dd:

dd if=/dev/zero of=whatever.img bs=1024 count=1000000

यह एक 1024 एमबी की छवि (1000000 * 1024) है। समायोजित करें countयदि आप इसे कुछ अन्य आकार चाहते हैं। बनाएँ, जैसे, extफ़ाइल में एक फाइल सिस्टम :

mke2fs whatever.img

यह आपको चेतावनी देगा कि यह एक वास्तविक ब्लॉक डिवाइस नहीं है। आगे बढ़ें। अब छवि फ़ाइल माउंट करें:

mount whatever.img /mnt/img

/mnt/imgमौजूद होना चाहिए लेकिन कुछ भी हो सकता है। अब आप rsync(या cp -a) में कर सकते हैं /mnt/imgwhatever.imgजब आप इसे अनमाउंट करेंगे तो सामग्री अंदर रहेगी ।

तथापि...

बस स्पष्ट होने के लिए, केवल फाइलसिस्टम छवि विधि का उपयोग करें, केवल यदि आपको किसी भी कारण से एक छवि फ़ाइल की आवश्यकता है, तो केवल वर्णित करें। यदि आपका लक्ष्य विभाजन को किसी अन्य हार्ड ड्राइव में कॉपी करना है , तो आपको एक छवि की आवश्यकता नहीं है : उस ड्राइव पर एक खाली फाइल सिस्टम के साथ एक नया विभाजन बनाएं, इसे माउंट करें, और वहां कॉपी करें। आप इसके बजाय बस एक खाली निर्देशिका में फाइल सिस्टम सामग्री डाल सकते हैं और इसे संग्रहीत कर सकते हैं:

tar -czf myarchive.tar.gz [the directory path]

फिर आप इसे एक मौजूदा (खाली या अन्यथा) विभाजन में टावेल में रखकर और उपयोग करके तैनात कर सकते हैं:

tar -xzf myarchive.tar.gz

खबरदार जो मौजूदा फ़ाइलों को अधिलेखित कर देगा यदि उनके पथ संग्रह में कुछ से मेल खाते हैं। यह अन्यथा मौजूदा निर्देशिका पदानुक्रम को समान छोड़ देगा।


+1 एक खाली छवि फ़ाइल में लिखना बहुत ही धीमा है, लेकिन .tar या .tgz आर्काइव में बचत से अधिक लाभ क्या है?
क्रीक

@ यह छवि माउंट करने योग्य को छोड़कर कोई लाभ नहीं है। मैंने कहा कि यदि ओपी का लक्ष्य एक ऐसी छवि का निर्माण करना है जो कच्ची हो सकती है। अन्यथा, संग्रह का उपयोग करना बेहतर है क्योंकि एक संग्रह निश्चित आकार का नहीं है। मैं उस बारे में एक स्पष्ट चेतावनी जोड़ूंगा।
गोल्डीलॉक्स

समझे, मुझे ऐसा नहीं लगा। अभी भी फ़ाइलों को संग्रहीत करने के लिए एक अच्छा तरीका है।
क्रीक

2
@mpy GNU कोरुटिल्स cpऔर rsync दोनों के पास -xअन्य फाइल सिस्टम में पुनरावृत्ति से बचने का विकल्प है। Maciej का जवाब सबसे अच्छा बताता है कि ddयहां बिल्कुल अनुचित क्यों है (यह लगभग एक अनुपयोगी प्रतिलिपि बनाने की गारंटी है जब तक कि आप मार्क द्वारा सूचीबद्ध सावधानी नहीं लेते हैं , क्योंकि यह लिखते हैं कि कॉपी के दौरान अन्यथा होगा)।
गिल्स एसओ- बुराई को रोकना '

2
ddडिस्क पर वास्तविक निर्देशिकाओं को कॉपी नहीं करेंगे, इसलिए मुझे यकीन नहीं है कि आपका पहला बिंदु कहां से आ रहा है। उदाहरण के लिए /mnt, इन नोड्स /procआदि में लगे हुए उपकरण उस डेटा का हिस्सा नहीं होंगे ddजो डिस्क पर नहीं है। अनमाउंट फाइलसिस्टम ddपूरी तरह से मान्य है; आप एक सटीक डुप्लिकेट के साथ समाप्त होते हैं। माउंटेड फ़ाइल सिस्टम के लिए यह अनुचित होने का एकमात्र कारण यह है कि सिस्टम पर डेटा आंशिक रूप से बदल सकता है / इसे ddसंचालित होने में लंबी अवधि के दौरान लिखा जा सकता है ।
जेसन सी

1

rsync एक फाइलसिस्टम का बैकअप लेने के लिए पसंद का उपकरण है, और यह चालू चल रहे OS का बूटेबल बैकअप बना सकता है।

कुछ चेतावनी:

  • आपको उपयुक्त वर्णमाला-सूप विकल्प जोड़ना होगा
  • रास्ते बल्कि महत्वपूर्ण हैं
  • एक बहिष्करण सूची आवश्यक है, और प्रत्येक OS और संभवतः प्रत्येक कॉन्फ़िगरेशन के लिए अलग-अलग होगी

राल जैसे अन्य तरीकों पर rsync के कुछ लाभ:

  • आप किसी भी समय बैकअप को रोक और शुरू कर सकते हैं
  • हटाए गए फ़ाइलों को संभालने के लिए कई विकल्प जैसे मांग पर हटाना, पहले हटाना, स्थानांतरित करना .....
  • फिर से शुरू की गई (या बार-बार) बैकअप अन्य विधियों की तुलना में बहुत तेज है, क्योंकि पहले से कॉपी की गई फाइलें छोड़ दी जाती हैं। (20x गति वृद्धि आम है)
  • - thelink- भाग्य विकल्प केवल वास्तविक फ़ाइलों की प्रतिलिपि बनाते समय संस्करण बैकअप बना सकते हैं

छवि बैकअप में अपना स्थान होता है, लेकिन वे ड्राइव को बिल्कुल वैसा ही कॉपी करते हैं, जिसमें आपको कोई समस्या हो सकती है। एक फ़ाइल बैकअप एक नई निर्देशिका बनाता है और इस प्रक्रिया में आपके ड्राइव को रैखिक करने (डीफ़्रैग्मेंटिंग) का दुष्प्रभाव होता है। यदि आप अपने वर्तमान OS की 10 समान प्रतियां बनाना चाहते हैं, तो मैं कॉपी मास्टर के लिए rsync का उपयोग करूंगा और फिर बाकी के लिए dd (या समान)।


1

यह इस बात पर निर्भर करता है कि "वर्तमान कार्य प्रणाली" से आपका क्या तात्पर्य है। यदि आप बूट डिस्क का उपयोग करने से बचना चाहते हैं, और कंप्यूटर पर चलने वाली सेवाओं में व्यवधान की परवाह नहीं करते, तो यह संभव है:

  1. सभी गैर-व्यावसायिक कार्यक्रमों को बंद करें (मूल रूप से, मूल शेल को छोड़कर जो भी आप काम कर रहे हैं - एक एक्स टर्मिनल से यह कोशिश न करें, एक वास्तविक कंसोल का उपयोग करें)। एकल-उपयोगकर्ता मोड इसके लिए मदद कर सकता है।
  2. यदि आपको सिस्टम रूट के अलावा माउंटेड डिस्क मिल गई हैं, तो उन्हें अनमाउंट करें। वर्चुअल फाइल सिस्टम जैसे कि / proc, / sys, या / dev को अनमाउंट न करें।
  3. शेष डिस्क पर फ्लश कैश्ड डेटा: sync
  4. केवल-केवल पढ़ने के लिए मूल फाइल सिस्टम को रिमूव करें mount -o ro /:।
  5. अपने बाहरी हार्ड ड्राइव को माउंट करें (आप शायद /etc/mtabइसे लिखने में असमर्थ होने के बारे में चेतावनी दें ; इसे अनदेखा करें)।
  6. अपना बैकअप बनाएं।
  7. अपने बाहरी हार्ड ड्राइव को अनमाउंट करें।
  8. रीबूट। आपने अपने सिस्टम के गड़बड़ होने की जगह बना ली है, और इसे फिर से सामान्य करने का सबसे तेज़ तरीका है रिबूटिंग।

मैं इस पद्धति का उपयोग उस कंप्यूटर के एक संग्रह को बनाने के लिए करता हूं जिसे मैंने अभी से अपग्रेड किया है और बहुत अधिक उपयोग करने की अपेक्षा नहीं करता है। यह सक्रिय उपयोग में एक प्रणाली के लिए एक बहुत अच्छी विधि नहीं है: यह धीमा है (घंटे या दिन ले रहा है), बैकअप विशाल हैं (इसलिए आप कुछ से अधिक नहीं रख सकते हैं), और यह प्रणाली के उपयोग के लिए अविश्वसनीय रूप से विघटनकारी है। यूपी। दिन-प्रतिदिन के बैकअप के लिए, मैं कुछ ऐसी चीजों की सलाह देता हूं जो फाइल सिस्टम स्तर पर काम करती हैं, जैसे कि rsnapshot


ध्यान दें कि चरण 4 कुछ फ़ाइल सिस्टम पर खतरनाक हो सकता है क्योंकि वे केवल-पढ़ने के लिए मोड में भी लिखते हैं। इसके अलावा अधिक आधुनिक सिस्टम पर (लिनक्स 3.something मैं belive) तुम सिर्फ लिंक कर सकते हैं /etc/mtabकरने के लिए /proc/self/mount- आप के रूप में chroots या FS नामस्थान ऐसी बातें है जब जो भी काम करेंगे।
मैकीज पाइचोटका

1
@MaciejPiechotka मैं किसी भी फाइल सिस्टम के बारे में नहीं जानता, जो केवल-पढ़ने के लिए मोड में मुहिम शुरू करता है और मुझे बहुत अजीब लगता है। कुछ फाइल सिस्टम केवल रीड-ओन्ली मोड में बढ़ते हुए लिखते हैं यदि फाइल सिस्टम पहले साफ-सुथरा नहीं था, तो स्टेप mount -o remount,ro /लिख सकते हैं। लेकिन एक बार जब यह आदेश वापस आ जाता है, तो बाद में किस स्थिति में लेखन होगा?
गिल्स एसओ- बुराई को रोकना '

गंभीर रूप से शट डाउन करने के लिए "नॉनसेसेशियल प्रोग्राम" को लॉगिंग सबसिस्टम को शामिल करना होगा, जिसे मैं गैर-विचारणीय नहीं मानूंगा।
गाइल्स का SO- बुराई से रोकना '

@ गिल्स, बूट डिस्क की एक डिस्क छवि बनाने के प्रयोजनों के लिए, छवि के निर्माण में सीधे शामिल नहीं होने वाला कोई भी कार्यक्रम गैर-आवश्यक है।
मार्क

एकल उपयोगकर्ता मोड का उल्लेख करने लायक हो सकता है यहाँ मदद कर सकता है।
1

1

Clonezilla का उपयोग करें , गंभीरता से। यह सबसे अच्छा ओपन-सोर्स, लिनक्स-आधारित नॉर्टन घोस्ट-जैसी उपयोगिता है। यह विभाजन और पूर्ण डिस्क क्लोनिंग दोनों करेगा, या तो डिस्क-टू-डिस्क या डिस्क-टू-फाइल सिस्टम (फ़ाइल के रूप में सहेजें)। यह अधिकांश लिनक्स फ़ाइल सिस्टम, NTFS, FAT32 और अधिक का समर्थन करता है। यह एक आंतरिक डिस्क, एक बाहरी ड्राइव या यहां तक ​​कि एसएमबी या एनएफएस शेयरों पर नेटवर्क पर भी बचा सकता है।

इसका इस्तेमाल करना बहुत आसान है और इससे आपका काफी समय बचेगा।

संपादित करें: प्रश्न का उत्तर देने के लिए, नहीं, आप ddमाउंट किए जाने के दौरान अधिकांश फ़ाइल सिस्टम नहीं कर सकते क्योंकि आप अपनी फ़ाइल सिस्टम की असंगत प्रतिलिपि के साथ समाप्त होने का जोखिम रखते हैं क्योंकि ब्लॉक डिवाइस से पढ़ना परमाणु नहीं है। उदाहरण के लिए, यदि आप 100 ब्लॉक कॉपी कर रहे हैं, तो सिस्टम ने पहले ब्लॉक और आखिरी ब्लॉक को अपडेट किया होगा, जबकि आप केवल आधे रास्ते में थे, जिसका अर्थ है कि आपकी कॉपी में संशोधित अंतिम ब्लॉक शामिल होगा, लेकिन पहले वाला नहीं।


+1: यह प्रश्न का उत्तर नहीं देता है, लेकिन यह hdd बैकअप के लिए एक अच्छा सुझाव है।
मार्को सुल्ला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.