फाइलसिस्टम की नकल कैसे की जा सकती है?


10

मेरे पास एक डिवाइस के लिए एक फाइल सिस्टम है जिसे मैं प्रोग्रामिंग कर रहा हूं जिसे मैं एक सटीक प्रतिलिपि बनाना चाहूंगा। आदर्श रूप में मैं इस प्रतिलिपि को उस फ़ोल्डर के समान होना चाहूंगा जिसे यह कॉपी किया गया था। मैंने इसका उपयोग करने cp -r cp -aऔर rsync -azvPइसे प्राप्त करने की कोशिश करने की कोशिश की है। हर एक यद्यपि अलग-अलग आकार (उपयोग du -s) के साथ एक फ़ोल्डर में परिणाम होता है और आखिरकार, भले ही मेरा डिवाइस मूल फ़ोल्डर से चलता है, यह मेरे द्वारा कॉपी किए गए भाग से नहीं चलेगा।

  • क्या हो रहा है कि मेरे द्वारा उपयोग किए गए आदेशों का कोई हिसाब नहीं है?
  • क्या फ़ाइल सिस्टम / फ़ोल्डर की नकल करते समय सब कुछ समान रखना संभव है? यदि हां, तो मैं ऐसा करने के बारे में कैसे जाऊंगा?

PS मैंने StackOverflow पर इसी तरह के प्रश्न पोस्ट किए लेकिन जल्दी ही एहसास हुआ कि मैंने इसे गलत एक्सचेंज पर कहा था


संपादित करें: यह मददगार नहीं हो सकता है, लेकिन कोई बात नहीं कि मैं किस विधि का उपयोग करके प्रतिलिपि बनाई गई निर्देशिका को हमेशा निम्न आउटपुट के साथ कर्नेल आतंक के लिए मशीन का कारण बनता हूं।

VFS: एनएफएस के माध्यम से रूट एफएस को माउंट करने में असमर्थ, फ्लॉपी की कोशिश कर रहा है। VFS: ओपन रूट डिवाइस "nfs" या अज्ञात-ब्लॉक (2,0) कृपया एक सही "रूट =" बूट विकल्प नहीं जोड़ सकते हैं; यहाँ उपलब्ध विभाजन हैं: 1f00
64 mtdblock0 (ड्राइवर?) 1f02 64 mtdblock2 (ड्राइवर?) 1f04 2432 mtdblock4 (ड्राइवर?) 1f05 128 mtdblock5 (ड्राइवर?) 1f06 4352 mtdblock6 (ड्राइवर?) 1f07 204928 mtdblock7 (ड्राइवर?) mtdblock8 (ड्राइवर?) 0800
8388608 sda ड्राइवर: sd कर्नेल पैनिक - सिंक नहीं: VFS: अज्ञात-ब्लॉक पर रूट fs माउंट करने में असमर्थ (2,0)


5
duआउटपुट में अंतर यह संकेतक नहीं है कि सामग्री समान नहीं है।
इग्नासियो वाज़क्वेज़-अब्राम्स

मेरा उपकरण कॉपी की गई निर्देशिका का उपयोग करके बूट नहीं करेगा। मैं इसे एक संकेतक के रूप में ले रहा हूं और सोच रहा हूं कि वास्तव में मैं क्या गलत कर रहा हूं कि नकल की गई फ़ाइल प्रणाली का इलाज एक ही नहीं है
TopGunCoder

आपको यह बताने की आवश्यकता है कि आप क्या करने की कोशिश कर रहे हैं। rsync -aया cp -aनिर्देशिकाओं की सटीक प्रतियां करते हैं, लेकिन आप एक बूट करने योग्य डिस्क की प्रतिलिपि बनाने की कोशिश कर रहे हैं, कुछ चीजें हैं जिन्हें आपको पूरा करने की आवश्यकता है।
फोर्सफेक

1
किस तरह का डिवाइस? किस तरह का फाइल सिस्टम? किस तरह का स्टोरेज मीडिया?
माइकल

1
मेरे लिए ऐसा लगता है कि आप dd if=/some/location of=/some/other/location bs=4Mडेटा को पढ़ने और लिखने के लिए उपयोग करना चाहते हैं।

जवाबों:


12

मैं आमतौर पर निम्नलिखित विकल्पों में से एक का उपयोग करता हूं:

  • rsync -aHAX(वर्बोसिटी के लिए v जोड़ें) यह सुनिश्चित करता है कि आप कॉपी करते समय लक्ष्य फ़ोल्डर में किसी भी लिंक संरचना और x-attrs को सुरक्षित रखें। मत भूलना aसंग्रह का मतलब है और पहले से ही समय, स्वामित्व और अनुमतियाँ सुरक्षित रखता है।
  • सरल tar cvf(समय बचाने के लिए संपीड़ित न करें, बस उन्हें टार अप करें) मैं वही उपयोग करता हूं यदि पहले वाला पूरा नहीं करता है जो मुझे किसी भी कारण से चाहिए और मेरे पास कोई समय नहीं है, लेकिन मैं हमेशा पहले प्रयास करता हूं।

यह जाँचने के लिए कि सब कुछ जैसा होना चाहिए था, आप चाहें diff -r <folder1> <folder2>तो बाद में चला सकते हैं।


1
यह किया चाल! मुझे यह भी सुनिश्चित करने की आवश्यकता थी कि जिस डिवाइस को मैं बूट कर रहा था (एनएफएस के माध्यम से) बंद कर दिया गया था और कॉपी के चालू होने के दौरान फ़ाइल सिस्टम तक पहुंचने में सक्षम नहीं था।
TopGunCoder

1
आह, एनएफएस ग्राहकों को पढ़ने-लिखने के साथ कभी-कभी चीजों को मसाला दे सकते हैं!
बेइदिरह

3
यह बिना -S के विरल फाइलों की नकल नहीं करेगा। वह du -sअंतर का हिस्सा हो सकता है । मैं rsync -axXSAHहर चीज की नकल करता था। -X केवल फाइलसिस्टम के भीतर कॉपी करेगा, न कि किसी अन्य फाइलसिस्टम से माउंट की गई फाइल।
विक्टर रोएटमैन

के बारे में क्या -numeric-ids?
0x2207

@ 0x2207 यह तभी उपयोगी है जब किसी उपयोगकर्ता के पास अलग-अलग सिस्टम पर अलग-अलग संख्यात्मक आईडी हों (जैसे कि उपयोगकर्ता hbayindir दोनों प्रणालियों पर है, और स्रोत पर UID 1000 और गंतव्य पर 1536 है)। मुझे कभी भी उस विकल्प का उपयोग नहीं करना पड़ा, क्योंकि मुझे वास्तविक मालिक को संरक्षित करने की आवश्यकता है, न कि यूआईडी और जीआईडी ​​की। यदि कोई उपयोगकर्ता या तो स्रोत या गंतव्य पर मौजूद नहीं है, तो संख्यात्मक आईडी का उपयोग फ़ॉलबैक के रूप में किया जाता है।
बेइन्दिरह

4

टिप्पणियों में आपके जवाब को पढ़कर ऐसा लगता है कि आप संभवतः रूट फ़ोल्डर की नकल करने की कोशिश कर रहे हैं ("मेरा डिवाइस कॉपी की गई निर्देशिका का उपयोग करके बूट नहीं होगा")। उस मामले में कई चीजें हैं जो आपको करनी चाहिए।

$ cd /
$ mkdir backups

$ tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys \
     --exclude=dev/pts --exclude=backups .

एक बार रूट फ़ोल्डर को नए सिस्टम में कॉपी करने के बाद आपको बूट करने से पहले ग्रब को अपडेट करना होगा।

$ grub-install --recheck /dev/sdX (Where X is the partition number)
$ update-grub

+1 मुझे लगता है कि सुराग ओपी में असफल बूट संदेश में है और यह इसे संबोधित करता है।
msw

जैसा कि यह कुछ इस तरह से काम करता है। मैं अपनी मशीन पर एक फाइलसिस्टम (FS) के साथ काम कर रहा था जिसे मुझे कॉपी करने की आवश्यकता थी। यह सब मेरे लिए था tar cतो tar xयह करने के लिए ले लिया । किकर हालांकि यह सुनिश्चित करने के लिए था कि मेरी मशीन बंद थी क्योंकि मैं एफएस का उपयोग करके इसे बूट कर रहा था जो मेरी मशीन के लिए स्थानीय था, लेकिन डिवाइस के लिए रिमोट जो मैं बूट कर रहा था (मैं एनएफएस के माध्यम से डिवाइस शुरू कर रहा था)
TopGunCoder

grub-install: error: embedding is not possible, but this is required for cross-disk install.
विटाली ज़डेनविच

2

आप FSArchiver की कोशिश कर सकते हैं । यह उसी तरह के विभाजन का उत्तराधिकारी है, जो अब अप्राप्त है। मैंने पिछले समय में एफिम्ज़र और एफएसअरिवर दोनों का उपयोग किया है, और उन्होंने दोनों को अच्छी तरह से काम किया है। जहाँ तक मुझे पता है, वे दोनों एक फाइलसिस्टम की प्रतियां बनाते हैं जो मूल के समान ही है। मुझे लगता है कि FSArchiver आंशिकता से थोड़ा अधिक शक्तिशाली है। उदाहरण के लिए, यह ext4 के साथ काम करता है, जबकि पक्षपात नहीं करता है। देखें FSArchiver / Partimage तुलना तालिका


2

duफ़ोल्डरों की तुलना करने का उपयोग स्वाभाविक रूप से परेशानी भरा है। यदि आप वास्तव में अपने आकार के आधार पर 2 निर्देशिकाओं की तुलना करना चाहते हैं तो duइस तरह का उपयोग करें:

$ du -sh --apparent-size <dir>

यह स्विच निर्देशिकाओं को एक्यूट आकार बनाम डिस्क स्थान की मात्रा की रिपोर्ट करेगा जो भौतिक ड्राइव माध्यम पर संग्रहीत होने पर खपत करता है। डिस्क को ब्लॉकों में व्यवस्थित किया जाता है और इन ब्लॉकों को फाइलें लिखी जाती हैं। यदि किसी फ़ाइल को केवल BLOCK + 1 स्थान की आवश्यकता होती है, तो वह 2 BLOCKS अंतरिक्ष की कीमत का उपभोग करेगा, और यह duसामान्य रूप से रिपोर्ट करता है। याद रखें कि टूल का नाम डिस्क उपयोग है!

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

$ dd if=/dev/sda1 of=/srv/boot.img

फिर आप boot.imgविभाजन को पुनर्स्थापित करने के लिए इसका उपयोग कर सकते हैं।

$ dd if=/srv/boot.img of=/dev/sdb1

du डिस्क पर आकार की रिपोर्ट भी करेगा (इसलिए विरल फाइलें और हार्ड लिंक कम जगह लेते हैं)। उदाहरण के लिए, du -sh /var21G देता है लेकिन du -sh --apparent-size /varमेरे सिस्टम पर 209G देता है।
विक्टर रोएटमैन

0

यह इस पर थोड़ा निर्भर करता है कि आप "समान" से क्या मतलब है।

  • बस कर rsyncठीक समय के सबसे अधिक होगा। कभी-कभी आप tarएक फ़ाइल में सब कुछ पैक करने और दूसरी जगह निकालने के लिए उपयोग करना चाहते हैं ।
  • यदि आप संपूर्ण फ़ाइल सिस्टम का एक क्लोन चाहते हैं, तो आप संपूर्ण फ़ाइल सिस्टम की ddप्रतिलिपि बनाने के लिए उपयोग कर सकते हैं ।

यदि आपके पास अपने डिवाइस को डीबग करने का कोई मतलब है, तो यह पता लगाने की कोशिश करें कि वास्तव में समस्या क्या है, क्योंकि यह वर्तमान में बंद नहीं होता है।

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